Skip to content

Commit f321acd

Browse files
author
Prasanna Santhanam
committed
Provide mock implementations of VPC network commands
Provide mock implementations for all network commands in the MockNetworkManagerImpl of the simualtor Signed-off-by: Prasanna Santhanam <tsp@apache.org>
1 parent da6f39b commit f321acd

4 files changed

Lines changed: 209 additions & 32 deletions

File tree

plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockNetworkManager.java

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,29 @@
2222
import com.cloud.agent.api.Answer;
2323
import com.cloud.agent.api.CheckS2SVpnConnectionsCommand;
2424
import com.cloud.agent.api.NetworkUsageCommand;
25+
import com.cloud.agent.api.PlugNicAnswer;
2526
import com.cloud.agent.api.PlugNicCommand;
2627
import com.cloud.agent.api.PvlanSetupCommand;
28+
import com.cloud.agent.api.SetupGuestNetworkAnswer;
29+
import com.cloud.agent.api.SetupGuestNetworkCommand;
30+
import com.cloud.agent.api.UnPlugNicAnswer;
2731
import com.cloud.agent.api.UnPlugNicCommand;
2832
import com.cloud.agent.api.routing.DhcpEntryCommand;
33+
import com.cloud.agent.api.routing.IpAssocAnswer;
2934
import com.cloud.agent.api.routing.IpAssocCommand;
3035
import com.cloud.agent.api.routing.IpAssocVpcCommand;
3136
import com.cloud.agent.api.routing.LoadBalancerConfigCommand;
3237
import com.cloud.agent.api.routing.SetFirewallRulesCommand;
38+
import com.cloud.agent.api.routing.SetNetworkACLAnswer;
3339
import com.cloud.agent.api.routing.SetNetworkACLCommand;
40+
import com.cloud.agent.api.routing.SetPortForwardingRulesAnswer;
3441
import com.cloud.agent.api.routing.SetPortForwardingRulesCommand;
3542
import com.cloud.agent.api.routing.SetPortForwardingRulesVpcCommand;
43+
import com.cloud.agent.api.routing.SetSourceNatAnswer;
3644
import com.cloud.agent.api.routing.SetSourceNatCommand;
45+
import com.cloud.agent.api.routing.SetStaticNatRulesAnswer;
3746
import com.cloud.agent.api.routing.SetStaticNatRulesCommand;
47+
import com.cloud.agent.api.routing.SetStaticRouteAnswer;
3848
import com.cloud.agent.api.routing.SetStaticRouteCommand;
3949
import com.cloud.agent.api.routing.Site2SiteVpnCfgCommand;
4050
import com.cloud.utils.component.Manager;
@@ -57,19 +67,23 @@ public interface MockNetworkManager extends Manager {
5767

5868
Answer setupPVLAN(PvlanSetupCommand cmd);
5969

60-
Answer plugNic(PlugNicCommand cmd);
70+
PlugNicAnswer plugNic(PlugNicCommand cmd);
6171

62-
Answer unplugNic(UnPlugNicCommand cmd);
72+
UnPlugNicAnswer unplugNic(UnPlugNicCommand cmd);
6373

64-
Answer ipAssoc(IpAssocVpcCommand cmd);
74+
IpAssocAnswer ipAssoc(IpAssocVpcCommand cmd);
6575

66-
Answer setSourceNat(SetSourceNatCommand cmd);
76+
SetSourceNatAnswer setSourceNat(SetSourceNatCommand cmd);
6777

68-
Answer setNetworkAcl(SetNetworkACLCommand cmd);
78+
SetNetworkACLAnswer setNetworkAcl(SetNetworkACLCommand cmd);
6979

70-
Answer setVpcPortForwards(SetPortForwardingRulesVpcCommand cmd);
80+
SetPortForwardingRulesAnswer setVpcPortForwards(SetPortForwardingRulesVpcCommand cmd);
7181

72-
Answer setStaticRoute(SetStaticRouteCommand cmd);
82+
SetupGuestNetworkAnswer setUpGuestNetwork(SetupGuestNetworkCommand cmd);
83+
84+
SetStaticNatRulesAnswer setVPCStaticNatRules(SetStaticNatRulesCommand cmd);
85+
86+
SetStaticRouteAnswer setStaticRoute(SetStaticRouteCommand cmd);
7387

7488
Answer siteToSiteVpn(Site2SiteVpnCfgCommand cmd);
7589

plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockNetworkManagerImpl.java

Lines changed: 122 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,47 @@
2323
import com.cloud.agent.api.CheckS2SVpnConnectionsCommand;
2424
import com.cloud.agent.api.NetworkUsageAnswer;
2525
import com.cloud.agent.api.NetworkUsageCommand;
26+
import com.cloud.agent.api.PlugNicAnswer;
2627
import com.cloud.agent.api.PlugNicCommand;
2728
import com.cloud.agent.api.PvlanSetupCommand;
29+
import com.cloud.agent.api.SetupGuestNetworkAnswer;
30+
import com.cloud.agent.api.SetupGuestNetworkCommand;
31+
import com.cloud.agent.api.UnPlugNicAnswer;
2832
import com.cloud.agent.api.UnPlugNicCommand;
2933
import com.cloud.agent.api.routing.DhcpEntryCommand;
34+
import com.cloud.agent.api.routing.IpAssocAnswer;
3035
import com.cloud.agent.api.routing.IpAssocCommand;
3136
import com.cloud.agent.api.routing.IpAssocVpcCommand;
3237
import com.cloud.agent.api.routing.LoadBalancerConfigCommand;
38+
import com.cloud.agent.api.routing.NetworkElementCommand;
39+
import com.cloud.agent.api.routing.SetFirewallRulesAnswer;
3340
import com.cloud.agent.api.routing.SetFirewallRulesCommand;
41+
import com.cloud.agent.api.routing.SetNetworkACLAnswer;
3442
import com.cloud.agent.api.routing.SetNetworkACLCommand;
43+
import com.cloud.agent.api.routing.SetPortForwardingRulesAnswer;
3544
import com.cloud.agent.api.routing.SetPortForwardingRulesCommand;
3645
import com.cloud.agent.api.routing.SetPortForwardingRulesVpcCommand;
46+
import com.cloud.agent.api.routing.SetSourceNatAnswer;
3747
import com.cloud.agent.api.routing.SetSourceNatCommand;
48+
import com.cloud.agent.api.routing.SetStaticNatRulesAnswer;
3849
import com.cloud.agent.api.routing.SetStaticNatRulesCommand;
50+
import com.cloud.agent.api.routing.SetStaticRouteAnswer;
3951
import com.cloud.agent.api.routing.SetStaticRouteCommand;
4052
import com.cloud.agent.api.routing.Site2SiteVpnCfgCommand;
53+
import com.cloud.agent.api.to.IpAddressTO;
54+
import com.cloud.agent.api.to.PortForwardingRuleTO;
55+
import com.cloud.simulator.MockVMVO;
56+
import com.cloud.simulator.dao.MockVMDao;
4157
import com.cloud.utils.component.ManagerBase;
58+
import org.apache.log4j.Logger;
59+
60+
import javax.inject.Inject;
4261

4362
public class MockNetworkManagerImpl extends ManagerBase implements MockNetworkManager {
63+
private static final Logger s_logger = Logger.getLogger(MockVmManagerImpl.class);
64+
65+
@Inject
66+
MockVMDao _mockVmDao;
4467

4568
@Override
4669
public Answer SetStaticNatRules(SetStaticNatRulesCommand cmd) {
@@ -53,8 +76,22 @@ public Answer SetPortForwardingRules(SetPortForwardingRulesCommand cmd) {
5376
}
5477

5578
@Override
56-
public Answer SetFirewallRules(SetFirewallRulesCommand cmd) {
57-
return new Answer(cmd);
79+
public SetFirewallRulesAnswer SetFirewallRules(SetFirewallRulesCommand cmd) {
80+
String[] results = new String[cmd.getRules().length];
81+
String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
82+
if (routerIp == null) {
83+
return new SetFirewallRulesAnswer(cmd, false, results);
84+
}
85+
86+
String[][] rules = cmd.generateFwRules();
87+
StringBuilder sb = new StringBuilder();
88+
String[] fwRules = rules[0];
89+
if (fwRules.length > 0) {
90+
for (int i = 0; i < fwRules.length; i++) {
91+
sb.append(fwRules[i]).append(',');
92+
}
93+
}
94+
return new SetFirewallRulesAnswer(cmd, true, results);
5895
}
5996

6097

@@ -84,38 +121,107 @@ public Answer setupPVLAN(PvlanSetupCommand cmd) {
84121
}
85122

86123
@Override
87-
public Answer plugNic(PlugNicCommand cmd) {
88-
return new Answer(cmd);
124+
public PlugNicAnswer plugNic(PlugNicCommand cmd) {
125+
String vmname = cmd.getVmName();
126+
if (_mockVmDao.findByVmName(vmname) != null) {
127+
s_logger.debug("Plugged NIC (dev=" + cmd.getNic().getDeviceId() + ", " + cmd.getNic().getIp() + ") into " + cmd.getVmName());
128+
return new PlugNicAnswer(cmd, true, "success");
129+
}
130+
s_logger.error("Plug NIC failed for (dev=" + cmd.getNic().getDeviceId() + ", " + cmd.getNic().getIp() + ") into " + cmd.getVmName());
131+
return new PlugNicAnswer(cmd, false, "failure");
89132
}
90133

91134
@Override
92-
public Answer unplugNic(UnPlugNicCommand cmd) {
93-
return new Answer(cmd);
135+
public UnPlugNicAnswer unplugNic(UnPlugNicCommand cmd) {
136+
String vmname = cmd.getVmName();
137+
if (_mockVmDao.findByVmName(vmname) != null) {
138+
s_logger.debug("Plugged NIC (dev=" + cmd.getNic().getDeviceId() + ", " + cmd.getNic().getIp() + ") into " + cmd.getVmName());
139+
return new UnPlugNicAnswer(cmd, true, "success");
140+
}
141+
s_logger.error("Plug NIC failed for (dev=" + cmd.getNic().getDeviceId() + ", " + cmd.getNic().getIp() + ") into " + cmd.getVmName());
142+
return new UnPlugNicAnswer(cmd, false, "failure");
94143
}
95144

96145
@Override
97-
public Answer ipAssoc(IpAssocVpcCommand cmd) {
98-
return new Answer(cmd);
146+
public IpAssocAnswer ipAssoc(IpAssocVpcCommand cmd) {
147+
String[] results = new String[cmd.getIpAddresses().length];
148+
int i = 0;
149+
IpAddressTO[] ips = cmd.getIpAddresses();
150+
for (IpAddressTO ip : ips) {
151+
results[i++] = ip.getPublicIp() + " - success";
152+
}
153+
return new IpAssocAnswer(cmd, results);
99154
}
100155

101156
@Override
102-
public Answer setSourceNat(SetSourceNatCommand cmd) {
103-
return new Answer(cmd);
157+
public SetSourceNatAnswer setSourceNat(SetSourceNatCommand cmd) {
158+
return new SetSourceNatAnswer(cmd, true, "success");
104159
}
105160

106161
@Override
107-
public Answer setNetworkAcl(SetNetworkACLCommand cmd) {
108-
return new Answer(cmd);
162+
public SetNetworkACLAnswer setNetworkAcl(SetNetworkACLCommand cmd) {
163+
String[] results = new String[cmd.getRules().length];
164+
String routerName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
165+
String routerIp = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
166+
167+
StringBuilder sb = new StringBuilder();
168+
sb.append(routerIp);
169+
sb.append(routerName);
170+
171+
String [][] rules = cmd.generateFwRules();
172+
String[] aclRules = rules[0];
173+
174+
for (int i = 0; i < aclRules.length; i++) {
175+
sb.append(aclRules[i]).append(',');
176+
}
177+
return new SetNetworkACLAnswer(cmd, true, results);
109178
}
110179

111180
@Override
112-
public Answer setVpcPortForwards(SetPortForwardingRulesVpcCommand cmd) {
113-
return new Answer(cmd);
181+
public SetPortForwardingRulesAnswer setVpcPortForwards(SetPortForwardingRulesVpcCommand cmd) {
182+
String[] results = new String[cmd.getRules().length];
183+
StringBuilder sb = new StringBuilder();
184+
for (PortForwardingRuleTO rule : cmd.getRules()) {
185+
sb.append("src:");
186+
sb.append(rule.getStringSrcPortRange());
187+
sb.append("dst:");
188+
sb.append(rule.getStringDstPortRange());
189+
}
190+
return new SetPortForwardingRulesAnswer(cmd, results, true);
114191
}
115192

116193
@Override
117-
public Answer setStaticRoute(SetStaticRouteCommand cmd) {
118-
return new Answer(cmd);
194+
public SetStaticRouteAnswer setStaticRoute(SetStaticRouteCommand cmd) {
195+
String[] results = new String[cmd.getStaticRoutes().length];
196+
String [][] rules = cmd.generateSRouteRules();
197+
StringBuilder sb = new StringBuilder();
198+
String[] srRules = rules[0];
199+
for (int i = 0; i < srRules.length; i++) {
200+
sb.append(srRules[i]).append(',');
201+
}
202+
return new SetStaticRouteAnswer(cmd, true, results);
203+
}
204+
205+
@Override
206+
public SetupGuestNetworkAnswer setUpGuestNetwork(SetupGuestNetworkCommand cmd) {
207+
String domrName = cmd.getAccessDetail(NetworkElementCommand.ROUTER_NAME);
208+
try {
209+
MockVMVO vms = _mockVmDao.findByVmName(domrName);
210+
if (vms == null) {
211+
return new SetupGuestNetworkAnswer(cmd, false, "Can not find VM " + domrName);
212+
}
213+
return new SetupGuestNetworkAnswer(cmd, true, "success");
214+
} catch (Exception e) {
215+
String msg = "Creating guest network failed due to " + e.toString();
216+
s_logger.warn(msg, e);
217+
return new SetupGuestNetworkAnswer(cmd, false, msg);
218+
}
219+
}
220+
221+
@Override
222+
public SetStaticNatRulesAnswer setVPCStaticNatRules(SetStaticNatRulesCommand cmd) {
223+
String[] results = new String[cmd.getRules().length];
224+
return new SetStaticNatRulesAnswer(cmd, results, true);
119225
}
120226

121227
@Override

plugins/hypervisors/simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,47 @@
1717
package com.cloud.agent.manager;
1818

1919

20-
import com.cloud.agent.api.*;
20+
import com.cloud.agent.api.Answer;
21+
import com.cloud.agent.api.BumpUpPriorityCommand;
22+
import com.cloud.agent.api.CheckRouterAnswer;
23+
import com.cloud.agent.api.CheckRouterCommand;
24+
import com.cloud.agent.api.CheckVirtualMachineAnswer;
25+
import com.cloud.agent.api.CheckVirtualMachineCommand;
26+
import com.cloud.agent.api.CleanupNetworkRulesCmd;
27+
import com.cloud.agent.api.CreateVMSnapshotAnswer;
28+
import com.cloud.agent.api.CreateVMSnapshotCommand;
29+
import com.cloud.agent.api.DeleteVMSnapshotAnswer;
30+
import com.cloud.agent.api.DeleteVMSnapshotCommand;
31+
import com.cloud.agent.api.GetDomRVersionAnswer;
32+
import com.cloud.agent.api.GetDomRVersionCmd;
33+
import com.cloud.agent.api.GetVmStatsAnswer;
34+
import com.cloud.agent.api.GetVmStatsCommand;
35+
import com.cloud.agent.api.GetVncPortAnswer;
36+
import com.cloud.agent.api.GetVncPortCommand;
37+
import com.cloud.agent.api.MigrateAnswer;
38+
import com.cloud.agent.api.MigrateCommand;
39+
import com.cloud.agent.api.NetworkRulesVmSecondaryIpCommand;
40+
import com.cloud.agent.api.PrepareForMigrationAnswer;
41+
import com.cloud.agent.api.PrepareForMigrationCommand;
42+
import com.cloud.agent.api.RebootAnswer;
43+
import com.cloud.agent.api.RebootCommand;
44+
import com.cloud.agent.api.RevertToVMSnapshotAnswer;
45+
import com.cloud.agent.api.RevertToVMSnapshotCommand;
46+
import com.cloud.agent.api.ScaleVmCommand;
47+
import com.cloud.agent.api.SecurityGroupRuleAnswer;
48+
import com.cloud.agent.api.SecurityGroupRulesCmd;
49+
import com.cloud.agent.api.StartAnswer;
50+
import com.cloud.agent.api.StartCommand;
51+
import com.cloud.agent.api.StopAnswer;
52+
import com.cloud.agent.api.StopCommand;
53+
import com.cloud.agent.api.VmStatsEntry;
2154
import com.cloud.agent.api.check.CheckSshAnswer;
2255
import com.cloud.agent.api.check.CheckSshCommand;
2356
import com.cloud.agent.api.proxy.CheckConsoleProxyLoadCommand;
2457
import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand;
25-
import com.cloud.agent.api.routing.*;
58+
import com.cloud.agent.api.routing.NetworkElementCommand;
59+
import com.cloud.agent.api.routing.SavePasswordCommand;
60+
import com.cloud.agent.api.routing.VmDataCommand;
2661
import com.cloud.agent.api.to.NicTO;
2762
import com.cloud.agent.api.to.VirtualMachineTO;
2863
import com.cloud.network.Networks.TrafficType;
@@ -437,17 +472,33 @@ public Answer plugSecondaryIp(NetworkRulesVmSecondaryIpCommand cmd) {
437472

438473
@Override
439474
public Answer createVmSnapshot(CreateVMSnapshotCommand cmd) {
440-
return null; //To change body of implemented methods use File | Settings | File Templates.
475+
String vmName = cmd.getVmName();
476+
String vmSnapshotName = cmd.getTarget().getSnapshotName();
477+
478+
s_logger.debug("Created snapshot " +vmSnapshotName+ " for vm " + vmName);
479+
return new CreateVMSnapshotAnswer(cmd, cmd.getTarget(), cmd.getVolumeTOs());
441480
}
442481

443482
@Override
444483
public Answer deleteVmSnapshot(DeleteVMSnapshotCommand cmd) {
445-
return null; //To change body of implemented methods use File | Settings | File Templates.
484+
String vm = cmd.getVmName();
485+
String snapshotName = cmd.getTarget().getSnapshotName();
486+
if(_mockVmDao.findByVmName(cmd.getVmName()) != null) {
487+
return new DeleteVMSnapshotAnswer(cmd, false, "No VM by name "+ cmd.getVmName());
488+
}
489+
s_logger.debug("Removed snapshot " +snapshotName+ " of VM "+vm);
490+
return new DeleteVMSnapshotAnswer(cmd, true, "success");
446491
}
447492

448493
@Override
449494
public Answer revertVmSnapshot(RevertToVMSnapshotCommand cmd) {
450-
return null; //To change body of implemented methods use File | Settings | File Templates.
495+
String vm = cmd.getVmName();
496+
String snapshot = cmd.getTarget().getSnapshotName();
497+
if(_mockVmDao.findByVmName(cmd.getVmName()) != null) {
498+
return new RevertToVMSnapshotAnswer(cmd, false, "No VM by name "+ cmd.getVmName());
499+
}
500+
s_logger.debug("Reverted to snapshot " +snapshot+ " of VM "+vm);
501+
return new RevertToVMSnapshotAnswer(cmd, true, "success");
451502
}
452503

453504
@Override

plugins/hypervisors/simulator/src/com/cloud/agent/manager/SimulatorManagerImpl.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import com.cloud.agent.api.SecStorageSetupCommand;
6060
import com.cloud.agent.api.SecStorageVMSetupCommand;
6161
import com.cloud.agent.api.SecurityGroupRulesCmd;
62+
import com.cloud.agent.api.SetupGuestNetworkCommand;
6263
import com.cloud.agent.api.StartCommand;
6364
import com.cloud.agent.api.StopCommand;
6465
import com.cloud.agent.api.StoragePoolInfo;
@@ -331,27 +332,32 @@ public Answer simulate(Command cmd, String hostGuid) {
331332
return _mockNetworkMgr.setSourceNat((SetSourceNatCommand) cmd);
332333
} else if (cmd instanceof SetNetworkACLCommand) {
333334
return _mockNetworkMgr.setNetworkAcl((SetNetworkACLCommand) cmd);
335+
} else if (cmd instanceof SetupGuestNetworkCommand) {
336+
return _mockNetworkMgr.setUpGuestNetwork((SetupGuestNetworkCommand) cmd);
334337
} else if (cmd instanceof SetPortForwardingRulesVpcCommand) {
335338
return _mockNetworkMgr.setVpcPortForwards((SetPortForwardingRulesVpcCommand) cmd);
339+
} else if (cmd instanceof SetStaticNatRulesCommand) {
340+
return _mockNetworkMgr.setVPCStaticNatRules((SetStaticNatRulesCommand) cmd);
336341
} else if (cmd instanceof SetStaticRouteCommand) {
337342
return _mockNetworkMgr.setStaticRoute((SetStaticRouteCommand) cmd);
338343
} else if (cmd instanceof Site2SiteVpnCfgCommand) {
339344
return _mockNetworkMgr.siteToSiteVpn((Site2SiteVpnCfgCommand) cmd);
340345
} else if (cmd instanceof CheckS2SVpnConnectionsCommand) {
341346
return _mockNetworkMgr.checkSiteToSiteVpnConnection((CheckS2SVpnConnectionsCommand) cmd);
342347
} else if (cmd instanceof CreateVMSnapshotCommand) {
343-
return _mockVmMgr.createVmSnapshot((CreateVMSnapshotCommand)cmd);
348+
return _mockVmMgr.createVmSnapshot((CreateVMSnapshotCommand) cmd);
344349
} else if (cmd instanceof DeleteVMSnapshotCommand) {
345-
return _mockVmMgr.deleteVmSnapshot((DeleteVMSnapshotCommand)cmd);
350+
return _mockVmMgr.deleteVmSnapshot((DeleteVMSnapshotCommand) cmd);
346351
} else if (cmd instanceof RevertToVMSnapshotCommand) {
347-
return _mockVmMgr.revertVmSnapshot((RevertToVMSnapshotCommand)cmd);
352+
return _mockVmMgr.revertVmSnapshot((RevertToVMSnapshotCommand) cmd);
348353
} else if (cmd instanceof NetworkRulesVmSecondaryIpCommand) {
349-
return _mockVmMgr.plugSecondaryIp((NetworkRulesVmSecondaryIpCommand)cmd);
354+
return _mockVmMgr.plugSecondaryIp((NetworkRulesVmSecondaryIpCommand) cmd);
350355
} else if (cmd instanceof ScaleVmCommand) {
351356
return _mockVmMgr.scaleVm((ScaleVmCommand) cmd);
352357
} else if (cmd instanceof PvlanSetupCommand) {
353358
return _mockNetworkMgr.setupPVLAN((PvlanSetupCommand) cmd);
354359
} else {
360+
s_logger.error("Simulator does not implement command of type "+cmd.toString());
355361
return Answer.createUnsupportedCommandAnswer(cmd);
356362
}
357363
} catch(Exception e) {

0 commit comments

Comments
 (0)