mirror of https://github.com/apache/cloudstack.git
Refactoring the LibvirtComputingResource
- Adding 4 new command wrappers - 12 unit tests added - KVM hypervisor plugin with 15.5% coverage
This commit is contained in:
parent
5499eecd33
commit
6748a73b82
|
|
@ -85,8 +85,6 @@ import com.ceph.rbd.RbdImage;
|
|||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.BackupSnapshotAnswer;
|
||||
import com.cloud.agent.api.BackupSnapshotCommand;
|
||||
import com.cloud.agent.api.CheckNetworkAnswer;
|
||||
import com.cloud.agent.api.CheckNetworkCommand;
|
||||
import com.cloud.agent.api.CheckOnHostCommand;
|
||||
import com.cloud.agent.api.Command;
|
||||
import com.cloud.agent.api.CreatePrivateTemplateFromSnapshotCommand;
|
||||
|
|
@ -98,12 +96,10 @@ import com.cloud.agent.api.FenceCommand;
|
|||
import com.cloud.agent.api.HostVmStateReportEntry;
|
||||
import com.cloud.agent.api.ManageSnapshotAnswer;
|
||||
import com.cloud.agent.api.ManageSnapshotCommand;
|
||||
import com.cloud.agent.api.NetworkRulesSystemVmCommand;
|
||||
import com.cloud.agent.api.NetworkUsageAnswer;
|
||||
import com.cloud.agent.api.NetworkUsageCommand;
|
||||
import com.cloud.agent.api.OvsCreateTunnelAnswer;
|
||||
import com.cloud.agent.api.OvsCreateTunnelCommand;
|
||||
import com.cloud.agent.api.OvsDestroyTunnelCommand;
|
||||
import com.cloud.agent.api.PingCommand;
|
||||
import com.cloud.agent.api.PingRoutingCommand;
|
||||
import com.cloud.agent.api.PingRoutingWithNwGroupsCommand;
|
||||
|
|
@ -122,8 +118,6 @@ import com.cloud.agent.api.UnPlugNicAnswer;
|
|||
import com.cloud.agent.api.UnPlugNicCommand;
|
||||
import com.cloud.agent.api.VmDiskStatsEntry;
|
||||
import com.cloud.agent.api.VmStatsEntry;
|
||||
import com.cloud.agent.api.check.CheckSshAnswer;
|
||||
import com.cloud.agent.api.check.CheckSshCommand;
|
||||
import com.cloud.agent.api.routing.IpAssocCommand;
|
||||
import com.cloud.agent.api.routing.IpAssocVpcCommand;
|
||||
import com.cloud.agent.api.routing.NetworkElementCommand;
|
||||
|
|
@ -178,7 +172,6 @@ import com.cloud.network.Networks.BroadcastDomainType;
|
|||
import com.cloud.network.Networks.IsolationType;
|
||||
import com.cloud.network.Networks.RouterPrivateIpStrategy;
|
||||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.network.PhysicalNetworkSetupInfo;
|
||||
import com.cloud.resource.ServerResource;
|
||||
import com.cloud.resource.ServerResourceBase;
|
||||
import com.cloud.storage.JavaStorageLayer;
|
||||
|
|
@ -1161,7 +1154,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
return "";
|
||||
}
|
||||
|
||||
private boolean checkNetwork(final String networkName) {
|
||||
public boolean checkNetwork(final String networkName) {
|
||||
if (networkName == null) {
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1306,18 +1299,12 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
return execute((UnPlugNicCommand)cmd);
|
||||
} else if (cmd instanceof NetworkElementCommand) {
|
||||
return _virtRouterResource.executeRequest((NetworkElementCommand)cmd);
|
||||
} else if (cmd instanceof CheckSshCommand) {
|
||||
return execute((CheckSshCommand)cmd);
|
||||
} else if (cmd instanceof NetworkUsageCommand) {
|
||||
return execute((NetworkUsageCommand)cmd);
|
||||
} else if (cmd instanceof NetworkRulesSystemVmCommand) {
|
||||
return execute((NetworkRulesSystemVmCommand)cmd);
|
||||
} else if (cmd instanceof CopyVolumeCommand) {
|
||||
return execute((CopyVolumeCommand)cmd);
|
||||
} else if (cmd instanceof ResizeVolumeCommand) {
|
||||
return execute((ResizeVolumeCommand)cmd);
|
||||
} else if (cmd instanceof CheckNetworkCommand) {
|
||||
return execute((CheckNetworkCommand)cmd);
|
||||
} else if (cmd instanceof StorageSubSystemCommand) {
|
||||
return storageHandler.handleStorageCommands((StorageSubSystemCommand)cmd);
|
||||
} else if (cmd instanceof PvlanSetupCommand) {
|
||||
|
|
@ -1326,8 +1313,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
return execute((CheckOnHostCommand)cmd);
|
||||
} else if (cmd instanceof OvsCreateTunnelCommand) {
|
||||
return execute((OvsCreateTunnelCommand)cmd);
|
||||
} else if (cmd instanceof OvsDestroyTunnelCommand) {
|
||||
return execute((OvsDestroyTunnelCommand)cmd);
|
||||
} else {
|
||||
s_logger.warn("Unsupported command ");
|
||||
return Answer.createUnsupportedCommandAnswer(cmd);
|
||||
|
|
@ -1367,6 +1352,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
s_logger.debug("### KVM network for tunnels created:" + nwName);
|
||||
} catch (final Exception e) {
|
||||
s_logger.warn("createTunnelNetwork failed", e);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1374,7 +1360,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
public synchronized boolean configureTunnelNetwork(final long networkId,
|
||||
final long hostId, final String nwName) {
|
||||
try {
|
||||
findOrCreateTunnelNetwork(nwName);
|
||||
final boolean findResult = findOrCreateTunnelNetwork(nwName);
|
||||
if (!findResult) {
|
||||
s_logger.warn("LibvirtComputingResource.findOrCreateTunnelNetwork() failed! Cannot proceed creating the tunnel.");
|
||||
return false;
|
||||
}
|
||||
final String configuredHosts = Script
|
||||
.runSimpleBashScript("ovs-vsctl get bridge " + nwName
|
||||
+ " other_config:ovs-host-setup");
|
||||
|
|
@ -1441,53 +1431,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
}
|
||||
}
|
||||
|
||||
private Answer execute(final OvsDestroyTunnelCommand cmd) {
|
||||
try {
|
||||
if (!findOrCreateTunnelNetwork(cmd.getBridgeName())) {
|
||||
s_logger.warn("Unable to find tunnel network for GRE key:"
|
||||
+ cmd.getBridgeName());
|
||||
return new Answer(cmd, false, "No network found");
|
||||
}
|
||||
|
||||
final Script command = new Script(_ovsTunnelPath, _timeout, s_logger);
|
||||
command.add("destroy_tunnel");
|
||||
command.add("--bridge", cmd.getBridgeName());
|
||||
command.add("--iface_name", cmd.getInPortName());
|
||||
final String result = command.execute();
|
||||
if (result == null) {
|
||||
return new Answer(cmd, true, result);
|
||||
} else {
|
||||
return new Answer(cmd, false, result);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
s_logger.warn("caught execption when destroy ovs tunnel", e);
|
||||
return new Answer(cmd, false, e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private CheckNetworkAnswer execute(final CheckNetworkCommand cmd) {
|
||||
final List<PhysicalNetworkSetupInfo> phyNics = cmd.getPhysicalNetworkInfoList();
|
||||
String errMsg = null;
|
||||
for (final PhysicalNetworkSetupInfo nic : phyNics) {
|
||||
if (!checkNetwork(nic.getGuestNetworkName())) {
|
||||
errMsg = "Can not find network: " + nic.getGuestNetworkName();
|
||||
break;
|
||||
} else if (!checkNetwork(nic.getPrivateNetworkName())) {
|
||||
errMsg = "Can not find network: " + nic.getPrivateNetworkName();
|
||||
break;
|
||||
} else if (!checkNetwork(nic.getPublicNetworkName())) {
|
||||
errMsg = "Can not find network: " + nic.getPublicNetworkName();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (errMsg != null) {
|
||||
return new CheckNetworkAnswer(cmd, false, errMsg);
|
||||
} else {
|
||||
return new CheckNetworkAnswer(cmd, true, null);
|
||||
}
|
||||
}
|
||||
|
||||
private CopyVolumeAnswer execute(final CopyVolumeCommand cmd) {
|
||||
/**
|
||||
This method is only used for copying files from Primary Storage TO Secondary Storage
|
||||
|
|
@ -2957,7 +2900,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
for (final NicTO nic : nics) {
|
||||
if (nic.isSecurityGroupEnabled() || nic.getIsolationUri() != null && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) {
|
||||
if (vmSpec.getType() != VirtualMachine.Type.User) {
|
||||
default_network_rules_for_systemvm(conn, vmName);
|
||||
configureDefaultNetworkRulesForSystemVm(conn, vmName);
|
||||
break;
|
||||
} else {
|
||||
final List<String> nicSecIps = nic.getNicSecIps();
|
||||
|
|
@ -3193,26 +3136,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
vm.getDevices().addDevice(getVifDriver(nic.getType()).plug(nic, vm.getPlatformEmulator().toString(), nicAdapter).toString());
|
||||
}
|
||||
|
||||
protected CheckSshAnswer execute(final CheckSshCommand cmd) {
|
||||
final String vmName = cmd.getName();
|
||||
final String privateIp = cmd.getIp();
|
||||
final int cmdPort = cmd.getPort();
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Ping command port, " + privateIp + ":" + cmdPort);
|
||||
}
|
||||
|
||||
if (!_virtRouterResource.connect(privateIp, cmdPort)) {
|
||||
return new CheckSshAnswer(cmd, "Can not ping System vm " + vmName + " because of a connection failure");
|
||||
}
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Ping command port succeeded for vm " + vmName);
|
||||
}
|
||||
|
||||
return new CheckSshAnswer(cmd);
|
||||
}
|
||||
|
||||
public boolean cleanupDisk(final DiskDef disk) {
|
||||
final String path = disk.getDiskPath();
|
||||
|
||||
|
|
@ -4240,7 +4163,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
return true;
|
||||
}
|
||||
|
||||
protected boolean default_network_rules_for_systemvm(final Connect conn, final String vmName) {
|
||||
public boolean configureDefaultNetworkRulesForSystemVm(final Connect conn, final String vmName) {
|
||||
if (!_canBridgeFirewall) {
|
||||
return false;
|
||||
}
|
||||
|
|
@ -4371,19 +4294,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||
}
|
||||
}
|
||||
|
||||
private Answer execute(final NetworkRulesSystemVmCommand cmd) {
|
||||
boolean success = false;
|
||||
Connect conn;
|
||||
try {
|
||||
conn = LibvirtConnection.getConnectionByVmName(cmd.getVmName());
|
||||
success = default_network_rules_for_systemvm(conn, cmd.getVmName());
|
||||
} catch (final LibvirtException e) {
|
||||
s_logger.trace("Ignoring libvirt error.", e);
|
||||
}
|
||||
|
||||
return new Answer(cmd, success, "");
|
||||
}
|
||||
|
||||
private String prettyVersion(final long version) {
|
||||
final long major = version / 1000000;
|
||||
final long minor = version % 1000000 / 1000;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,57 @@
|
|||
//
|
||||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
//
|
||||
|
||||
package com.cloud.hypervisor.kvm.resource.wrapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.CheckNetworkAnswer;
|
||||
import com.cloud.agent.api.CheckNetworkCommand;
|
||||
import com.cloud.hypervisor.kvm.resource.LibvirtComputingResource;
|
||||
import com.cloud.network.PhysicalNetworkSetupInfo;
|
||||
import com.cloud.resource.CommandWrapper;
|
||||
|
||||
public final class LibvirtCheckNetworkCommandWrapper extends CommandWrapper<CheckNetworkCommand, Answer, LibvirtComputingResource> {
|
||||
|
||||
@Override
|
||||
public Answer execute(final CheckNetworkCommand command, final LibvirtComputingResource libvirtComputingResource) {
|
||||
final List<PhysicalNetworkSetupInfo> phyNics = command.getPhysicalNetworkInfoList();
|
||||
String errMsg = null;
|
||||
|
||||
for (final PhysicalNetworkSetupInfo nic : phyNics) {
|
||||
if (!libvirtComputingResource.checkNetwork(nic.getGuestNetworkName())) {
|
||||
errMsg = "Can not find network: " + nic.getGuestNetworkName();
|
||||
break;
|
||||
} else if (!libvirtComputingResource.checkNetwork(nic.getPrivateNetworkName())) {
|
||||
errMsg = "Can not find network: " + nic.getPrivateNetworkName();
|
||||
break;
|
||||
} else if (!libvirtComputingResource.checkNetwork(nic.getPublicNetworkName())) {
|
||||
errMsg = "Can not find network: " + nic.getPublicNetworkName();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (errMsg != null) {
|
||||
return new CheckNetworkAnswer(command, false, errMsg);
|
||||
} else {
|
||||
return new CheckNetworkAnswer(command, true, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
//
|
||||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
//
|
||||
|
||||
package com.cloud.hypervisor.kvm.resource.wrapper;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.check.CheckSshAnswer;
|
||||
import com.cloud.agent.api.check.CheckSshCommand;
|
||||
import com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource;
|
||||
import com.cloud.hypervisor.kvm.resource.LibvirtComputingResource;
|
||||
import com.cloud.resource.CommandWrapper;
|
||||
|
||||
public final class LibvirtCheckSshCommandWrapper extends CommandWrapper<CheckSshCommand, Answer, LibvirtComputingResource> {
|
||||
|
||||
private static final Logger s_logger = Logger.getLogger(LibvirtOvsVpcRoutingPolicyConfigCommandWrapper.class);
|
||||
|
||||
@Override
|
||||
public Answer execute(final CheckSshCommand command, final LibvirtComputingResource libvirtComputingResource) {
|
||||
final String vmName = command.getName();
|
||||
final String privateIp = command.getIp();
|
||||
final int cmdPort = command.getPort();
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Ping command port, " + privateIp + ":" + cmdPort);
|
||||
}
|
||||
|
||||
final VirtualRoutingResource virtRouterResource = libvirtComputingResource.getVirtRouterResource();
|
||||
if (!virtRouterResource.connect(privateIp, cmdPort)) {
|
||||
return new CheckSshAnswer(command, "Can not ping System vm " + vmName + " because of a connection failure");
|
||||
}
|
||||
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Ping command port succeeded for vm " + vmName);
|
||||
}
|
||||
|
||||
return new CheckSshAnswer(command);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
//
|
||||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
//
|
||||
|
||||
package com.cloud.hypervisor.kvm.resource.wrapper;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.libvirt.Connect;
|
||||
import org.libvirt.LibvirtException;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.NetworkRulesSystemVmCommand;
|
||||
import com.cloud.hypervisor.kvm.resource.LibvirtComputingResource;
|
||||
import com.cloud.resource.CommandWrapper;
|
||||
|
||||
public final class LibvirtNetworkRulesSystemVmCommandWrapper extends CommandWrapper<NetworkRulesSystemVmCommand, Answer, LibvirtComputingResource> {
|
||||
|
||||
private static final Logger s_logger = Logger.getLogger(LibvirtOvsVpcRoutingPolicyConfigCommandWrapper.class);
|
||||
|
||||
@Override
|
||||
public Answer execute(final NetworkRulesSystemVmCommand command, final LibvirtComputingResource libvirtComputingResource) {
|
||||
boolean success = false;
|
||||
try {
|
||||
final LibvirtConnectionWrapper libvirtConnectionWrapper = libvirtComputingResource.getLibvirtConnectionWrapper();
|
||||
|
||||
final Connect conn = libvirtConnectionWrapper.getConnectionByVmName(command.getVmName());
|
||||
success = libvirtComputingResource.configureDefaultNetworkRulesForSystemVm(conn, command.getVmName());
|
||||
} catch (final LibvirtException e) {
|
||||
s_logger.trace("Ignoring libvirt error.", e);
|
||||
}
|
||||
|
||||
return new Answer(command, success, "");
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
//
|
||||
// Licensed to the Apache Software Foundation (ASF) under one
|
||||
// or more contributor license agreements. See the NOTICE file
|
||||
// distributed with this work for additional information
|
||||
// regarding copyright ownership. The ASF licenses this file
|
||||
// to you under the Apache License, Version 2.0 (the
|
||||
// "License"); you may not use this file except in compliance
|
||||
// with the License. You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing,
|
||||
// software distributed under the License is distributed on an
|
||||
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
// KIND, either express or implied. See the License for the
|
||||
// specific language governing permissions and limitations
|
||||
// under the License.
|
||||
//
|
||||
|
||||
package com.cloud.hypervisor.kvm.resource.wrapper;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.OvsDestroyTunnelCommand;
|
||||
import com.cloud.hypervisor.kvm.resource.LibvirtComputingResource;
|
||||
import com.cloud.resource.CommandWrapper;
|
||||
import com.cloud.utils.script.Script;
|
||||
|
||||
public final class LibvirtOvsDestroyTunnelCommandWrapper extends CommandWrapper<OvsDestroyTunnelCommand, Answer, LibvirtComputingResource> {
|
||||
|
||||
private static final Logger s_logger = Logger.getLogger(LibvirtOvsDestroyTunnelCommandWrapper.class);
|
||||
|
||||
@Override
|
||||
public Answer execute(final OvsDestroyTunnelCommand command, final LibvirtComputingResource libvirtComputingResource) {
|
||||
try {
|
||||
if (!libvirtComputingResource.findOrCreateTunnelNetwork(command.getBridgeName())) {
|
||||
s_logger.warn("Unable to find tunnel network for GRE key:"
|
||||
+ command.getBridgeName());
|
||||
return new Answer(command, false, "No network found");
|
||||
}
|
||||
|
||||
final Script scriptCommand = new Script(libvirtComputingResource.getOvsTunnelPath(), libvirtComputingResource.getTimeout(), s_logger);
|
||||
scriptCommand.add("destroy_tunnel");
|
||||
scriptCommand.add("--bridge", command.getBridgeName());
|
||||
scriptCommand.add("--iface_name", command.getInPortName());
|
||||
final String result = scriptCommand.execute();
|
||||
if (result == null) {
|
||||
return new Answer(command, true, result);
|
||||
} else {
|
||||
return new Answer(command, false, result);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
s_logger.warn("caught execption when destroy ovs tunnel", e);
|
||||
return new Answer(command, false, e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -24,6 +24,7 @@ import com.cloud.agent.api.Answer;
|
|||
import com.cloud.agent.api.AttachIsoCommand;
|
||||
import com.cloud.agent.api.AttachVolumeCommand;
|
||||
import com.cloud.agent.api.CheckHealthCommand;
|
||||
import com.cloud.agent.api.CheckNetworkCommand;
|
||||
import com.cloud.agent.api.CheckVirtualMachineCommand;
|
||||
import com.cloud.agent.api.CleanupNetworkRulesCmd;
|
||||
import com.cloud.agent.api.Command;
|
||||
|
|
@ -38,8 +39,10 @@ import com.cloud.agent.api.MaintainCommand;
|
|||
import com.cloud.agent.api.MigrateCommand;
|
||||
import com.cloud.agent.api.ModifySshKeysCommand;
|
||||
import com.cloud.agent.api.ModifyStoragePoolCommand;
|
||||
import com.cloud.agent.api.NetworkRulesSystemVmCommand;
|
||||
import com.cloud.agent.api.NetworkRulesVmSecondaryIpCommand;
|
||||
import com.cloud.agent.api.OvsDestroyBridgeCommand;
|
||||
import com.cloud.agent.api.OvsDestroyTunnelCommand;
|
||||
import com.cloud.agent.api.OvsFetchInterfaceCommand;
|
||||
import com.cloud.agent.api.OvsSetupBridgeCommand;
|
||||
import com.cloud.agent.api.OvsVpcPhysicalTopologyConfigCommand;
|
||||
|
|
@ -51,6 +54,7 @@ import com.cloud.agent.api.RebootCommand;
|
|||
import com.cloud.agent.api.RebootRouterCommand;
|
||||
import com.cloud.agent.api.StopCommand;
|
||||
import com.cloud.agent.api.UpgradeSnapshotCommand;
|
||||
import com.cloud.agent.api.check.CheckSshCommand;
|
||||
import com.cloud.agent.api.proxy.CheckConsoleProxyLoadCommand;
|
||||
import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand;
|
||||
import com.cloud.agent.api.storage.CreateCommand;
|
||||
|
|
@ -112,6 +116,10 @@ public class LibvirtRequestWrapper extends RequestWrapper {
|
|||
linbvirtCommands.put(ModifyStoragePoolCommand.class, new LibvirtModifyStoragePoolCommandWrapper());
|
||||
linbvirtCommands.put(CleanupNetworkRulesCmd.class, new LibvirtCleanupNetworkRulesCommandWrapper());
|
||||
linbvirtCommands.put(NetworkRulesVmSecondaryIpCommand.class, new LibvirtNetworkRulesVmSecondaryIpCommandWrapper());
|
||||
linbvirtCommands.put(NetworkRulesSystemVmCommand.class, new LibvirtNetworkRulesSystemVmCommandWrapper());
|
||||
linbvirtCommands.put(CheckSshCommand.class, new LibvirtCheckSshCommandWrapper());
|
||||
linbvirtCommands.put(CheckNetworkCommand.class, new LibvirtCheckNetworkCommandWrapper());
|
||||
linbvirtCommands.put(OvsDestroyTunnelCommand.class, new LibvirtOvsDestroyTunnelCommandWrapper());
|
||||
|
||||
resources.put(LibvirtComputingResource.class, linbvirtCommands);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,6 +67,7 @@ import com.cloud.agent.api.Answer;
|
|||
import com.cloud.agent.api.AttachIsoCommand;
|
||||
import com.cloud.agent.api.AttachVolumeCommand;
|
||||
import com.cloud.agent.api.CheckHealthCommand;
|
||||
import com.cloud.agent.api.CheckNetworkCommand;
|
||||
import com.cloud.agent.api.CheckVirtualMachineCommand;
|
||||
import com.cloud.agent.api.CleanupNetworkRulesCmd;
|
||||
import com.cloud.agent.api.CreateStoragePoolCommand;
|
||||
|
|
@ -80,8 +81,10 @@ import com.cloud.agent.api.MaintainCommand;
|
|||
import com.cloud.agent.api.MigrateCommand;
|
||||
import com.cloud.agent.api.ModifySshKeysCommand;
|
||||
import com.cloud.agent.api.ModifyStoragePoolCommand;
|
||||
import com.cloud.agent.api.NetworkRulesSystemVmCommand;
|
||||
import com.cloud.agent.api.NetworkRulesVmSecondaryIpCommand;
|
||||
import com.cloud.agent.api.OvsDestroyBridgeCommand;
|
||||
import com.cloud.agent.api.OvsDestroyTunnelCommand;
|
||||
import com.cloud.agent.api.OvsFetchInterfaceCommand;
|
||||
import com.cloud.agent.api.OvsSetupBridgeCommand;
|
||||
import com.cloud.agent.api.OvsVpcPhysicalTopologyConfigCommand;
|
||||
|
|
@ -98,6 +101,7 @@ import com.cloud.agent.api.RebootRouterCommand;
|
|||
import com.cloud.agent.api.StopCommand;
|
||||
import com.cloud.agent.api.UpgradeSnapshotCommand;
|
||||
import com.cloud.agent.api.VmStatsEntry;
|
||||
import com.cloud.agent.api.check.CheckSshCommand;
|
||||
import com.cloud.agent.api.proxy.CheckConsoleProxyLoadCommand;
|
||||
import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand;
|
||||
import com.cloud.agent.api.storage.CreateCommand;
|
||||
|
|
@ -119,6 +123,7 @@ import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk;
|
|||
import com.cloud.hypervisor.kvm.storage.KVMStoragePool;
|
||||
import com.cloud.hypervisor.kvm.storage.KVMStoragePoolManager;
|
||||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.network.PhysicalNetworkSetupInfo;
|
||||
import com.cloud.storage.Storage.ImageFormat;
|
||||
import com.cloud.storage.Storage.StoragePoolType;
|
||||
import com.cloud.storage.StoragePool;
|
||||
|
|
@ -129,6 +134,7 @@ import com.cloud.utils.exception.CloudRuntimeException;
|
|||
import com.cloud.vm.DiskProfile;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
import com.cloud.vm.VirtualMachine.PowerState;
|
||||
import com.cloud.vm.VirtualMachine.Type;
|
||||
|
||||
@RunWith(PowerMockRunner.class)
|
||||
public class LibvirtComputingResourceTest {
|
||||
|
|
@ -1944,7 +1950,7 @@ public class LibvirtComputingResourceTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testOvsSetupBridgeCommandFailure() {
|
||||
public void testOvsSetupBridgeCommandFailure1() {
|
||||
final String name = "Test";
|
||||
final Long hostId = 1l;
|
||||
final Long networkId = 1l;
|
||||
|
|
@ -1967,6 +1973,30 @@ public class LibvirtComputingResourceTest {
|
|||
command.getBridgeName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOvsSetupBridgeCommandFailure2() {
|
||||
final String name = "Test";
|
||||
final Long hostId = 1l;
|
||||
final Long networkId = 1l;
|
||||
|
||||
final OvsSetupBridgeCommand command = new OvsSetupBridgeCommand(name, hostId, networkId);
|
||||
|
||||
when(libvirtComputingResource.findOrCreateTunnelNetwork(command.getBridgeName())).thenReturn(false);
|
||||
when(libvirtComputingResource.configureTunnelNetwork(command.getNetworkId(), command.getHostId(),
|
||||
command.getBridgeName())).thenReturn(true);
|
||||
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertFalse(answer.getResult());
|
||||
|
||||
verify(libvirtComputingResource, times(1)).findOrCreateTunnelNetwork(command.getBridgeName());
|
||||
verify(libvirtComputingResource, times(1)).configureTunnelNetwork(command.getNetworkId(), command.getHostId(),
|
||||
command.getBridgeName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOvsDestroyBridgeCommand() {
|
||||
final String name = "Test";
|
||||
|
|
@ -2043,6 +2073,27 @@ public class LibvirtComputingResourceTest {
|
|||
verify(libvirtComputingResource, times(1)).getTimeout();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void testOvsVpcPhysicalTopologyConfigCommandFailure() {
|
||||
final Host[] hosts = null;
|
||||
final Tier[] tiers = null;
|
||||
final Vm[] vms = null;
|
||||
final String cidr = null;
|
||||
|
||||
final OvsVpcPhysicalTopologyConfigCommand command = new OvsVpcPhysicalTopologyConfigCommand(hosts, tiers, vms, cidr);
|
||||
|
||||
when(libvirtComputingResource.getOvsTunnelPath()).thenThrow(Exception.class);
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertFalse(answer.getResult());
|
||||
|
||||
verify(libvirtComputingResource, times(1)).getOvsTunnelPath();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOvsVpcRoutingPolicyConfigCommand() {
|
||||
final String id = null;
|
||||
|
|
@ -2066,6 +2117,27 @@ public class LibvirtComputingResourceTest {
|
|||
verify(libvirtComputingResource, times(1)).getTimeout();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void testOvsVpcRoutingPolicyConfigCommandFailure() {
|
||||
final String id = null;
|
||||
final String cidr = null;
|
||||
final Acl[] acls = null;
|
||||
final com.cloud.agent.api.OvsVpcRoutingPolicyConfigCommand.Tier[] tiers = null;
|
||||
|
||||
final OvsVpcRoutingPolicyConfigCommand command = new OvsVpcRoutingPolicyConfigCommand(id, cidr, acls, tiers);
|
||||
|
||||
when(libvirtComputingResource.getOvsTunnelPath()).thenThrow(Exception.class);
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertFalse(answer.getResult());
|
||||
|
||||
verify(libvirtComputingResource, times(1)).getOvsTunnelPath();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateStoragePoolCommand() {
|
||||
final StoragePool pool = Mockito.mock(StoragePool.class);
|
||||
|
|
@ -2207,4 +2279,267 @@ public class LibvirtComputingResourceTest {
|
|||
}
|
||||
verify(libvirtComputingResource, times(1)).getLibvirtConnectionWrapper();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNetworkRulesSystemVmCommand() {
|
||||
final String vmName = "Test";
|
||||
final Type type = Type.SecondaryStorageVm;
|
||||
|
||||
final NetworkRulesSystemVmCommand command = new NetworkRulesSystemVmCommand(vmName, type);
|
||||
|
||||
final LibvirtConnectionWrapper libvirtConnectionWrapper = Mockito.mock(LibvirtConnectionWrapper.class);
|
||||
final Connect conn = Mockito.mock(Connect.class);
|
||||
|
||||
when(libvirtComputingResource.getLibvirtConnectionWrapper()).thenReturn(libvirtConnectionWrapper);
|
||||
try {
|
||||
when(libvirtConnectionWrapper.getConnectionByVmName(command.getVmName())).thenReturn(conn);
|
||||
} catch (final LibvirtException e) {
|
||||
fail(e.getMessage());
|
||||
}
|
||||
when(libvirtComputingResource.configureDefaultNetworkRulesForSystemVm(conn, command.getVmName())).thenReturn(true);
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertTrue(answer.getResult());
|
||||
|
||||
try {
|
||||
verify(libvirtConnectionWrapper, times(1)).getConnectionByVmName(command.getVmName());
|
||||
} catch (final LibvirtException e) {
|
||||
fail(e.getMessage());
|
||||
}
|
||||
verify(libvirtComputingResource, times(1)).getLibvirtConnectionWrapper();
|
||||
verify(libvirtComputingResource, times(1)).configureDefaultNetworkRulesForSystemVm(conn, command.getVmName());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void testNetworkRulesSystemVmCommandFailure() {
|
||||
final String vmName = "Test";
|
||||
final Type type = Type.SecondaryStorageVm;
|
||||
|
||||
final NetworkRulesSystemVmCommand command = new NetworkRulesSystemVmCommand(vmName, type);
|
||||
|
||||
final LibvirtConnectionWrapper libvirtConnectionWrapper = Mockito.mock(LibvirtConnectionWrapper.class);
|
||||
|
||||
when(libvirtComputingResource.getLibvirtConnectionWrapper()).thenReturn(libvirtConnectionWrapper);
|
||||
try {
|
||||
when(libvirtConnectionWrapper.getConnectionByVmName(command.getVmName())).thenThrow(LibvirtException.class);
|
||||
} catch (final LibvirtException e) {
|
||||
fail(e.getMessage());
|
||||
}
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertFalse(answer.getResult());
|
||||
|
||||
try {
|
||||
verify(libvirtConnectionWrapper, times(1)).getConnectionByVmName(command.getVmName());
|
||||
} catch (final LibvirtException e) {
|
||||
fail(e.getMessage());
|
||||
}
|
||||
verify(libvirtComputingResource, times(1)).getLibvirtConnectionWrapper();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCheckSshCommand() {
|
||||
final String instanceName = "Test";
|
||||
final String ip = "172.16.16.16";
|
||||
final int port = 22;
|
||||
|
||||
final CheckSshCommand command = new CheckSshCommand(instanceName, ip, port);
|
||||
|
||||
final VirtualRoutingResource virtRouterResource = Mockito.mock(VirtualRoutingResource.class);
|
||||
|
||||
final String privateIp = command.getIp();
|
||||
final int cmdPort = command.getPort();
|
||||
|
||||
when(libvirtComputingResource.getVirtRouterResource()).thenReturn(virtRouterResource);
|
||||
when(virtRouterResource.connect(privateIp, cmdPort)).thenReturn(true);
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertTrue(answer.getResult());
|
||||
|
||||
verify(libvirtComputingResource, times(1)).getVirtRouterResource();
|
||||
verify(virtRouterResource, times(1)).connect(privateIp, cmdPort);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCheckSshCommandFailure() {
|
||||
final String instanceName = "Test";
|
||||
final String ip = "172.16.16.16";
|
||||
final int port = 22;
|
||||
|
||||
final CheckSshCommand command = new CheckSshCommand(instanceName, ip, port);
|
||||
|
||||
final VirtualRoutingResource virtRouterResource = Mockito.mock(VirtualRoutingResource.class);
|
||||
|
||||
final String privateIp = command.getIp();
|
||||
final int cmdPort = command.getPort();
|
||||
|
||||
when(libvirtComputingResource.getVirtRouterResource()).thenReturn(virtRouterResource);
|
||||
when(virtRouterResource.connect(privateIp, cmdPort)).thenReturn(false);
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertFalse(answer.getResult());
|
||||
|
||||
verify(libvirtComputingResource, times(1)).getVirtRouterResource();
|
||||
verify(virtRouterResource, times(1)).connect(privateIp, cmdPort);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCheckNetworkCommand() {
|
||||
final List<PhysicalNetworkSetupInfo> networkInfoList = new ArrayList<PhysicalNetworkSetupInfo>();
|
||||
|
||||
final PhysicalNetworkSetupInfo nic = Mockito.mock(PhysicalNetworkSetupInfo.class);
|
||||
networkInfoList.add(nic);
|
||||
|
||||
final CheckNetworkCommand command = new CheckNetworkCommand(networkInfoList);
|
||||
|
||||
when(libvirtComputingResource.checkNetwork(nic.getGuestNetworkName())).thenReturn(true);
|
||||
when(libvirtComputingResource.checkNetwork(nic.getPrivateNetworkName())).thenReturn(true);
|
||||
when(libvirtComputingResource.checkNetwork(nic.getPublicNetworkName())).thenReturn(true);
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertTrue(answer.getResult());
|
||||
|
||||
verify(libvirtComputingResource, times(3)).checkNetwork(nic.getGuestNetworkName());
|
||||
verify(libvirtComputingResource, times(3)).checkNetwork(nic.getPrivateNetworkName());
|
||||
verify(libvirtComputingResource, times(3)).checkNetwork(nic.getPublicNetworkName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCheckNetworkCommandFail1() {
|
||||
final List<PhysicalNetworkSetupInfo> networkInfoList = new ArrayList<PhysicalNetworkSetupInfo>();
|
||||
|
||||
final PhysicalNetworkSetupInfo networkSetupInfo = Mockito.mock(PhysicalNetworkSetupInfo.class);
|
||||
networkInfoList.add(networkSetupInfo);
|
||||
|
||||
final CheckNetworkCommand command = new CheckNetworkCommand(networkInfoList);
|
||||
|
||||
when(libvirtComputingResource.checkNetwork(networkSetupInfo.getGuestNetworkName())).thenReturn(false);
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertFalse(answer.getResult());
|
||||
|
||||
verify(libvirtComputingResource, times(1)).checkNetwork(networkSetupInfo.getGuestNetworkName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCheckNetworkCommandFail2() {
|
||||
final List<PhysicalNetworkSetupInfo> networkInfoList = new ArrayList<PhysicalNetworkSetupInfo>();
|
||||
|
||||
final PhysicalNetworkSetupInfo networkSetupInfo = Mockito.mock(PhysicalNetworkSetupInfo.class);
|
||||
networkInfoList.add(networkSetupInfo);
|
||||
|
||||
final CheckNetworkCommand command = new CheckNetworkCommand(networkInfoList);
|
||||
|
||||
when(libvirtComputingResource.checkNetwork(networkSetupInfo.getGuestNetworkName())).thenReturn(true);
|
||||
when(libvirtComputingResource.checkNetwork(networkSetupInfo.getPrivateNetworkName())).thenReturn(false);
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertFalse(answer.getResult());
|
||||
|
||||
verify(libvirtComputingResource, times(1)).checkNetwork(networkSetupInfo.getGuestNetworkName());
|
||||
verify(libvirtComputingResource, times(1)).checkNetwork(networkSetupInfo.getPrivateNetworkName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCheckNetworkCommandFail3() {
|
||||
final List<PhysicalNetworkSetupInfo> networkInfoList = new ArrayList<PhysicalNetworkSetupInfo>();
|
||||
|
||||
final PhysicalNetworkSetupInfo networkSetupInfo = Mockito.mock(PhysicalNetworkSetupInfo.class);
|
||||
networkInfoList.add(networkSetupInfo);
|
||||
|
||||
final CheckNetworkCommand command = new CheckNetworkCommand(networkInfoList);
|
||||
|
||||
when(libvirtComputingResource.checkNetwork(networkSetupInfo.getGuestNetworkName())).thenReturn(true);
|
||||
when(libvirtComputingResource.checkNetwork(networkSetupInfo.getPrivateNetworkName())).thenReturn(true);
|
||||
when(libvirtComputingResource.checkNetwork(networkSetupInfo.getPublicNetworkName())).thenReturn(false);
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertFalse(answer.getResult());
|
||||
|
||||
verify(libvirtComputingResource, times(1)).checkNetwork(networkSetupInfo.getGuestNetworkName());
|
||||
verify(libvirtComputingResource, times(1)).checkNetwork(networkSetupInfo.getPrivateNetworkName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOvsDestroyTunnelCommand() {
|
||||
final String networkName = "Test";
|
||||
final Long networkId = 1l;
|
||||
final String inPortName = "eth";
|
||||
|
||||
final OvsDestroyTunnelCommand command = new OvsDestroyTunnelCommand(networkId, networkName, inPortName);
|
||||
|
||||
when(libvirtComputingResource.findOrCreateTunnelNetwork(command.getBridgeName())).thenReturn(true);
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertFalse(answer.getResult());
|
||||
|
||||
verify(libvirtComputingResource, times(1)).findOrCreateTunnelNetwork(command.getBridgeName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOvsDestroyTunnelCommandFailure1() {
|
||||
final String networkName = "Test";
|
||||
final Long networkId = 1l;
|
||||
final String inPortName = "eth";
|
||||
|
||||
final OvsDestroyTunnelCommand command = new OvsDestroyTunnelCommand(networkId, networkName, inPortName);
|
||||
|
||||
when(libvirtComputingResource.findOrCreateTunnelNetwork(command.getBridgeName())).thenReturn(false);
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertFalse(answer.getResult());
|
||||
|
||||
verify(libvirtComputingResource, times(1)).findOrCreateTunnelNetwork(command.getBridgeName());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void testOvsDestroyTunnelCommandFailure2() {
|
||||
final String networkName = "Test";
|
||||
final Long networkId = 1l;
|
||||
final String inPortName = "eth";
|
||||
|
||||
final OvsDestroyTunnelCommand command = new OvsDestroyTunnelCommand(networkId, networkName, inPortName);
|
||||
|
||||
when(libvirtComputingResource.findOrCreateTunnelNetwork(command.getBridgeName())).thenThrow(Exception.class);
|
||||
|
||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||
assertNotNull(wrapper);
|
||||
|
||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||
assertFalse(answer.getResult());
|
||||
|
||||
verify(libvirtComputingResource, times(1)).findOrCreateTunnelNetwork(command.getBridgeName());
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue