summaryrefslogblamecommitdiffstats
path: root/src/test/java/org/openslx/libvirt/capabilities/CapabilitiesTest.java
blob: fd90698d60900b6cc9ffcbf2b0504621fd21058d (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                                             

                                                         





















                                                                
                                                       













































































































































































































































































                                                                                                                              
package org.openslx.libvirt.capabilities;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.fail;

import java.math.BigInteger;
import java.util.List;

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.config.Configurator;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.openslx.libvirt.capabilities.cpu.Cpu;
import org.openslx.libvirt.capabilities.cpu.Feature;
import org.openslx.libvirt.capabilities.cpu.Pages;
import org.openslx.libvirt.capabilities.guest.Domain;
import org.openslx.libvirt.capabilities.guest.Guest;
import org.openslx.libvirt.capabilities.guest.Machine;
import org.openslx.libvirt.domain.Domain.OsType;
import org.openslx.libvirt.domain.Domain.Type;
import org.openslx.libvirt.xml.LibvirtXmlDocumentException;
import org.openslx.libvirt.xml.LibvirtXmlSerializationException;
import org.openslx.libvirt.xml.LibvirtXmlTestResources;
import org.openslx.libvirt.xml.LibvirtXmlValidationException;

public class CapabilitiesTest
{
	@BeforeAll
	public static void setUp()
	{
		// disable logging with log4j
		Configurator.setRootLevel( Level.OFF );
	}

	private Capabilities newCapabilitiesInstance( String xmlFileName )
	{
		Capabilities caps = null;

		try {
			caps = new Capabilities( LibvirtXmlTestResources.getLibvirtXmlFile( xmlFileName ) );
		} catch ( LibvirtXmlDocumentException | LibvirtXmlSerializationException | LibvirtXmlValidationException e ) {
			final String errorMsg = new String(
					"Cannot prepare requested Libvirt capabilities XML file from the resources folder" );
			fail( errorMsg );
		}

		return caps;
	}

	@Test
	@DisplayName( "Get host UUID from libvirt XML capabilities file" )
	public void testGetHostUuid()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_default.xml" );

		assertEquals( "9b2f12af-1fba-444c-b72b-9cbc43fb3ca5", caps.getHostUuid() );
	}

	@Test
	@DisplayName( "Get host CPU from libvirt XML capabilities file" )
	public void testGetHostCpu()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_default.xml" );
		final Cpu hostCpu = caps.getHostCpu();

		assertNotNull( hostCpu );
		assertEquals( "x86_64", hostCpu.getArch() );
		assertEquals( "Skylake-Client-IBRS", hostCpu.getModel() );
		assertEquals( "Intel", hostCpu.getVendor() );
		assertEquals( 1, hostCpu.getTopologySockets() );
		assertEquals( 1, hostCpu.getTopologyDies() );
		assertEquals( 4, hostCpu.getTopologyCores() );
		assertEquals( 1, hostCpu.getTopologyThreads() );
	}

	@Test
	@DisplayName( "Get non-existent host CPU from libvirt XML capabilities file" )
	public void testGetHostCpuNonExistent()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_no-cpu.xml" );
		final Cpu hostCpu = caps.getHostCpu();

		assertNull( hostCpu );
	}

	@Test
	@DisplayName( "Get host CPU features from libvirt XML capabilities file" )
	public void testGetHostCpuFeatures()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_default.xml" );
		final Cpu hostCpu = caps.getHostCpu();

		assertNotNull( hostCpu );

		final List<Feature> hostCpuFeatures = hostCpu.getFeatures();
		assertNotNull( hostCpuFeatures );
		assertEquals( 25, hostCpuFeatures.size() );

		final Feature hostCpuFeature = hostCpuFeatures.get( 9 );
		assertNotNull( hostCpuFeature );
		assertEquals( "vmx", hostCpuFeature.getName() );
	}

	@Test
	@DisplayName( "Get empty host CPU features from libvirt XML capabilities file" )
	public void testGetHostCpuFeaturesEmpty()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_no-cpu-features.xml" );
		final Cpu hostCpu = caps.getHostCpu();

		assertNotNull( hostCpu );

		final List<Feature> hostCpuFeatures = hostCpu.getFeatures();
		assertNotNull( hostCpuFeatures );
		assertEquals( 0, hostCpuFeatures.size() );
	}

	@Test
	@DisplayName( "Get host CPU pages from libvirt XML capabilities file" )
	public void testGetHostCpuPages()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_default.xml" );
		final Cpu hostCpu = caps.getHostCpu();

		assertNotNull( hostCpu );

		final List<Pages> hostCpuPages = hostCpu.getPages();
		assertNotNull( hostCpuPages );
		assertEquals( 3, hostCpuPages.size() );

		final Pages hostCpuPage = hostCpuPages.get( 2 );
		assertNotNull( hostCpuPage );
		assertEquals( new BigInteger( "1073741824" ).toString(), hostCpuPage.getSize().toString() );
	}

	@Test
	@DisplayName( "Get empty host CPU pages from libvirt XML capabilities file" )
	public void testGetHostCpuPagesEmpty()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_no-cpu-pages.xml" );
		final Cpu hostCpu = caps.getHostCpu();

		assertNotNull( hostCpu );

		final List<Pages> hostCpuPages = hostCpu.getPages();
		assertNotNull( hostCpuPages );
		assertEquals( 0, hostCpuPages.size() );
	}

	@Test
	@DisplayName( "Get host IOMMU support from libvirt XML capabilities file" )
	public void testGetHostIommuSupport()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_default.xml" );

		assertEquals( true, caps.hasHostIommuSupport() );
	}

	@Test
	@DisplayName( "Get non-existent host IOMMU support from libvirt XML capabilities file" )
	public void testGetHostIommuSupportNonExistent()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_no-iommu.xml" );

		assertEquals( false, caps.hasHostIommuSupport() );
	}

	@Test
	@DisplayName( "Get guests from libvirt XML capabilities file" )
	public void testGetGuests()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_default.xml" );

		final List<Guest> guests = caps.getGuests();
		assertNotNull( guests );
		assertEquals( 26, guests.size() );

		final Guest guest = guests.get( 3 );
		assertNotNull( guest );
		assertEquals( OsType.HVM.toString(), guest.getOsType().toString() );
		assertEquals( "aarch64", guest.getArchName() );
		assertEquals( 64, guest.getArchWordSize() );
		assertEquals( "/usr/bin/qemu-system-aarch64", guest.getArchEmulator() );
	}

	@Test
	@DisplayName( "Get empty guests from libvirt XML capabilities file" )
	public void testGetGuestsEmpty()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_no-guests.xml" );

		final List<Guest> guests = caps.getGuests();
		assertNotNull( guests );
		assertEquals( 0, guests.size() );
	}

	@Test
	@DisplayName( "Get guest machines from libvirt XML capabilities file" )
	public void testGetGuestMachines()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_default.xml" );

		final List<Guest> guests = caps.getGuests();
		assertNotNull( guests );
		assertEquals( 26, guests.size() );

		final Guest guest = guests.get( 3 );
		assertNotNull( guest );

		final List<Machine> guestMachines = guest.getArchMachines();
		assertNotNull( guestMachines );
		assertEquals( 89, guestMachines.size() );

		final Machine guestMachine = guestMachines.get( 5 );
		assertNotNull( guestMachine );
		assertNull( guestMachine.getCanonicalMachine() );
		assertEquals( 2, guestMachine.getMaxCpus() );
		assertEquals( "nuri", guestMachine.getName() );
	}

	@Test
	@DisplayName( "Get empty guest machines from libvirt XML capabilities file" )
	public void testGetGuestMachinesEmpty()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_no-guest-machines.xml" );

		final List<Guest> guests = caps.getGuests();
		assertNotNull( guests );
		assertEquals( 26, guests.size() );

		final Guest guest = guests.get( 3 );
		assertNotNull( guest );

		final List<Machine> guestMachines = guest.getArchMachines();
		assertNotNull( guestMachines );
		assertEquals( 0, guestMachines.size() );
	}

	@Test
	@DisplayName( "Get canonical guest machine from libvirt XML capabilities file" )
	public void testGetGuestMachineCanonical()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_default.xml" );

		final List<Guest> guests = caps.getGuests();
		assertNotNull( guests );
		assertEquals( 26, guests.size() );

		final Guest guest = guests.get( 3 );
		assertNotNull( guest );

		final List<Machine> guestMachines = guest.getArchMachines();
		assertNotNull( guestMachines );
		assertEquals( 89, guestMachines.size() );

		final Machine guestMachine = guestMachines.get( 29 );
		assertNotNull( guestMachine );
		assertEquals( "virt-5.2", guestMachine.getCanonicalMachine() );
		assertEquals( 512, guestMachine.getMaxCpus() );
		assertEquals( "virt", guestMachine.getName() );
	}

	@Test
	@DisplayName( "Get guest machine domains from libvirt XML capabilities file" )
	public void testGetGuestMachineDomains()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_default.xml" );

		final List<Guest> guests = caps.getGuests();
		assertNotNull( guests );
		assertEquals( 26, guests.size() );

		final Guest guest = guests.get( 5 );
		assertNotNull( guest );

		final List<Domain> guestDomains = guest.getArchDomains();
		assertNotNull( guestDomains );
		assertEquals( 2, guestDomains.size() );

		final Domain guestDomain = guestDomains.get( 1 );
		assertNotNull( guestDomain );
		assertEquals( Type.KVM, guestDomain.getType() );
	}

	@Test
	@DisplayName( "Get empty guest machine domains from libvirt XML capabilities file" )
	public void testGetGuestMachineDomainsEmpty()
	{
		final Capabilities caps = this.newCapabilitiesInstance( "qemu-kvm_capabilities_no-guest-machines.xml" );

		final List<Guest> guests = caps.getGuests();
		assertNotNull( guests );
		assertEquals( 26, guests.size() );

		final Guest guest = guests.get( 3 );
		assertNotNull( guest );

		final List<Domain> guestDomains = guest.getArchDomains();
		assertNotNull( guestDomains );
		assertEquals( 0, guestDomains.size() );
	}
}