// 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));
}
}