package org.libvirt;
import java.util.UUID;
import junit.framework.TestCase;
public class TestJavaBindings extends TestCase {
int UUIDArray[] = { Integer.decode("0x00"), Integer.decode("0x4b"), Integer.decode("0x96"), Integer.decode("0xe1"), Integer.decode("0x2d"), Integer.decode("0x78"), Integer.decode("0xc3"), Integer.decode("0x0f"), Integer.decode("0x5a"), Integer.decode("0xa5"), Integer.decode("0xf0"), Integer.decode("0x3c"), Integer.decode("0x87"), Integer.decode("0xd2"), Integer.decode("0x1e"), Integer.decode("0x67") };
@Override
protected void setUp() throws Exception {
System.setProperty("jna.library.path", "C:/Tools/dev/libvirt/bin");
System.setProperty("java.library.path", "C:/Tools/dev/libvirt/bin");
}
public void testErrorCallback() throws Exception {
DummyErrorCallback cb = new DummyErrorCallback();
Connect.setErrorCallback(cb);
try {
Connect conn = new Connect("test:///someUrl", false);
} catch (Exception e) {
// eat it
}
assertTrue("We should have caught an error", cb.error);
Connect conn = new Connect("test:///default", false);
conn.setConnectionErrorCallback(cb);
}
public void testConnection() throws Exception {
Connect conn = new Connect("test:///default", false);
assertEquals("conn.getType()", "Test", conn.getType());
assertEquals("conn.getURI()", "test:///default", conn.getURI());
assertEquals("conn.getMaxVcpus(xen)", 32, conn.getMaxVcpus("xen"));
assertNotNull("conn.getHostName()", conn.getHostName());
assertNotNull("conn.getCapabilities()", conn.getCapabilities());
assertTrue("conn.getLibVirVersion()", conn.getLibVirVersion() > 6000);
assertTrue("conn.connectionVersion()", Connect.connectionVersion(conn) > 6000);
assertEquals("conn.getLibVirVersion()", 2, conn.getVersion());
assertTrue("conn.isEncrypted", conn.isEncrypted() == 0);
assertTrue("conn.isSecure", conn.isSecure() == 1);
}
public void testNodeInfo() throws Exception {
Connect conn = new Connect("test:///default", false);
NodeInfo nodeInfo = conn.nodeInfo();
assertEquals("nodeInfo.model", "i686", nodeInfo.model);
assertEquals("nodeInfo.memory", 3145728, nodeInfo.memory);
assertEquals("nodeInfo.cpus", 16, nodeInfo.cpus);
assertEquals("nodeInfo.nodes", 2, nodeInfo.nodes);
assertEquals("nodeInfo.sockets", 2, nodeInfo.sockets);
assertEquals("nodeInfo.cores", 2, nodeInfo.cores);
assertEquals("nodeInfo.threads", 2, nodeInfo.threads);
// These are basically no-exception tests
assertTrue("conn.getCellsFreeMemory", conn.getCellsFreeMemory(0, 10) > 0);
assertTrue("conn.isConnectd", conn.isConnected());
// Test Hypervisor does not support this.
// assertTrue("conn.getFreeMemory", conn.getFreeMemory() > 0);
}
public void testNetworkCreate() throws Exception {
Connect conn = new Connect("test:///default", false);
Network network1 = conn.networkCreateXML("<network>" + " <name>createst</name>" + " <uuid>004b96e1-2d78-c30f-5aa5-f03c87d21e68</uuid>" + " <bridge name='createst'/>" + " <forward dev='eth0'/>" + " <ip address='192.168.66.1' netmask='255.255.255.0'>" + " <dhcp>" + " <range start='192.168.66.128' end='192.168.66.253'/>" + " </dhcp>" + " </ip>" + "</network>");
Network network2 = conn.networkDefineXML("<network>" + " <name>deftest</name>" + " <uuid>004b96e1-2d78-c30f-5aa5-f03c87d21e67</uuid>" + " <bridge name='deftest'/>" + " <forward dev='eth0'/>" + " <ip address='192.168.88.1' netmask='255.255.255.0'>" + " <dhcp>" + " <range start='192.168.88.128' end='192.168.88.253'/>" + " </dhcp>" + " </ip>" + "</network>");
assertEquals("Number of networks", 2, conn.numOfNetworks());
assertEquals("Number of listed networks", 2, conn.listNetworks().length);
assertEquals("Number of defined networks", 1, conn.numOfDefinedNetworks());
assertEquals("Number of listed defined networks", 1, conn.listDefinedNetworks().length);
assertTrue("Network1 should not be persistent", network1.isPersistent() == 0);
assertTrue("Network1 should not be active", network1.isActive() == 1);
assertTrue("Network2 should be active", network2.isActive() == 0);
this.validateNetworkData(network2);
this.validateNetworkData(conn.networkLookupByName("deftest"));
this.validateNetworkData(conn.networkLookupByUUID(UUIDArray));
this.validateNetworkData(conn.networkLookupByUUIDString("004b96e1-2d78-c30f-5aa5-f03c87d21e67"));
this.validateNetworkData(conn.networkLookupByUUID(UUID.fromString("004b96e1-2d78-c30f-5aa5-f03c87d21e67")));
// this should throw an exception
try {
network1.create();
} catch (LibvirtException e) {
// eat it
}
}
public void validateNetworkData(Network network) throws Exception {
assertEquals("network.getName()", "deftest", network.getName());
assertEquals("network.getBridgeName()", "deftest", network.getBridgeName());
assertEquals("network.getUUIDString()", "004b96e1-2d78-c30f-5aa5-f03c87d21e67", network.getUUIDString());
assertFalse("network.getAutostart()", network.getAutostart());
assertNotNull("network.getConnect()", network.getConnect());
assertNotNull("network.getUUID()", network.getUUID());
assertNotNull("network.getXMLDesc()", network.getXMLDesc(0));
// TODO Figure out why this crashes in Eclipse.
// assertNotNull(Connect.connectionForNetwork(network));
// assertTrue(Connect.connectionForNetwork(network) !=
// network.getConnect());
}
public void testDomainCreate() throws Exception {
Connect conn = new Connect("test:///default", false);
Domain dom1 = conn.domainDefineXML("<domain type='test' id='2'>" + " <name>deftest</name>" + " <uuid>004b96e1-2d78-c30f-5aa5-f03c87d21e70</uuid>" + " <memory>8388608</memory>" + " <vcpu>2</vcpu>" + " <os><type arch='i686'>hvm</type></os>" + " <on_reboot>restart</on_reboot>" + " <on_poweroff>destroy</on_poweroff>" + " <on_crash>restart</on_crash>" + "</domain>");
Domain dom2 = conn.domainCreateLinux("<domain type='test' id='3'>" + " <name>createst</name>" + " <uuid>004b96e1-2d78-c30f-5aa5-f03c87d21e67</uuid>" + " <memory>8388608</memory>" + " <vcpu>2</vcpu>" + " <os><type arch='i686'>hvm</type></os>" + " <on_reboot>restart</on_reboot>" + " <on_poweroff>destroy</on_poweroff>" + " <on_crash>restart</on_crash>" + "</domain>", 0);
assertEquals("Number of domains", 2, conn.numOfDomains());
assertEquals("Number of listed domains", 2, conn.listDomains().length);
assertEquals("Number of defined domains", 1, conn.numOfDefinedDomains());
assertEquals("Number of listed defined domains", 1, conn.listDefinedDomains().length);
assertTrue("Domain1 should be persistent", dom1.isPersistent() == 1);
assertTrue("Domain1 should not be active", dom1.isActive() == 0);
assertTrue("Domain2 should be active", dom2.isActive() == 1);
this.validateDomainData(dom2);
this.validateDomainData(conn.domainLookupByName("createst"));
this.validateDomainData(conn.domainLookupByUUID(UUIDArray));
this.validateDomainData(conn.domainLookupByUUIDString("004b96e1-2d78-c30f-5aa5-f03c87d21e67"));
this.validateDomainData(conn.domainLookupByUUID(UUID.fromString("004b96e1-2d78-c30f-5aa5-f03c87d21e67")));
}
public void validateDomainData(Domain dom) throws Exception {
assertEquals("dom.getName()", "createst", dom.getName());
assertEquals("dom.getMaxMemory()", 8388608, dom.getMaxMemory());
// Not supported by the test driver
// assertEquals("dom.getMaxVcpus()", 2, dom2.getMaxVcpus()) ;
assertEquals("dom.getOSType()", "linux", dom.getOSType());
assertEquals("dom.getUUIDString()", "004b96e1-2d78-c30f-5aa5-f03c87d21e67", dom.getUUIDString());
assertFalse("dom.getAutostart()", dom.getAutostart());
assertNotNull("dom.getConnect()", dom.getConnect());
assertNotNull("dom.getUUID()", dom.getUUID());
assertNotNull("dom.getXMLDesc()", dom.getXMLDesc(0));
assertNotNull("dom.getID()", dom.getID());
// Execute the code Iterate over the parameters the easy way
for (SchedParameter c : dom.getSchedulerParameters()) {
System.out.println(c.getTypeAsString() + ":" + c.field + ":" + c.getValueAsString());
}
dom.getSchedulerParameters();
SchedUintParameter[] pars = new SchedUintParameter[1];
pars[0] = new SchedUintParameter();
pars[0].field = "weight";
pars[0].value = 100;
dom.setSchedulerParameters(pars);
dom.getSchedulerParameters();
assertNotNull(Connect.connectionForDomain(dom));
assertTrue(Connect.connectionForDomain(dom) != dom.getConnect());
}
public void testInterfaces() throws Exception {
Connect conn = new Connect("test:///default", false);
assertEquals("numOfInterfaces:", 1, conn.numOfInterfaces());
assertEquals("numOfInterfaces:", 0, conn.numOfDefinedInterfaces());
assertEquals("listDefinedInterfaces:", "eth1", conn.listInterfaces()[0]);
Interface virtInt = conn.interfaceLookupByName("eth1");
assertNotNull(virtInt);
assertEquals("virtInterfaceGetName", "eth1", virtInt.getName());
assertEquals("virtInterfaceGetMACString", "aa:bb:cc:dd:ee:ff", virtInt.getMACString());
assertNotNull("virtInterfaceGetXMLDesc", virtInt.getXMLDescription(0));
assertTrue("virInterfaceIsActive", virtInt.isActive() == 1);
System.out.println(virtInt.getXMLDescription(0));
String newXML = "<interface type='ethernet' name='eth2'>" + "<start mode='onboot'/>" + "<mac address='aa:bb:cc:dd:ee:fa'/>" + "<mtu size='1492'/>" + "<protocol family='ipv4'>" + "<ip address='192.167.0.5' prefix='24'/>" + "<route gateway='192.167.0.1'/>" + "</protocol>" + "</interface>";
Interface virtInt2 = conn.interfaceDefineXML(newXML);
assertNotNull(virtInt2);
assertEquals("virtInterfaceGetName", "eth2", virtInt2.getName());
assertEquals("virtInterfaceGetMACString", "aa:bb:cc:dd:ee:fa", virtInt2.getMACString());
assertNotNull("virtInterfaceGetXMLDesc", virtInt2.getXMLDescription(0));
virtInt2.undefine();
virtInt2.free();
}
public void testAccessAfterClose() throws Exception {
Connect conn = new Connect("test:///default", false);
conn.close();
assertTrue("conn.isConnected should be false", !conn.isConnected());
try {
conn.getHostName();
} catch (LibvirtException e) {
// eat it
}
}
public void testStoragePool() throws Exception {
Connect conn = new Connect("test:///default", false);
StoragePool pool1 = conn.storagePoolDefineXML("<pool type='dir'>" + " <name>pool1</name>" + " <target>" + " <path>/pool1</path>" + " </target>" + " <uuid>004c96e1-2d78-c30f-5aa5-f03c87d21e67</uuid>" + "</pool>", 0);
StoragePool defaultPool = conn.storagePoolLookupByName("default-pool");
assertEquals("numOfStoragePools:", 1, conn.numOfStoragePools());
assertEquals("numOfDefinedStoragePools:", 1, conn.numOfDefinedStoragePools());
assertNotNull("The pool should not be null", pool1);
assertNotNull("The default pool should not be null", defaultPool);
assertEquals("The names should match", defaultPool.getName(), "default-pool");
assertEquals("The uids should match", pool1.getUUIDString(), "004c96e1-2d78-c30f-5aa5-f03c87d21e67");
assertTrue("pool1 should be persistent", pool1.isPersistent() == 1);
assertTrue("pool1 should not be active", pool1.isActive() == 0);
assertTrue("Domain2 should be active", defaultPool.isActive() == 1);
}
}