// 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.ovm3.resources.helpers; import static org.junit.Assert.assertNull; import javax.naming.ConfigurationException; import org.junit.Test; import com.cloud.agent.api.Answer; import com.cloud.agent.api.CheckHealthCommand; import com.cloud.agent.api.CheckVirtualMachineCommand; import com.cloud.agent.api.FenceCommand; import com.cloud.agent.api.GetHostStatsCommand; import com.cloud.agent.api.GetVncPortCommand; import com.cloud.agent.api.MaintainCommand; import com.cloud.agent.api.StartupRoutingCommand; import com.cloud.hypervisor.ovm3.objects.ConnectionTest; import com.cloud.hypervisor.ovm3.objects.LinuxTest; import com.cloud.hypervisor.ovm3.objects.NetworkTest; import com.cloud.hypervisor.ovm3.objects.Ovm3ResourceException; import com.cloud.hypervisor.ovm3.objects.XmlTestResultTest; import com.cloud.hypervisor.ovm3.objects.XenTest; import com.cloud.hypervisor.ovm3.resources.Ovm3HypervisorResource; import com.cloud.hypervisor.ovm3.resources.Ovm3StorageProcessor; import com.cloud.hypervisor.ovm3.resources.Ovm3VirtualRoutingResource; import com.cloud.hypervisor.ovm3.support.Ovm3SupportTest; import com.cloud.vm.VirtualMachine.State; public class Ovm3HypervisorSupportTest { ConnectionTest con = new ConnectionTest(); XmlTestResultTest results = new XmlTestResultTest(); Ovm3ConfigurationTest configTest = new Ovm3ConfigurationTest(); Ovm3HypervisorResource hypervisor = new Ovm3HypervisorResource(); Ovm3VirtualRoutingResource virtualrouting = new Ovm3VirtualRoutingResource(); Ovm3SupportTest support = new Ovm3SupportTest(); Ovm3StorageProcessor storage; Ovm3StoragePool pool; XenTest xen = new XenTest(); String vmName = xen.getVmName(); String unknown = "------"; String running = "r-----"; String blocked = "-b----"; String paused = "--p---"; String shutdown = "---s--"; String crashed = "----c-"; String dying = "-----d"; /* we only want this for the xml results */ String dom0stats = results.simpleResponseWrapWrapper("<struct>" + "<member>" + "<name>rx</name>" + "<value><string>25069761</string></value>" + "</member>" + "<member>" + "<name>total</name>" + "<value><string>4293918720</string></value>" + "</member>" + "<member>" + "<name>tx</name>" + "<value><string>37932556</string></value>" + "</member>" + "<member>" + "<name>cpu</name>" + "<value><string>2.4</string></value>" + "</member>" + "<member>" + "<name>free</name>" + "<value><string>1177550848</string></value>" + "</member>" + "</struct>"); private ConnectionTest prepare() throws ConfigurationException { Ovm3Configuration config = new Ovm3Configuration(configTest.getParams()); con = support.prepConnectionResults(); pool = new Ovm3StoragePool(con, config); storage = new Ovm3StorageProcessor(con, config, pool); hypervisor.setConnection(con); results.basicBooleanTest(hypervisor.configure(config.getAgentName(), configTest.getParams())); virtualrouting.setConnection(con); return con; } @Test public void ReportedVmStatesTest() throws ConfigurationException, Ovm3ResourceException { Ovm3Configuration config = new Ovm3Configuration(configTest.getParams()); con.setResult(xen.getMultipleVmsListXML()); Ovm3HypervisorSupport hypervisor = new Ovm3HypervisorSupport(con, config); hypervisor.vmStateMapClear(); State vmState = hypervisor.getVmState(vmName); results.basicStringTest(vmState.toString(), State.Running.toString()); hypervisor.setVmStateStarting(vmName); results.basicStringTest(hypervisor.getVmState(vmName).toString(), State.Starting.toString()); hypervisor.setVmState(vmName, State.Running); results.basicStringTest(hypervisor.getVmState(vmName).toString(), State.Running.toString()); hypervisor.revmoveVmState(vmName); assertNull(hypervisor.getVmState(vmName)); } @Test public void HypervisorVmStateTest() throws ConfigurationException, Ovm3ResourceException { Ovm3Configuration config = new Ovm3Configuration(configTest.getParams()); Ovm3HypervisorSupport hypervisor = new Ovm3HypervisorSupport(con, config); setHypervisorVmState(hypervisor, blocked, unknown, State.Unknown); setHypervisorVmState(hypervisor, blocked, running, State.Running); setHypervisorVmState(hypervisor, blocked, blocked, State.Running); setHypervisorVmState(hypervisor, blocked, paused, State.Running); /* TODO: ehm wtf ? */ setHypervisorVmState(hypervisor, blocked, shutdown, State.Running); setHypervisorVmState(hypervisor, blocked, crashed, State.Error); setHypervisorVmState(hypervisor, blocked, dying, State.Stopping); } @Test public void CombinedVmStateTest() throws ConfigurationException, Ovm3ResourceException { Ovm3Configuration config = new Ovm3Configuration(configTest.getParams()); con.setResult(xen.getMultipleVmsListXML()); Ovm3HypervisorSupport hypervisor = new Ovm3HypervisorSupport(con, config); hypervisor.vmStateMapClear(); /* test starting */ hypervisor.setVmState(vmName, State.Starting); // System.out.println(hypervisor.getVmState(vmName)); hypervisor.syncState(); // System.out.println(hypervisor.getVmState(vmName)); // setHypervisorVmState(hypervisor, blocked, paused, State.Stopped); hypervisor.setVmState(vmName, State.Stopping); hypervisor.setVmState(vmName, State.Migrating); // setHypervisorVmState(hypervisor, blocked, running, State.Running); hypervisor.setVmState(vmName, State.Stopped); // setHypervisorVmState(hypervisor, blocked, running, State.Migrating); } /** * Sets the state, original, of the fake VM to replace. * * @param hypervisor * @param original * @param replace * @param state * @throws Ovm3ResourceException */ public void setHypervisorVmState(Ovm3HypervisorSupport hypervisor, String original, String replace, State state) throws Ovm3ResourceException { String x = xen.getMultipleVmsListXML().replaceAll(original, replace); con.setResult(x); hypervisor.syncState(); results.basicStringTest(hypervisor.getVmState(vmName).toString(), state.toString()); } @Test public void getSystemVMKeyFileTest() throws ConfigurationException { Ovm3Configuration config = new Ovm3Configuration(configTest.getParams()); Ovm3HypervisorSupport hypervisor = new Ovm3HypervisorSupport(con, config); hypervisor.getSystemVMKeyFile(config.getAgentSshKeyFileName()); } @Test public void getSystemVMKeyFileMissingTest() throws ConfigurationException { Ovm3Configuration config = new Ovm3Configuration(configTest.getParams()); Ovm3HypervisorSupport hypervisor = new Ovm3HypervisorSupport(con, config); hypervisor.getSystemVMKeyFile("missing"); } @Test public void checkHealthTest() throws ConfigurationException { con = prepare(); CheckHealthCommand cmd = new CheckHealthCommand(); Answer ra = hypervisor.executeRequest(cmd); results.basicBooleanTest(ra.getResult()); } @Test public void masterCheckTest() throws ConfigurationException { con = prepare(); // System.out.println(hypervisor.masterCheck()); } @Test public void GetHostStatsCommandTest() throws ConfigurationException { con = prepare(); Ovm3Configuration config = new Ovm3Configuration(configTest.getParams()); GetHostStatsCommand cmd = new GetHostStatsCommand(config.getCsHostGuid(), config.getAgentName(), 1L); con.setResult(this.dom0stats); Answer ra = hypervisor.executeRequest(cmd); results.basicBooleanTest(ra.getResult()); } @Test public void GetHostStatsCommandFailTest() throws ConfigurationException { con = prepare(); Ovm3Configuration config = new Ovm3Configuration(configTest.getParams()); GetHostStatsCommand cmd = new GetHostStatsCommand(config.getCsHostGuid(), config.getAgentName(), 1L); con.setNull(); Answer ra = hypervisor.executeRequest(cmd); results.basicBooleanTest(ra.getResult(), false); } @Test public void CheckVirtualMachineCommandTest() throws ConfigurationException { con = prepare(); CheckVirtualMachineCommand cmd = new CheckVirtualMachineCommand(xen.getVmName()); Answer ra = hypervisor.executeRequest(cmd); results.basicBooleanTest(ra.getResult()); } @Test public void MaintainCommandTest() throws ConfigurationException { con = prepare(); MaintainCommand cmd = new MaintainCommand(); Answer ra = hypervisor.executeRequest(cmd); results.basicBooleanTest(ra.getResult()); } @Test public void GetVncPortCommandTest() throws ConfigurationException { con = prepare(); GetVncPortCommand cmd = new GetVncPortCommand(0, xen.getVmName()); Answer ra = hypervisor.executeRequest(cmd); results.basicBooleanTest(ra.getResult()); } /* We can't fence yet... */ @Test public void FenceCommandTest() throws ConfigurationException { con = prepare(); FenceCommand cmd = new FenceCommand(); Answer ra = hypervisor.executeRequest(cmd); results.basicBooleanTest(ra.getResult(), false); } @Test public void fillHostinfoTest() throws ConfigurationException { Ovm3Configuration config = new Ovm3Configuration(configTest.getParams()); ConnectionTest con = new ConnectionTest(); con.setIp(config.getAgentIp()); Ovm3HypervisorSupport hypervisor = new Ovm3HypervisorSupport(con, config); LinuxTest linuxTest = new LinuxTest(); NetworkTest networkTest = new NetworkTest(); StartupRoutingCommand srCmd = new StartupRoutingCommand(); con.setResult(results.simpleResponseWrapWrapper(linuxTest .getDiscoverHw())); con.addResult(results.simpleResponseWrapWrapper(linuxTest .getDiscoverserver())); con.addResult(results.simpleResponseWrapWrapper(networkTest .getDiscoverNetwork())); hypervisor.fillHostInfo(srCmd); } /* @Test(expected = CloudRuntimeException.class) public void setupServerTest() throws ConfigurationException, IOException { Ovm3Configuration config = new Ovm3Configuration(configTest.getParams()); ConnectionTest con = new ConnectionTest(); con.setIp("127.0.0.1"); Ovm3HypervisorSupport hypervisor = new Ovm3HypervisorSupport(con, config); hypervisor.setupServer(config.getAgentSshKeyFileName()); } */ }