mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user