// 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.objects; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.Map; import org.junit.Test; import com.cloud.hypervisor.ovm3.objects.CloudstackPlugin.ReturnCode; public class CloudStackPluginTest { private static final String VMNAME = "test"; String domrIp = "169.254.3.2"; public String getDomrIp() { return domrIp; } public String getDom0Ip() { return dom0Ip; } public Integer getDomrPort() { return domrPort; } String dom0Ip = "192.168.1.64"; Integer domrPort = 3922; String host = "ovm-1"; String path = "/tmp"; String dirpath = "/tmp/testing"; String filename = "test.txt"; String content = "This is some content"; String bridge = "xenbr0"; String vncPort = "5900"; Integer port = 8899; Integer retries = 1; Integer interval = 1; Integer timeout = 120; ConnectionTest con = new ConnectionTest(); CloudstackPlugin cSp = new CloudstackPlugin(con); XmlTestResultTest results = new XmlTestResultTest(); String domrExecXml = "<?xml version='1.0'?>" + "<methodResponse>" + "<params>" + "<param>" + "<value><struct>" + "<member>" + "<name>out</name>" + "<value><string>clearUsageRules.sh func.sh hv-kvp-daemon_3.1_amd64.deb monitorServices.py reconfigLB.sh redundant_router</string></value>" + "</member>" + "<member>" + "<name>err</name>" + "<value><string></string></value>" + "</member>" + "<member>" + "<name>rc</name>" + "<value><i8>0</i8></value>" + "</member>" + "</struct></value>" + "</param>" + "</params>" + "</methodResponse>"; String dom0StatsXml = "<?xml version='1.0'?>\n" + "<methodResponse>\n" + "<params>\n" + "<param>\n" + "<value><struct>\n" + "<member>\n" + "<name>rx</name>\n" + "<value><string>11631523\n" + "</string></value>\n" + "</member>\n" + "<member>\n" + "<name>total</name>\n" + "<value><string>4293918720</string></value>\n" + "</member>\n" + "<member>\n" + "<name>tx</name>\n" + "<value><string>16927399\n" + "</string></value>\n" + "</member>\n" + "<member>\n" + "<name>cpu</name>\n" + "<value><string>1.5</string></value>\n" + "</member>\n" + "<member>\n" + "<name>free</name>\n" + "<value><string>3162505216</string></value>\n" + "</member>\n" + "</struct></value>\n" + "</param>\n" + "</params>\n" + "</methodResponse>"; String domuStatsXml = "<?xml version='1.0'?>" + "<methodResponse>" + "<params>" + "<param>" + "<value><struct>" + "<member>" + "<name>uptime</name>" + "<value><string>862195495455</string></value>" + "</member>" + "<member>" + "<name>rx_bytes</name>" + "<value><string>52654010</string></value>" + "</member>" + "<member>" + "<name>wr_ops</name>" + "<value><string>521674</string></value>" + "</member>" + "<member>" + "<name>vcpus</name>" + "<value><string>1</string></value>" + "</member>" + "<member>" + "<name>cputime</name>" + "<value><string>295303661496</string></value>" + "</member>" + "<member>" + "<name>rd_ops</name>" + "<value><string>14790</string></value>" + "</member>" + "<member>" + "<name>rd_bytes</name>" + "<value><string>250168320</string></value>" + "</member>" + "<member>" + "<name>tx_bytes</name>" + "<value><string>161389183</string></value>" + "</member>" + "<member>" + "<name>wr_bytes</name>" + "<value><string>1604468736</string></value>" + "</member>" + "</struct></value>" + "</param>" + "</params>" + "</methodResponse>"; private String dom0StorageCheckXml = "<?xml version='1.0'?>" + "<methodResponse>" + "<params>" + "<param>" + "<value><array><data>" + "<value><boolean>1</boolean></value>" + "<value><boolean>0</boolean></value>" + "</data></array></value>" + "</param>" + "</params>" + "</methodResponse>"; public String getDom0StorageCheckXml() { return dom0StorageCheckXml; } public String getDomrExecXml() { return domrExecXml; } public String getDom0StatsXml() { return dom0StatsXml; } public String getDomuStatsXml() { return domuStatsXml; } @Test public void testDom0CheckStorageHealthCheck() throws Ovm3ResourceException { con.setResult(dom0StorageCheckXml); results.basicBooleanTest(cSp.dom0CheckStorageHealthCheck("", "", "", 120, 1)); results.basicBooleanTest(cSp.dom0CheckStorageHealthCheck(), false); } @Test public void testOvsUploadFile() throws Ovm3ResourceException { con.setResult(results.getBoolean(true)); results.basicBooleanTest(cSp.ovsUploadFile(path, filename, content)); } @Test public void testOvsUploadSshKey() throws Ovm3ResourceException { con.setResult(results.getBoolean(true)); results.basicBooleanTest(cSp.ovsUploadSshKey(path, content)); } @Test public void testOvsDomrUploadFile() throws Ovm3ResourceException { con.setResult(results.getBoolean(true)); results.basicBooleanTest(cSp.ovsDomrUploadFile(VMNAME, path, filename, content)); } @Test public void testGetVncPort() throws Ovm3ResourceException { con.setResult(results.getString(vncPort)); results.basicStringTest(cSp.getVncPort(VMNAME), vncPort); } @Test public void testDom0CheckPort() throws Ovm3ResourceException { con.setResult(results.getBoolean(true)); results.basicBooleanTest(cSp.dom0CheckPort(host, port, retries, interval)); /* test nothing */ con.setNull(); results.basicBooleanTest( cSp.dom0CheckPort(host, port, retries, interval), false); /* for the last test we need to fake the timeout... */ } @Test public void testDom0Ip() throws Ovm3ResourceException { con.setResult(results.getBoolean(true)); results.basicBooleanTest(cSp.dom0HasIp(dom0Ip)); con.setResult(results.getBoolean(false)); results.basicBooleanTest(cSp.dom0HasIp(dom0Ip), false); } @Test public void testDomrExec() throws Ovm3ResourceException { con.setResult(domrExecXml); ReturnCode x = cSp.domrExec(domrIp, "ls"); assertNotNull(x); assertEquals(x.getExit(), (Integer) 0); assertEquals(x.getRc(), true); assertEquals(x.getExit(), (Integer) 0); assertNotNull(x.getStdOut()); /* failed */ domrExecXml = domrExecXml.replace("<i8>0</i8>", "<i8>1</i8>"); domrExecXml = domrExecXml.replace("<value><string></string></value>", "<value><string>Something went wrong!</string></value>"); con.setResult(domrExecXml); ReturnCode y = cSp.domrExec(domrIp, "ls"); assertNotNull(y); assertEquals(y.getRc(), false); assertEquals(y.getExit(), (Integer) 1); assertNotNull(x.getStdErr()); } @Test public void testOvsDom0Stats() throws Ovm3ResourceException { con.setResult(dom0StatsXml); Map<String, String> stats = cSp.ovsDom0Stats(bridge); results.basicStringTest(stats.get("cpu"), "1.5"); } @Test public void TestOvsDomUStats() throws Ovm3ResourceException { con.setResult(domuStatsXml); Map<String, String> stats = cSp.ovsDomUStats(VMNAME); results.basicStringTest(stats.get("cputime"), "295303661496"); } @Test public void TestDomrCheckPort() throws Ovm3ResourceException { con.setResult(results.getBoolean(true)); results.basicBooleanTest(cSp.domrCheckPort(domrIp, domrPort)); } @Test public void TestDomrCheckSsh() throws Ovm3ResourceException { con.setResult(results.getBoolean(true)); results.basicBooleanTest(cSp.domrCheckSsh(domrIp)); } @Test public void TestOvsControlInterface() throws Ovm3ResourceException { con.setResult(results.getBoolean(true)); results.basicBooleanTest(cSp.ovsControlInterface("control0", "169.254.0.1/16")); } @Test public void TestPing() throws Ovm3ResourceException { con.setResult(results.getBoolean(true)); results.basicBooleanTest(cSp.ping(host)); } @Test public void TestOvsCheckFile() throws Ovm3ResourceException { con.setResult(results.getBoolean(true)); results.basicBooleanTest(cSp.ovsCheckFile(filename)); } @Test public void dom0CheckStorageHealth() throws Ovm3ResourceException { con.setResult(results.getBoolean(true)); results.basicBooleanTest(cSp.dom0CheckStorageHealth("", "", "", 120)); con.setResult(results.getBoolean(false)); results.basicBooleanTest(cSp.dom0CheckStorageHealth("", "", "", 120), false); } @Test public void TestovsMkdirs() throws Ovm3ResourceException { con.setResult(results.getNil()); results.basicBooleanTest(cSp.ovsMkdirs(dirpath)); } @Test public void TestovsMkdirsDirExists() throws Ovm3ResourceException { con.setResult(results.getBoolean(true)); results.basicBooleanTest(cSp.ovsMkdirs(dirpath), false); } @Test public void TestovsMkdirs2() throws Ovm3ResourceException { con.setResult(results.getNil()); results.basicBooleanTest(cSp.ovsMkdirs(dirpath, 755)); } }