devices = this.getSerialDevDevices( config );
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/virtualization/LibvirtHypervisorQemu.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/virtualization/LibvirtHypervisorQemu.java
index 260c3f4e..34cf33cf 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/virtualization/LibvirtHypervisorQemu.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/virtualization/LibvirtHypervisorQemu.java
@@ -3,13 +3,31 @@ package org.openslx.runvirt.plugin.qemu.virtualization;
import org.openslx.runvirt.virtualization.LibvirtHypervisor;
import org.openslx.runvirt.virtualization.LibvirtHypervisorException;
+/**
+ * Representation of the Libvirt QEMU hypervisor backend.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class LibvirtHypervisorQemu extends LibvirtHypervisor
{
+ /**
+ * Creates a new Libvirt QEMU hypervisor backend and connects to the specified backend.
+ *
+ * @param type session type of the connection to the Libvirt QEMU hypervisor backend.
+ * @throws LibvirtHypervisorException failed to connect to the Libvirt QEMU hypervisor backend.
+ */
public LibvirtHypervisorQemu( QemuSessionType type ) throws LibvirtHypervisorException
{
super( type.getConnectionUri() );
}
+ /**
+ * Type of Libvirt QEMU hypervisor backend session.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public enum QemuSessionType
{
// @formatter:off
@@ -17,23 +35,29 @@ public class LibvirtHypervisorQemu extends LibvirtHypervisor
LOCAL_USER_SESSION ( "qemu:///session" );
// @formatter:on
+ /**
+ * Connection URI of the QEMU session type.
+ */
private final String connectionUri;
+ /**
+ * Creates a new QEMU session type.
+ *
+ * @param connectionUri URI for the connection of the session.
+ */
QemuSessionType( String connectionUri )
{
this.connectionUri = connectionUri;
}
+ /**
+ * Returns the URI of the connection for the session.
+ *
+ * @return URI of the connection for the session.
+ */
public String getConnectionUri()
{
return this.connectionUri;
}
-
- // TODO:
- // Implement capabilities -> get host architecture => decision whether to emulate or use KVM? -> change domain of XML
- // fill in given HDD file, CDROM, ...
- // GPU-Passthrough: patch XML with hypervisor disable bit, ..., to get Nvidia driver working
- // Add hostdev für GPU passthrough -> add PCI ID arguments to cmdln parser
- //
}
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java
index 345900ab..3c654880 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java
@@ -8,16 +8,47 @@ import org.openslx.libvirt.capabilities.Capabilities;
import org.openslx.libvirt.xml.LibvirtXmlDocumentException;
import org.openslx.libvirt.xml.LibvirtXmlSerializationException;
import org.openslx.libvirt.xml.LibvirtXmlValidationException;
-
+import org.openslx.virtualization.Version;
+
+/**
+ * Representation of a Libvirt hypervisor backend (e.g. QEMU or VMware).
+ *
+ * The representation allows to connect to a running Libvirt service and query the host system's
+ * capabilities or manage virtual machines.
+ *
+ * @implNote This class is the abstract representation to implement various Libvirt hypervisor
+ * backends using inheritance.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public abstract class LibvirtHypervisor implements Closeable
{
+ /**
+ * Connection to a Libvirt hypervisor backend.
+ */
protected Connect hypervisor = null;
+ /**
+ * Creates a new Libvirt hypervisor backend specified by an URI and connects to the specified
+ * backend.
+ *
+ * @param connectionUri URI of a specific Libvirt hypervisor backend.
+ * @throws LibvirtHypervisorException failed to connect to the specified Libvirt hypervisor
+ * backend.
+ */
public LibvirtHypervisor( String connectionUri ) throws LibvirtHypervisorException
{
this.connect( connectionUri );
}
+ /**
+ * Connects to the Libvirt hypervisor backend specified by an URI.
+ *
+ * @param connectionUri URI of a specific Libvirt hypervisor backend.
+ * @throws LibvirtHypervisorException failed to connect to the specified Libvirt hypervisor
+ * backend.
+ */
protected void connect( String connectionUri ) throws LibvirtHypervisorException
{
try {
@@ -27,6 +58,13 @@ public abstract class LibvirtHypervisor implements Closeable
}
}
+ /**
+ * Returns the queried Libvirt hypervisor's host system capabilities.
+ *
+ * @return queried Libvirt hypervisor's host system capabilities.
+ * @throws LibvirtHypervisorException failed to query and return the Libvirt hypervisor's host
+ * system capabilities.
+ */
public Capabilities getCapabilites() throws LibvirtHypervisorException
{
Capabilities hypervisorCapabilities = null;
@@ -42,20 +80,41 @@ public abstract class LibvirtHypervisor implements Closeable
return hypervisorCapabilities;
}
- public int getVersion() throws LibvirtHypervisorException
+ /**
+ * Returns the version of the Libvirt hypervisor backend.
+ *
+ * @return version of the Libvirt hypervisor backend.
+ * @throws LibvirtHypervisorException failed to get the version of the Libvirt hypervisor
+ * backend.
+ */
+ public Version getVersion() throws LibvirtHypervisorException
{
- int hypervisorVersion = 0;
+ long hypervisorVersionRaw = 0;
+ Version hypervisorVersion = null;
try {
- final long hypervisorVersionLong = this.hypervisor.getVersion();
- hypervisorVersion = Long.valueOf( hypervisorVersionLong ).intValue();
+ hypervisorVersionRaw = this.hypervisor.getVersion();
} catch ( LibvirtException e ) {
throw new LibvirtHypervisorException( e.getLocalizedMessage() );
}
+ if ( hypervisorVersionRaw > 0 ) {
+ final short major = Long.valueOf( hypervisorVersionRaw / Long.valueOf( 1000000 ) ).shortValue();
+ hypervisorVersionRaw %= Long.valueOf( 1000000 );
+ final short minor = Long.valueOf( hypervisorVersionRaw / Long.valueOf( 1000 ) ).shortValue();
+ hypervisorVersion = new Version( major, minor );
+ }
+
return hypervisorVersion;
}
+ /**
+ * Register a virtual machine by the Libvirt hypervisor based on a virtualization configuration.
+ *
+ * @param vmConfiguration virtualization configuration for the virtual machine.
+ * @return instance of the registered and defined virtual machine.
+ * @throws LibvirtHypervisorException failed to register and define virtual machine.
+ */
public LibvirtVirtualMachine registerVm( org.openslx.libvirt.domain.Domain vmConfiguration )
throws LibvirtHypervisorException
{
@@ -71,6 +130,13 @@ public abstract class LibvirtHypervisor implements Closeable
return new LibvirtVirtualMachine( libvirtDomain );
}
+ /**
+ * Deregisters an already registered virtual machine by the Libvirt hypervisor.
+ *
+ * @param vm virtual machine that should be deregistered
+ * @throws LibvirtHypervisorException failed to deregister virtual machine by the Libvirt hypervisor.
+ * @throws LibvirtVirtualMachineException failed to check and stop the virtual machine.
+ */
public void deregisterVm( LibvirtVirtualMachine vm )
throws LibvirtHypervisorException, LibvirtVirtualMachineException
{
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisorException.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisorException.java
index acf640e1..64ae6b20 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisorException.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisorException.java
@@ -1,5 +1,11 @@
package org.openslx.runvirt.virtualization;
+/**
+ * An exception of a Libvirt hypervisor error during acquiring the hypervisor's functionality.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class LibvirtHypervisorException extends Exception
{
/**
@@ -7,6 +13,11 @@ public class LibvirtHypervisorException extends Exception
*/
private static final long serialVersionUID = -3631452625806770209L;
+ /**
+ * Creates a Libvirt hypervisor exception including an error message.
+ *
+ * @param errorMsg message to describe a specific Libvirt hypervisor error.
+ */
LibvirtHypervisorException( String errorMsg )
{
super( errorMsg );
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java
index 781bd938..32b99d66 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java
@@ -3,20 +3,45 @@ package org.openslx.runvirt.virtualization;
import org.libvirt.Domain;
import org.libvirt.LibvirtException;
+/**
+ * Representation of a Libvirt virtual machine.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class LibvirtVirtualMachine
{
+ /**
+ * Libvirt virtualization configuration of the virtual machine.
+ */
private Domain domain;
+ /**
+ * Creates a new Libvirt virtual machine specified by a virtualization configuration.
+ *
+ * @param vm Libvirt virtualization configuration to specify the Libvirt virtual machine.
+ */
LibvirtVirtualMachine( Domain vm )
{
this.domain = vm;
}
+ /**
+ * Returns the Libvirt virtualization configuration of the Libvirt virtual machine.
+ *
+ * @return Libvirt virtualization configuration of the Libvirt virtual machine.
+ */
public Domain getLibvirtDomain()
{
return this.domain;
}
+ /**
+ * Checks if the Libvirt virtual machine is running.
+ *
+ * @return state of the Libvirt virtual machine whether it is running or not.
+ * @throws LibvirtVirtualMachineException failed to check if Libvirt machine is running or not.
+ */
public boolean isRunning() throws LibvirtVirtualMachineException
{
int state = 0;
@@ -30,6 +55,11 @@ public class LibvirtVirtualMachine
return ( state == 0 ) ? false : true;
}
+ /**
+ * Starts the Libvirt virtual machine.
+ *
+ * @throws LibvirtVirtualMachineException failed to start the Libvirt virtual machine.
+ */
public void start() throws LibvirtVirtualMachineException
{
if ( !this.isRunning() ) {
@@ -41,6 +71,11 @@ public class LibvirtVirtualMachine
}
}
+ /**
+ * Stops the Libvirt virtual machine.
+ *
+ * @throws LibvirtVirtualMachineException failed to stop the Libvirt virtual machine.
+ */
public void stop() throws LibvirtVirtualMachineException
{
if ( this.isRunning() ) {
@@ -52,6 +87,11 @@ public class LibvirtVirtualMachine
}
}
+ /**
+ * Suspends the Libvirt virtual machine.
+ *
+ * @throws LibvirtVirtualMachineException failed to suspend the Libvirt virtual machine.
+ */
public void suspend() throws LibvirtVirtualMachineException
{
try {
@@ -61,6 +101,11 @@ public class LibvirtVirtualMachine
}
}
+ /**
+ * Resumes the Libvirt virtual machine.
+ *
+ * @throws LibvirtVirtualMachineException faild to resume the Libvirt virtual machine.
+ */
public void resume() throws LibvirtVirtualMachineException
{
try {
@@ -70,6 +115,11 @@ public class LibvirtVirtualMachine
}
}
+ /**
+ * Reboot the Libvirt virtual machine.
+ *
+ * @throws LibvirtVirtualMachineException failed to reboot the Libvirt virtual machine.
+ */
public void reboot() throws LibvirtVirtualMachineException
{
try {
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachineException.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachineException.java
index 4e8ee1ba..dd490be3 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachineException.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachineException.java
@@ -1,5 +1,11 @@
package org.openslx.runvirt.virtualization;
+/**
+ * An exception of a Libvirt virtual machine error during controlling the virtual machine.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
public class LibvirtVirtualMachineException extends Exception
{
/**
@@ -7,6 +13,11 @@ public class LibvirtVirtualMachineException extends Exception
*/
private static final long serialVersionUID = -5371327391243047616L;
+ /**
+ * Creates a Libvirt virtual machine exception including an error message.
+ *
+ * @param errorMsg message to describe a specific Libvirt virtual machine error.
+ */
public LibvirtVirtualMachineException( String errorMsg )
{
super( errorMsg );
--
cgit v1.2.3-55-g7522
From 670ef8aabd4d997372554e79f8ca8930df56d2e6 Mon Sep 17 00:00:00 2001
From: Manuel Bentele
Date: Mon, 17 May 2021 13:51:41 +0200
Subject: [qemu] Add viewer representation to render displays of the virtual
machine
---
core/modules/qemu/runvirt-plugin-qemu/pom.xml | 5 +
.../java/org/openslx/runvirt/plugin/qemu/App.java | 33 +++++-
.../java/org/openslx/runvirt/viewer/Viewer.java | 118 +++++++++++++++++++++
.../openslx/runvirt/viewer/ViewerException.java | 35 ++++++
.../org/openslx/runvirt/viewer/ViewerUtils.java | 65 ++++++++++++
.../openslx/runvirt/viewer/ViewerVirtManager.java | 75 +++++++++++++
.../openslx/runvirt/viewer/ViewerVirtViewer.java | 97 +++++++++++++++++
.../runvirt/virtualization/LibvirtHypervisor.java | 31 +++++-
.../virtualization/LibvirtVirtualMachine.java | 31 ++++--
9 files changed, 476 insertions(+), 14 deletions(-)
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/Viewer.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerException.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerUtils.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerVirtManager.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerVirtViewer.java
diff --git a/core/modules/qemu/runvirt-plugin-qemu/pom.xml b/core/modules/qemu/runvirt-plugin-qemu/pom.xml
index 197f3df3..f02be96d 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/pom.xml
+++ b/core/modules/qemu/runvirt-plugin-qemu/pom.xml
@@ -61,6 +61,11 @@
1.4
compile
+
+ org.apache.commons
+ commons-exec
+ 1.3
+
log4j
log4j
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java
index b026a540..ecc97b12 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java
@@ -27,6 +27,9 @@ import org.openslx.runvirt.plugin.qemu.configuration.TransformationSpecificQemuA
import org.openslx.runvirt.plugin.qemu.configuration.TransformationSpecificQemuGpuPassthroughNvidia;
import org.openslx.runvirt.plugin.qemu.virtualization.LibvirtHypervisorQemu;
import org.openslx.runvirt.plugin.qemu.virtualization.LibvirtHypervisorQemu.QemuSessionType;
+import org.openslx.runvirt.viewer.Viewer;
+import org.openslx.runvirt.viewer.ViewerException;
+import org.openslx.runvirt.viewer.ViewerVirtViewer;
import org.openslx.runvirt.virtualization.LibvirtHypervisor;
import org.openslx.runvirt.virtualization.LibvirtHypervisorException;
import org.openslx.runvirt.virtualization.LibvirtVirtualMachine;
@@ -160,7 +163,7 @@ public class App
}
}
- // define QEMU VM from finalized configuration
+ // define Libvirt VM from finalized configuration
LibvirtVirtualMachine vm = null;
try {
vm = hypervisor.registerVm( config );
@@ -170,6 +173,7 @@ public class App
System.exit( 6 );
}
+ // start defined Libvirt VM
try {
vm.start();
} catch ( LibvirtVirtualMachineException e ) {
@@ -177,13 +181,36 @@ public class App
try {
hypervisor.deregisterVm( vm );
} catch ( LibvirtHypervisorException | LibvirtVirtualMachineException e1 ) {
- LOGGER.error( "Failed to undefine VM: " + e.getLocalizedMessage() );
+ LOGGER.error( "Failed to undefine VM in error state after failed start of VM: " + e.getLocalizedMessage() );
}
hypervisor.close();
System.exit( 7 );
}
- // close connection and let VM be running
+ // display Libvirt VM with a specific viewer on the screen
+ final Viewer vmViewer = new ViewerVirtViewer( vm, hypervisor );
+ try {
+ vmViewer.display();
+ } catch ( ViewerException e ) {
+ LOGGER.error( "Failed to display VM: " + e.getLocalizedMessage() );
+ try {
+ hypervisor.deregisterVm( vm );
+ } catch ( LibvirtHypervisorException | LibvirtVirtualMachineException e1 ) {
+ LOGGER.error( "Failed to undefine VM in error state after failed display: " + e.getLocalizedMessage() );
+ }
+ hypervisor.close();
+ System.exit( 8 );
+ }
+
+ // undefine VM after usage
+ try {
+ hypervisor.deregisterVm( vm );
+ } catch ( LibvirtHypervisorException | LibvirtVirtualMachineException e ) {
+ LOGGER.error( "Failed to undefine VM: " + e.getLocalizedMessage() );
+ hypervisor.close();
+ }
+
+ // close connection to hypervisor
hypervisor.close();
// return with successful exit code
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/Viewer.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/Viewer.java
new file mode 100644
index 00000000..d23a9e11
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/Viewer.java
@@ -0,0 +1,118 @@
+package org.openslx.runvirt.viewer;
+
+import org.openslx.runvirt.virtualization.LibvirtHypervisor;
+import org.openslx.runvirt.virtualization.LibvirtVirtualMachine;
+import org.openslx.virtualization.Version;
+
+/**
+ * Representation of an viewer for virtual machines running on a host system.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
+public abstract class Viewer
+{
+ /**
+ * Name of the viewer.
+ */
+ private final String name;
+
+ /**
+ * Number of supported displays by the viewer.
+ */
+ private final int numSupportedDisplays;
+
+ /**
+ * The virtual machine to display.
+ */
+ private final LibvirtVirtualMachine machine;
+
+ /**
+ * Remote (hypervisor) endpoint for the viewer to connect to.
+ */
+ private final LibvirtHypervisor hypervisor;
+
+ /**
+ * Creates a new viewer for a Libvirt virtual machine running on a Libvirt hypervisor.
+ *
+ * @param name textual name of the viewer.
+ * @param numSupportedDisplays number of supported displays by the viewer.
+ * @param machine virtual machine to display.
+ * @param hypervisor remote (hypervisor) endpoint for the viewer to connect to.
+ */
+ public Viewer( String name, int numSupportedDisplays, LibvirtVirtualMachine machine, LibvirtHypervisor hypervisor )
+ {
+ this.name = name;
+ this.numSupportedDisplays = numSupportedDisplays;
+ this.machine = machine;
+ this.hypervisor = hypervisor;
+ }
+
+ /**
+ * Returns the name of the viewer.
+ *
+ * @return name of the viewer.
+ */
+ public String getName()
+ {
+ return this.name;
+ }
+
+ /**
+ * Returns the number of supported displays by the viewer.
+ *
+ * @return number of supported displays by the viewer.
+ */
+ public int getNumberOfSupportedDisplays()
+ {
+ return this.numSupportedDisplays;
+ }
+
+ /**
+ * Returns the virtual machine to display.
+ *
+ * @return virtual machine to display.
+ */
+ public LibvirtVirtualMachine getMachine()
+ {
+ return this.machine;
+ }
+
+ /**
+ * Returns the remote (hypervisor) endpoint for the viewer to connect to.
+ *
+ * @return remote (hypervisor) endpoint for the viewer to connect to.
+ */
+ public LibvirtHypervisor getHypervisor()
+ {
+ return this.hypervisor;
+ }
+
+ /**
+ * Displays all virtual machine's displays.
+ *
+ * @throws ViewerException failed to display all displays of a virtual machine.
+ *
+ * @apiNote A call to this method blocks until the implemented {@link #render()} process
+ * terminates.
+ */
+ public void display() throws ViewerException
+ {
+ this.render();
+ }
+
+ /**
+ * Returns the version of the viewer.
+ *
+ * @return version of the viewer.
+ * @throws ViewerException failed to get version of the viewer.
+ */
+ public abstract Version getVersion() throws ViewerException;
+
+ /**
+ * Renders the content of all displays from the virtual machine.
+ *
+ * @throws ViewerException failed to render all displays of a virtual machine.
+ */
+ protected abstract void render() throws ViewerException;
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerException.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerException.java
new file mode 100644
index 00000000..0c178375
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerException.java
@@ -0,0 +1,35 @@
+package org.openslx.runvirt.viewer;
+
+/**
+ * An exception of a viewer error during displaying all displays of a virtual machine.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
+public class ViewerException extends Exception
+{
+ /**
+ * Version for serialization.
+ */
+ private static final long serialVersionUID = 161091514643380414L;
+
+ /**
+ * Creates a new viewer exception including an error message.
+ *
+ * @param errorMsg message to describe a specific viewer error.
+ */
+ public ViewerException( String errorMsg )
+ {
+ super( errorMsg );
+ }
+
+ /**
+ * Creates a new viewer exception by a copy of an existing viewer exception.
+ *
+ * @param e existing viewer exception.
+ */
+ public ViewerException( ViewerException e )
+ {
+ super( e );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerUtils.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerUtils.java
new file mode 100644
index 00000000..1ed5947a
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerUtils.java
@@ -0,0 +1,65 @@
+package org.openslx.runvirt.viewer;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+import org.apache.commons.exec.CommandLine;
+import org.apache.commons.exec.DefaultExecutor;
+import org.apache.commons.exec.PumpStreamHandler;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.output.ByteArrayOutputStream;
+
+/**
+ * Utils for viewing displays of virtual machines.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
+public class ViewerUtils
+{
+ /**
+ * Synchronously executes a viewer program specified by a command line call.
+ *
+ * The command line call of the viewer program consists of the program name and an optional list
+ * of submitted command line arguments for the viewer program. The result of the executed viewer
+ * program from the standard output is returned after the program has exited.
+ *
+ * @param viewerProgram name of the viewer program.
+ * @param viewerArguments optional command line arguments for the viewer program.
+ * @return result of the executed viewer program from the standard output.
+ * @throws ViewerException failed to execute the viewer program.
+ */
+ @SuppressWarnings( "deprecation" )
+ public static String executeViewer( String viewerProgram, String[] viewerArguments ) throws ViewerException
+ {
+ final CommandLine viewerCommandLine = new CommandLine( viewerProgram );
+ final DefaultExecutor viewerExecutor = new DefaultExecutor();
+
+ // prepare viewer command to execute
+ viewerCommandLine.addArguments( viewerArguments );
+
+ // set up temporary working directory for the viewer process
+ viewerExecutor.setWorkingDirectory( FileUtils.getTempDirectory() );
+
+ // set expected exit value of the viewer process indicating a successful operation
+ viewerExecutor.setExitValue( 0 );
+
+ // set up output stream handler to retrieve the content from the viewer's standard output
+ final ByteArrayOutputStream viewerOutputStream = new ByteArrayOutputStream();
+ final PumpStreamHandler viewerOutputStreamHandler = new PumpStreamHandler( viewerOutputStream );
+ viewerExecutor.setStreamHandler( viewerOutputStreamHandler );
+
+ // execute the viewer command as blocking process
+ try {
+ viewerExecutor.execute( viewerCommandLine );
+ } catch ( IOException e ) {
+ throw new ViewerException( "Failed to execute '" + viewerProgram + "': " + e.getLocalizedMessage() );
+ }
+
+ final String viewerOuput = viewerOutputStream.toString( StandardCharsets.UTF_8 );
+ IOUtils.closeQuietly( viewerOutputStream );
+
+ return viewerOuput;
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerVirtManager.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerVirtManager.java
new file mode 100644
index 00000000..1848d975
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerVirtManager.java
@@ -0,0 +1,75 @@
+package org.openslx.runvirt.viewer;
+
+import org.openslx.runvirt.virtualization.LibvirtHypervisor;
+import org.openslx.runvirt.virtualization.LibvirtHypervisorException;
+import org.openslx.runvirt.virtualization.LibvirtVirtualMachine;
+import org.openslx.virtualization.Version;
+
+/**
+ * Virtual Machine Manager (virt-manager) to control and view a display of a virtual machine.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
+public class ViewerVirtManager extends Viewer
+{
+ /**
+ * Name of the Virtual Machine Manager program.
+ */
+ private final static String NAME = "virt-manager";
+
+ /**
+ * Maximum number of supported displays by the Virtual Machine Manager.
+ */
+ private final static int NUM_SUPPORTED_DISPLAYS = 1;
+
+ /**
+ * Creates a new Virtual Machine Manager for a virtual machine running on a hypervisor.
+ *
+ * @param machine virtual machine to display.
+ * @param hypervisor remote (hypervisor) endpoint for the viewer to connect to.
+ */
+ public ViewerVirtManager( LibvirtVirtualMachine machine, LibvirtHypervisor hypervisor )
+ {
+ super( ViewerVirtManager.NAME, ViewerVirtManager.NUM_SUPPORTED_DISPLAYS, machine, hypervisor );
+ }
+
+ @Override
+ public Version getVersion() throws ViewerException
+ {
+ // execute viewer process with arguments:
+ // "virt-manager --version"
+ final String versionOutput = ViewerUtils.executeViewer( ViewerVirtManager.NAME,
+ new String[] { "--version" } );
+
+ return Version.valueOf( versionOutput );
+ }
+
+ @Override
+ public void render() throws ViewerException
+ {
+ String connectionUri = null;
+ String machineUuid = null;
+
+ // get URI of the hypervisor connection and UUID of the machine
+ try {
+ connectionUri = this.getHypervisor().getConnectionUri();
+ machineUuid = this.getMachine().getConfiguration().getUuid();
+ } catch ( LibvirtHypervisorException e ) {
+ throw new ViewerException(
+ "Failed to retrieve the URI of the hypervisor backend or the UUID of the machine to display: "
+ + e.getLocalizedMessage() );
+ }
+
+ // check if URI of the hypervisor connection and UUID of the machine is specified, otherwise abort
+ if ( connectionUri == null || connectionUri.isEmpty() || machineUuid == null || machineUuid.isEmpty() ) {
+ throw new ViewerException(
+ "The URI of the hypervisor backend or the UUID of the machine to display is missing!" );
+ }
+
+ // execute viewer process with arguments:
+ // "virt-viewer --connect= --show-domain-console "
+ ViewerUtils.executeViewer( ViewerVirtManager.NAME,
+ new String[] { "--connect=" + connectionUri, "--show-domain-console", machineUuid } );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerVirtViewer.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerVirtViewer.java
new file mode 100644
index 00000000..8f6e9481
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/viewer/ViewerVirtViewer.java
@@ -0,0 +1,97 @@
+package org.openslx.runvirt.viewer;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.openslx.runvirt.virtualization.LibvirtHypervisor;
+import org.openslx.runvirt.virtualization.LibvirtHypervisorException;
+import org.openslx.runvirt.virtualization.LibvirtVirtualMachine;
+import org.openslx.virtualization.Version;
+
+/**
+ * Virtual Viewer (virt-viewer) to view one or several displays of a virtual machine.
+ *
+ * @author Manuel Bentele
+ * @version 1.0
+ */
+public class ViewerVirtViewer extends Viewer
+{
+ /**
+ * Name of the Virtual Machine Manager program.
+ */
+ private final static String NAME = "virt-viewer";
+
+ /**
+ * Maximum number of supported displays by the Virtual Viewer.
+ */
+ private final static int NUM_SUPPORTED_DISPLAYS = Integer.MAX_VALUE;
+
+ /**
+ * Creates a new Virtual Viewer for a Libvirt virtual machine running on a Libvirt hypervisor.
+ *
+ * @param machine virtual machine to display.
+ * @param hypervisor remote (hypervisor) endpoint for the viewer to connect to.
+ */
+ public ViewerVirtViewer( LibvirtVirtualMachine machine, LibvirtHypervisor hypervisor )
+ {
+ super( ViewerVirtViewer.NAME, ViewerVirtViewer.NUM_SUPPORTED_DISPLAYS, machine, hypervisor );
+ }
+
+ @Override
+ public Version getVersion() throws ViewerException
+ {
+ final Version version;
+
+ // execute viewer process with arguments:
+ // "virt-viewer --version"
+ final String versionOutput = ViewerUtils.executeViewer( ViewerVirtViewer.NAME,
+ new String[] { "--version" } );
+
+ if ( versionOutput == null ) {
+ version = null;
+ } else {
+ // parse version from the viewer's process output
+ final Pattern viewerVersionPattern = Pattern.compile( "(\\d+).(\\d+)" );
+ final Matcher viewerVersionMatcher = viewerVersionPattern.matcher( versionOutput );
+
+ // check if version pattern was found
+ if ( viewerVersionMatcher.find() ) {
+ final short major = Short.valueOf( viewerVersionMatcher.group( 1 ) );
+ final short minor = Short.valueOf( viewerVersionMatcher.group( 2 ) );
+ version = new Version( major, minor );
+ } else {
+ version = null;
+ }
+ }
+
+ return version;
+ }
+
+ @Override
+ public void render() throws ViewerException
+ {
+ String connectionUri = null;
+ String machineUuid = null;
+
+ // get URI of the hypervisor connection and UUID of the machine
+ try {
+ connectionUri = this.getHypervisor().getConnectionUri();
+ machineUuid = this.getMachine().getConfiguration().getUuid();
+ } catch ( LibvirtHypervisorException e ) {
+ throw new ViewerException(
+ "Failed to retrieve the URI of the hypervisor backend or the UUID of the machine to display: "
+ + e.getLocalizedMessage() );
+ }
+
+ // check if URI of the hypervisor connection and UUID of the machine is specified, otherwise abort
+ if ( connectionUri == null || connectionUri.isEmpty() || machineUuid == null || machineUuid.isEmpty() ) {
+ throw new ViewerException(
+ "The URI of the hypervisor backend or the UUID of the machine to display is missing!" );
+ }
+
+ // execute viewer process with arguments:
+ // "virt-viewer --full-screen --reconnect --wait --attach --connect= --domain-name -- "
+ ViewerUtils.executeViewer( ViewerVirtViewer.NAME, new String[] { "--full-screen", "--reconnect", "--wait",
+ "--attach", "--connect=" + connectionUri, "--uuid", "--", machineUuid } );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java
index 3c654880..42e2d00f 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java
@@ -58,6 +58,26 @@ public abstract class LibvirtHypervisor implements Closeable
}
}
+ /**
+ * Returns the URI of the connection to the Libvirt hypervisor backend.
+ *
+ * @return URI of the connection to the hypervisor.
+ * @throws LibvirtHypervisorException failed to return the connection URI of the Libvirt
+ * hypervisor backend.
+ */
+ public String getConnectionUri() throws LibvirtHypervisorException
+ {
+ String connectionUri = null;
+
+ try {
+ connectionUri = this.hypervisor.getURI();
+ } catch ( LibvirtException e ) {
+ throw new LibvirtHypervisorException( e.getLocalizedMessage() );
+ }
+
+ return connectionUri;
+ }
+
/**
* Returns the queried Libvirt hypervisor's host system capabilities.
*
@@ -119,23 +139,24 @@ public abstract class LibvirtHypervisor implements Closeable
throws LibvirtHypervisorException
{
final String xmlVmConfiguration = vmConfiguration.toString();
- org.libvirt.Domain libvirtDomain = null;
+ org.libvirt.Domain internalConfiguration = null;
try {
- libvirtDomain = this.hypervisor.domainDefineXML( xmlVmConfiguration );
+ internalConfiguration = this.hypervisor.domainDefineXML( xmlVmConfiguration );
} catch ( LibvirtException e ) {
throw new LibvirtHypervisorException( e.getLocalizedMessage() );
}
- return new LibvirtVirtualMachine( libvirtDomain );
+ return new LibvirtVirtualMachine( internalConfiguration, vmConfiguration );
}
/**
* Deregisters an already registered virtual machine by the Libvirt hypervisor.
*
* @param vm virtual machine that should be deregistered
- * @throws LibvirtHypervisorException failed to deregister virtual machine by the Libvirt hypervisor.
- * @throws LibvirtVirtualMachineException failed to check and stop the virtual machine.
+ * @throws LibvirtHypervisorException failed to deregister virtual machine by the Libvirt
+ * hypervisor.
+ * @throws LibvirtVirtualMachineException failed to check and stop the virtual machine.
*/
public void deregisterVm( LibvirtVirtualMachine vm )
throws LibvirtHypervisorException, LibvirtVirtualMachineException
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java
index 32b99d66..3bcec2f8 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtVirtualMachine.java
@@ -12,18 +12,37 @@ import org.libvirt.LibvirtException;
public class LibvirtVirtualMachine
{
/**
- * Libvirt virtualization configuration of the virtual machine.
+ * Internal Libvirt virtualization configuration of the virtual machine.
*/
private Domain domain;
+ /**
+ * Libvirt virtualization configuration of the virtual machine.
+ */
+ private org.openslx.libvirt.domain.Domain configuration;
+
/**
* Creates a new Libvirt virtual machine specified by a virtualization configuration.
*
- * @param vm Libvirt virtualization configuration to specify the Libvirt virtual machine.
+ * @param internalConfiguration internal Libvirt virtualization configuration to specify the
+ * Libvirt virtual machine.
+ * @param configuration Libvirt virtualization configuration to specify the Libvirt virtual
+ * machine.
*/
- LibvirtVirtualMachine( Domain vm )
+ LibvirtVirtualMachine( Domain internalConfiguration, org.openslx.libvirt.domain.Domain configuration )
{
- this.domain = vm;
+ this.domain = internalConfiguration;
+ this.configuration = configuration;
+ }
+
+ /**
+ * Returns the internal Libvirt virtualization configuration of the Libvirt virtual machine.
+ *
+ * @return internal Libvirt virtualization configuration of the Libvirt virtual machine.
+ */
+ Domain getLibvirtDomain()
+ {
+ return this.domain;
}
/**
@@ -31,9 +50,9 @@ public class LibvirtVirtualMachine
*
* @return Libvirt virtualization configuration of the Libvirt virtual machine.
*/
- public Domain getLibvirtDomain()
+ public org.openslx.libvirt.domain.Domain getConfiguration()
{
- return this.domain;
+ return this.configuration;
}
/**
--
cgit v1.2.3-55-g7522
From cac9562dd5f4cb106fb068a26af6e22dd3c6a463 Mon Sep 17 00:00:00 2001
From: Manuel Bentele
Date: Mon, 17 May 2021 14:17:53 +0200
Subject: [qemu] Keep track of defined VMs to automatically close them before
program exit
---
.../java/org/openslx/runvirt/plugin/qemu/App.java | 11 +---------
.../runvirt/virtualization/LibvirtHypervisor.java | 25 +++++++++++++++++++++-
2 files changed, 25 insertions(+), 11 deletions(-)
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java
index ecc97b12..e5bc4780 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java
@@ -178,11 +178,6 @@ public class App
vm.start();
} catch ( LibvirtVirtualMachineException e ) {
LOGGER.error( "Failed to start defined VM: " + e.getLocalizedMessage() );
- try {
- hypervisor.deregisterVm( vm );
- } catch ( LibvirtHypervisorException | LibvirtVirtualMachineException e1 ) {
- LOGGER.error( "Failed to undefine VM in error state after failed start of VM: " + e.getLocalizedMessage() );
- }
hypervisor.close();
System.exit( 7 );
}
@@ -193,11 +188,6 @@ public class App
vmViewer.display();
} catch ( ViewerException e ) {
LOGGER.error( "Failed to display VM: " + e.getLocalizedMessage() );
- try {
- hypervisor.deregisterVm( vm );
- } catch ( LibvirtHypervisorException | LibvirtVirtualMachineException e1 ) {
- LOGGER.error( "Failed to undefine VM in error state after failed display: " + e.getLocalizedMessage() );
- }
hypervisor.close();
System.exit( 8 );
}
@@ -208,6 +198,7 @@ public class App
} catch ( LibvirtHypervisorException | LibvirtVirtualMachineException e ) {
LOGGER.error( "Failed to undefine VM: " + e.getLocalizedMessage() );
hypervisor.close();
+ System.exit( 9 );
}
// close connection to hypervisor
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java
index 42e2d00f..757fc706 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/virtualization/LibvirtHypervisor.java
@@ -1,6 +1,8 @@
package org.openslx.runvirt.virtualization;
import java.io.Closeable;
+import java.util.ArrayList;
+import java.util.List;
import org.libvirt.Connect;
import org.libvirt.LibvirtException;
@@ -29,6 +31,11 @@ public abstract class LibvirtHypervisor implements Closeable
*/
protected Connect hypervisor = null;
+ /**
+ * List of registered machines on the Libvirt hypervisor backend.
+ */
+ private List machines;
+
/**
* Creates a new Libvirt hypervisor backend specified by an URI and connects to the specified
* backend.
@@ -40,6 +47,7 @@ public abstract class LibvirtHypervisor implements Closeable
public LibvirtHypervisor( String connectionUri ) throws LibvirtHypervisorException
{
this.connect( connectionUri );
+ this.machines = new ArrayList();
}
/**
@@ -147,7 +155,10 @@ public abstract class LibvirtHypervisor implements Closeable
throw new LibvirtHypervisorException( e.getLocalizedMessage() );
}
- return new LibvirtVirtualMachine( internalConfiguration, vmConfiguration );
+ final LibvirtVirtualMachine vm = new LibvirtVirtualMachine( internalConfiguration, vmConfiguration );
+ this.machines.add( vm );
+
+ return vm;
}
/**
@@ -172,11 +183,23 @@ public abstract class LibvirtHypervisor implements Closeable
} catch ( LibvirtException e ) {
throw new LibvirtHypervisorException( e.getLocalizedMessage() );
}
+
+ this.machines.remove( vm );
}
@Override
public void close()
{
+ // deregister all VMs defined on the hypervisor
+ for ( LibvirtVirtualMachine vm : this.machines ) {
+ try {
+ this.deregisterVm( vm );
+ } catch ( LibvirtHypervisorException | LibvirtVirtualMachineException e ) {
+ e.printStackTrace();
+ }
+ }
+
+ // close connection to the hypervisor
try {
this.hypervisor.close();
} catch ( LibvirtException e ) {
--
cgit v1.2.3-55-g7522
From 96768a5133953ea3fa57ab4f7eac145e98637739 Mon Sep 17 00:00:00 2001
From: Manuel Bentele
Date: Mon, 17 May 2021 14:49:24 +0200
Subject: [qemu] Show virt-manager in debug mode to inspect Libvirt VM
---
.../vmchooser/plugins/qemu/run-virt.include | 1 +
.../java/org/openslx/runvirt/plugin/qemu/App.java | 14 ++++-
.../runvirt/plugin/qemu/cmdln/CommandLineArgs.java | 12 ++++
.../org/openslx/runvirt/plugin/qemu/AppTest.java | 8 +--
.../plugin/qemu/cmdln/CommandLineArgsTest.java | 67 ++++++++++++++++++++++
5 files changed, 96 insertions(+), 6 deletions(-)
diff --git a/core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemu/run-virt.include b/core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemu/run-virt.include
index 90a00c6e..b7e43df9 100644
--- a/core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemu/run-virt.include
+++ b/core/modules/qemu/data/opt/openslx/vmchooser/plugins/qemu/run-virt.include
@@ -29,6 +29,7 @@ run_plugin() {
# call the Libvirt Java tool to finalize configuration and start VM
declare -rg VIRTCMD="java -jar /opt/openslx/share/java/runvirt-plugin-qemu.jar"
+ isset DEBUG && VIRTCMDOPTS+=( "-debug" "${DEBUG}" )
isset VM_CLEANNAME && VIRTCMDOPTS+=( "-vmname" "${VM_CLEANNAME}" )
isset VM_DISPLAYNAME && VIRTCMDOPTS+=( "-vmdsplname" "${VM_DISPLAYNAME}" )
isset VM_OS_TYPE && VIRTCMDOPTS+=( "-vmos" "${VM_OS_TYPE}" )
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java
index e5bc4780..a3e1c5b7 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/App.java
@@ -29,6 +29,7 @@ import org.openslx.runvirt.plugin.qemu.virtualization.LibvirtHypervisorQemu;
import org.openslx.runvirt.plugin.qemu.virtualization.LibvirtHypervisorQemu.QemuSessionType;
import org.openslx.runvirt.viewer.Viewer;
import org.openslx.runvirt.viewer.ViewerException;
+import org.openslx.runvirt.viewer.ViewerVirtManager;
import org.openslx.runvirt.viewer.ViewerVirtViewer;
import org.openslx.runvirt.virtualization.LibvirtHypervisor;
import org.openslx.runvirt.virtualization.LibvirtHypervisorException;
@@ -182,8 +183,17 @@ public class App
System.exit( 7 );
}
- // display Libvirt VM with a specific viewer on the screen
- final Viewer vmViewer = new ViewerVirtViewer( vm, hypervisor );
+ // create specific viewer to display Libvirt VM
+ final Viewer vmViewer;
+ if ( cmdLn.isDebugEnabled() ) {
+ // create specific Virtual Machine Manager viewer if debug mode is enabled
+ vmViewer = new ViewerVirtManager( vm, hypervisor );
+ } else {
+ // create Virtual Viewer if debug mode is disabled
+ vmViewer = new ViewerVirtViewer( vm, hypervisor );
+ }
+
+ // display Libvirt VM with the specific viewer on the screen
try {
vmViewer.display();
} catch ( ViewerException e ) {
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java
index 03df8923..eb7c8739 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java
@@ -127,6 +127,17 @@ public class CommandLineArgs
return this.cmdLn.hasOption( CmdLnOption.HELP.getShortOption() );
}
+ /**
+ * Returns the state of the command line option {@link CmdLnOption#DEBUG}.
+ *
+ * @return state of the command line option {@link CmdLnOption#DEBUG}.
+ */
+ public boolean isDebugEnabled()
+ {
+ final String debugArg = this.getArgument( CmdLnOption.DEBUG );
+ return ( "true".equals( debugArg ) ) ? true : false;
+ }
+
/**
* Returns the argument of the command line option {@link CmdLnOption#VM_CFGINP}.
*
@@ -344,6 +355,7 @@ public class CommandLineArgs
{
// @formatter:off
HELP ( 'h', "help", false, "" ),
+ DEBUG ( 'b', "debug", true, "Enable or disable debug mode" ),
VM_CFGINP ( 'i', "vmcfginp", true, "File name of an existing and filtered Libvirt domain XML configuration file" ),
VM_CFGOUT ( 'o', "vmcfgout", true, "File name to output a finalized Libvirt domain XML configuration file" ),
VM_NAME ( 'n', "vmname", true, "Name for the virtual machine" ),
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/AppTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/AppTest.java
index 9f8f925f..a7929ab0 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/AppTest.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/AppTest.java
@@ -63,7 +63,7 @@ public class AppTest
assertTrue( shortHelpOptionCorrectOutput.contains( App.APP_DESC ) );
// test that no error was logged and output is available
- assertEquals( 2026, shortHelpOptionCorrectOutput.length() );
+ assertEquals( 2093, shortHelpOptionCorrectOutput.length() );
assertEquals( 0, shortHelpOptionCorrectErrOutput.length() );
}
@@ -91,7 +91,7 @@ public class AppTest
assertTrue( longHelpOptionCorrectOutput.contains( App.APP_DESC ) );
// test that no error was logged and output is available
- assertEquals( 2026, longHelpOptionCorrectOutput.length() );
+ assertEquals( 2093, longHelpOptionCorrectOutput.length() );
assertEquals( 0, longHelpOptionCorrectErrOutput.length() );
}
@@ -119,7 +119,7 @@ public class AppTest
assertTrue( shortHelpOptionIncorrectOutput.contains( App.APP_DESC ) );
// test that error was logged and output is available
- assertEquals( 2026, shortHelpOptionIncorrectOutput.length() );
+ assertEquals( 2093, shortHelpOptionIncorrectOutput.length() );
assertEquals( 0, shortHelpOptionIncorrectErrOutput.length() );
}
@@ -147,7 +147,7 @@ public class AppTest
assertTrue( longHelpOptionIncorrectOutput.contains( App.APP_DESC ) );
// test that error was logged and output is available
- assertEquals( 2026, longHelpOptionIncorrectOutput.length() );
+ assertEquals( 2093, longHelpOptionIncorrectOutput.length() );
assertEquals( 0, longHelpOptionIncorrectErrOutput.length() );
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgsTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgsTest.java
index ee3e0d1d..972f5e4b 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgsTest.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgsTest.java
@@ -1,6 +1,7 @@
package org.openslx.runvirt.plugin.qemu.cmdln;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -16,6 +17,8 @@ public class CommandLineArgsTest
public static final String CMDLN_PREFIX_OPTION_SHORT = "-";
public static final String CMDLN_PREFIX_OPTION_LONG = "--";
+ private static final String CMDLN_TEST_DEBUG_OFF = "false";
+ private static final String CMDLN_TEST_DEBUG_ON = "true";
private static final String CMDLN_TEST_NAME = "test";
private static final String CMDLN_TEST_FILENAME = System.getProperty( "user.dir" ) + File.separator + CMDLN_TEST_NAME;
private static final String CMDLN_TEST_UUID = "c9570672-cbae-4cbd-801a-881b281b8d79";
@@ -69,6 +72,70 @@ public class CommandLineArgsTest
assertTrue( cmdLn.isHelpAquired() );
}
+ @Test
+ @DisplayName( "Test the parsing of the enabled debug command line option (short version)" )
+ public void testCmdlnOptionDebugEnabledShort() throws CommandLineArgsException
+ {
+ final String[] args = {
+ CMDLN_PREFIX_OPTION_SHORT + CmdLnOption.DEBUG.getShortOption(),
+ CMDLN_TEST_DEBUG_ON
+ };
+
+ CommandLineArgs cmdLn = new CommandLineArgs( args );
+
+ assertTrue( cmdLn.isDebugEnabled() );
+ }
+
+ @Test
+ @DisplayName( "Test the parsing of the enabled debug command line option (long version)" )
+ public void testCmdlnOptionDebugEnabledLong() throws CommandLineArgsException
+ {
+ final String[] args = {
+ CMDLN_PREFIX_OPTION_LONG + CmdLnOption.DEBUG.getLongOption(),
+ CMDLN_TEST_DEBUG_ON
+ };
+
+ CommandLineArgs cmdLn = new CommandLineArgs( args );
+
+ assertTrue( cmdLn.isDebugEnabled() );
+ }
+
+ @Test
+ @DisplayName( "Test the parsing of the disabled debug command line option (short version)" )
+ public void testCmdlnOptionDebugDisabledShort() throws CommandLineArgsException
+ {
+ final String[] argsDebugOff = {
+ CMDLN_PREFIX_OPTION_SHORT + CmdLnOption.DEBUG.getShortOption(),
+ CMDLN_TEST_DEBUG_OFF
+ };
+
+ final String[] argsDebugMissing = {};
+
+ CommandLineArgs cmdLnDebugOff = new CommandLineArgs( argsDebugOff );
+ CommandLineArgs cmdLnDebugMissing = new CommandLineArgs( argsDebugMissing );
+
+ assertFalse( cmdLnDebugOff.isDebugEnabled() );
+ assertFalse( cmdLnDebugMissing.isDebugEnabled() );
+ }
+
+ @Test
+ @DisplayName( "Test the parsing of the disabled debug command line option (long version)" )
+ public void testCmdlnOptionDebugDisabledLong() throws CommandLineArgsException
+ {
+ final String[] argsDebugOff = {
+ CMDLN_PREFIX_OPTION_LONG + CmdLnOption.DEBUG.getLongOption(),
+ CMDLN_TEST_DEBUG_OFF
+ };
+
+ final String[] argsDebugMissing = {};
+
+ CommandLineArgs cmdLnDebugOff = new CommandLineArgs( argsDebugOff );
+ CommandLineArgs cmdLnDebugMissing = new CommandLineArgs( argsDebugMissing );
+
+ assertFalse( cmdLnDebugOff.isDebugEnabled() );
+ assertFalse( cmdLnDebugMissing.isDebugEnabled() );
+ }
+
@Test
@DisplayName( "Test the parsing of the VM configuration input command line option (short version)" )
public void testCmdlnOptionVmCfgInpShort() throws CommandLineArgsException
--
cgit v1.2.3-55-g7522
From e5d46e620dfc988cf4f75296c10c6a56a0d41974 Mon Sep 17 00:00:00 2001
From: Manuel Bentele
Date: Tue, 18 May 2021 09:44:50 +0200
Subject: [qemu] Ignore generated Maven 'bin' directory
---
core/modules/qemu/runvirt-plugin-qemu/.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/core/modules/qemu/runvirt-plugin-qemu/.gitignore b/core/modules/qemu/runvirt-plugin-qemu/.gitignore
index 6090294a..9c74211c 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/.gitignore
+++ b/core/modules/qemu/runvirt-plugin-qemu/.gitignore
@@ -12,3 +12,4 @@
# Ignore IntelliJ Project Files
/.idea
*.iml
+/bin/
--
cgit v1.2.3-55-g7522
From 614cee5270daf3194eff9f254df2298aac030d14 Mon Sep 17 00:00:00 2001
From: Manuel Bentele
Date: Tue, 25 May 2021 09:07:35 +0200
Subject: [qemu] Add test dependency to reuse test resources from
master-sync-shared
---
core/modules/qemu/runvirt-plugin-qemu/pom.xml | 8 +
.../plugin/qemu/configuration/FilterTestUtils.java | 4 +-
.../libvirt/xml/qemu-kvm_capabilities_default.xml | 986 ---------------------
.../qemu-kvm_default-ubuntu-20-04-vm_filtered.xml | 162 ----
4 files changed, 11 insertions(+), 1149 deletions(-)
delete mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/resources/libvirt/xml/qemu-kvm_capabilities_default.xml
delete mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/resources/libvirt/xml/qemu-kvm_default-ubuntu-20-04-vm_filtered.xml
diff --git a/core/modules/qemu/runvirt-plugin-qemu/pom.xml b/core/modules/qemu/runvirt-plugin-qemu/pom.xml
index f02be96d..d8bb9743 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/pom.xml
+++ b/core/modules/qemu/runvirt-plugin-qemu/pom.xml
@@ -102,6 +102,14 @@
1.1-SNAPSHOT
compile
+
+ org.openslx.bwlp
+ master-sync-shared
+ 1.1-SNAPSHOT
+ tests
+ test-jar
+ test
+
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterTestUtils.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterTestUtils.java
index 45aa1109..a308693f 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterTestUtils.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterTestUtils.java
@@ -5,6 +5,7 @@ import static org.junit.jupiter.api.Assertions.fail;
import org.openslx.libvirt.domain.Domain;
import org.openslx.libvirt.xml.LibvirtXmlDocumentException;
import org.openslx.libvirt.xml.LibvirtXmlSerializationException;
+import org.openslx.libvirt.xml.LibvirtXmlTestResources;
import org.openslx.libvirt.xml.LibvirtXmlValidationException;
import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs.CmdLnOption;
@@ -101,7 +102,8 @@ public class FilterTestUtils
Domain domain = null;
try {
- domain = new Domain( FilterTestResources.getLibvirtXmlFile( "qemu-kvm_default-ubuntu-20-04-vm_filtered.xml" ) );
+ domain = new Domain( LibvirtXmlTestResources
+ .getLibvirtXmlStream( "qemu-kvm_default-ubuntu-20-04-vm_transform-non-persistent.xml" ) );
} catch ( LibvirtXmlDocumentException | LibvirtXmlSerializationException | LibvirtXmlValidationException e ) {
fail( "Cannot prepare requested Libvirt domain XML file from the resources folder: "
+ e.getLocalizedMessage() );
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/resources/libvirt/xml/qemu-kvm_capabilities_default.xml b/core/modules/qemu/runvirt-plugin-qemu/src/test/resources/libvirt/xml/qemu-kvm_capabilities_default.xml
deleted file mode 100644
index 4f2a94f2..00000000
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/resources/libvirt/xml/qemu-kvm_capabilities_default.xml
+++ /dev/null
@@ -1,986 +0,0 @@
-
-
-
- 9b2f12af-1fba-444c-b72b-9cbc43fb3ca5
-
- x86_64
- Skylake-Client-IBRS
- Intel
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- tcp
- rdma
-
-
-
-
-
- 16161320
- 4040330
- 0
- 0
-
-
-
-
-
-
-
-
-
- |
-
-
-
-
-
-
- none
- 0
-
-
-
-
- hvm
-
- 64
- /usr/bin/qemu-system-alpha
- clipper
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-arm
- integratorcp
- ast2600-evb
- borzoi
- spitz
- virt-2.7
- nuri
- mcimx7d-sabre
- romulus-bmc
- virt-3.0
- virt-5.0
- npcm750-evb
- virt-2.10
- musca-b1
- virt-2.8
- realview-pbx-a9
- versatileab
- kzm
- musca-a
- virt-3.1
- mcimx6ul-evk
- virt-5.1
- smdkc210
- sx1
- virt-2.11
- imx25-pdk
- virt-2.9
- orangepi-pc
- z2
- virt-5.2
- virt
- xilinx-zynq-a9
- tosa
- mps2-an500
- virt-2.12
- mps2-an521
- sabrelite
- mps2-an511
- canon-a1100
- realview-eb
- emcraft-sf2
- realview-pb-a8
- virt-4.0
- raspi1ap
- palmetto-bmc
- sx1-v1
- n810
- tacoma-bmc
- n800
- virt-4.1
- quanta-gsj
- versatilepb
- terrier
- mainstone
- realview-eb-mpcore
- supermicrox11-bmc
- virt-4.2
- witherspoon-bmc
- swift-bmc
- vexpress-a9
- midway
- musicpal
- lm3s811evb
- lm3s6965evb
- microbit
- mps2-an505
- mps2-an385
- cubieboard
- verdex
- netduino2
- mps2-an386
- raspi2b
- raspi2
- vexpress-a15
- sonorapass-bmc
- cheetah
- virt-2.6
- ast2500-evb
- highbank
- akita
- connex
- netduinoplus2
- collie
- raspi0
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-arm
- integratorcp
- ast2600-evb
- borzoi
- spitz
- virt-2.7
- nuri
- mcimx7d-sabre
- romulus-bmc
- virt-3.0
- virt-5.0
- npcm750-evb
- virt-2.10
- musca-b1
- virt-2.8
- realview-pbx-a9
- versatileab
- kzm
- musca-a
- virt-3.1
- mcimx6ul-evk
- virt-5.1
- smdkc210
- sx1
- virt-2.11
- imx25-pdk
- virt-2.9
- orangepi-pc
- z2
- virt-5.2
- virt
- xilinx-zynq-a9
- tosa
- mps2-an500
- virt-2.12
- mps2-an521
- sabrelite
- mps2-an511
- canon-a1100
- realview-eb
- emcraft-sf2
- realview-pb-a8
- virt-4.0
- raspi1ap
- palmetto-bmc
- sx1-v1
- n810
- tacoma-bmc
- n800
- virt-4.1
- quanta-gsj
- versatilepb
- terrier
- mainstone
- realview-eb-mpcore
- supermicrox11-bmc
- virt-4.2
- witherspoon-bmc
- swift-bmc
- vexpress-a9
- midway
- musicpal
- lm3s811evb
- lm3s6965evb
- microbit
- mps2-an505
- mps2-an385
- cubieboard
- verdex
- netduino2
- mps2-an386
- raspi2b
- raspi2
- vexpress-a15
- sonorapass-bmc
- cheetah
- virt-2.6
- ast2500-evb
- highbank
- akita
- connex
- netduinoplus2
- collie
- raspi0
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 64
- /usr/bin/qemu-system-aarch64
- integratorcp
- ast2600-evb
- borzoi
- spitz
- virt-2.7
- nuri
- mcimx7d-sabre
- romulus-bmc
- virt-3.0
- virt-5.0
- npcm750-evb
- virt-2.10
- musca-b1
- virt-2.8
- realview-pbx-a9
- versatileab
- kzm
- musca-a
- virt-3.1
- mcimx6ul-evk
- virt-5.1
- smdkc210
- sx1
- virt-2.11
- imx25-pdk
- virt-2.9
- orangepi-pc
- z2
- virt-5.2
- virt
- xilinx-zynq-a9
- xlnx-zcu102
- tosa
- mps2-an500
- virt-2.12
- mps2-an521
- sabrelite
- mps2-an511
- canon-a1100
- realview-eb
- emcraft-sf2
- realview-pb-a8
- sbsa-ref
- virt-4.0
- raspi1ap
- palmetto-bmc
- sx1-v1
- n810
- tacoma-bmc
- n800
- virt-4.1
- quanta-gsj
- versatilepb
- terrier
- mainstone
- realview-eb-mpcore
- supermicrox11-bmc
- virt-4.2
- witherspoon-bmc
- swift-bmc
- vexpress-a9
- midway
- musicpal
- lm3s811evb
- lm3s6965evb
- microbit
- mps2-an505
- mps2-an385
- raspi3ap
- cubieboard
- verdex
- netduino2
- xlnx-versal-virt
- mps2-an386
- raspi3b
- raspi3
- raspi2b
- raspi2
- vexpress-a15
- sonorapass-bmc
- cheetah
- virt-2.6
- ast2500-evb
- highbank
- akita
- connex
- netduinoplus2
- collie
- raspi0
-
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-cris
- axis-dev88
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-i386
- pc-i440fx-5.2
- pc
- pc-q35-5.2
- q35
- pc-i440fx-2.12
- pc-i440fx-2.0
- pc-q35-4.2
- pc-i440fx-2.5
- pc-i440fx-4.2
- pc-i440fx-1.5
- pc-q35-2.7
- pc-i440fx-2.2
- pc-1.1
- pc-i440fx-2.7
- pc-q35-2.4
- pc-q35-2.10
- pc-i440fx-1.7
- pc-q35-5.1
- pc-q35-2.9
- pc-i440fx-2.11
- pc-q35-3.1
- pc-q35-4.1
- pc-i440fx-2.4
- pc-1.3
- pc-i440fx-4.1
- pc-i440fx-5.1
- pc-i440fx-2.9
- isapc
- pc-i440fx-1.4
- pc-q35-2.6
- pc-i440fx-3.1
- pc-q35-2.12
- pc-i440fx-2.1
- pc-1.0
- pc-i440fx-2.6
- pc-q35-4.0.1
- pc-i440fx-1.6
- pc-q35-5.0
- pc-q35-2.8
- pc-i440fx-2.10
- pc-q35-3.0
- pc-q35-4.0
- microvm
- pc-i440fx-2.3
- pc-1.2
- pc-i440fx-4.0
- pc-i440fx-5.0
- pc-i440fx-2.8
- pc-q35-2.5
- pc-i440fx-3.0
- pc-q35-2.11
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-m68k
- mcf5208evb
- an5206
- q800
- next-cube
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-microblaze
- petalogix-s3adsp1800
- petalogix-ml605
- xlnx-zynqmp-pmu
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-microblazeel
- petalogix-s3adsp1800
- petalogix-ml605
- xlnx-zynqmp-pmu
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-mips
- malta
- mipssim
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-mipsel
- malta
- mipssim
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 64
- /usr/bin/qemu-system-mips64
- malta
- pica61
- mipssim
- magnum
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 64
- /usr/bin/qemu-system-mips64el
- malta
- mipssim
- pica61
- magnum
- boston
- fuloong2e
- fulong2e
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-ppc
- g3beige
- virtex-ml507
- mac99
- ppce500
- sam460ex
- bamboo
- 40p
- ref405ep
- mpc8544ds
- taihu
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 64
- /usr/bin/qemu-system-ppc64
- pseries-5.2
- pseries
- powernv9
- powernv
- taihu
- pseries-4.1
- mpc8544ds
- pseries-2.5
- powernv10
- pseries-4.2
- pseries-2.6
- ppce500
- pseries-2.7
- pseries-3.0
- pseries-5.0
- 40p
- pseries-2.8
- pseries-3.1
- pseries-5.1
- pseries-2.9
- bamboo
- g3beige
- pseries-2.12-sxxm
- pseries-2.10
- virtex-ml507
- pseries-2.11
- pseries-2.1
- pseries-2.12
- pseries-2.2
- mac99
- sam460ex
- ref405ep
- pseries-2.3
- powernv8
- pseries-4.0
- pseries-2.4
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 64
- /usr/bin/qemu-system-ppc64
- pseries-5.2
- pseries
- powernv9
- powernv
- taihu
- pseries-4.1
- mpc8544ds
- pseries-2.5
- powernv10
- pseries-4.2
- pseries-2.6
- ppce500
- pseries-2.7
- pseries-3.0
- pseries-5.0
- 40p
- pseries-2.8
- pseries-3.1
- pseries-5.1
- pseries-2.9
- bamboo
- g3beige
- pseries-2.12-sxxm
- pseries-2.10
- virtex-ml507
- pseries-2.11
- pseries-2.1
- pseries-2.12
- pseries-2.2
- mac99
- sam460ex
- ref405ep
- pseries-2.3
- powernv8
- pseries-4.0
- pseries-2.4
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-riscv32
- spike
- virt
- opentitan
- sifive_e
- sifive_u
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 64
- /usr/bin/qemu-system-riscv64
- spike
- virt
- sifive_e
- sifive_u
- microchip-icicle-kit
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 64
- /usr/bin/qemu-system-s390x
- s390-ccw-virtio-5.2
- s390-ccw-virtio
- s390-ccw-virtio-4.0
- s390-ccw-virtio-3.1
- s390-ccw-virtio-2.6
- s390-ccw-virtio-2.12
- s390-ccw-virtio-2.9
- s390-ccw-virtio-5.1
- s390-ccw-virtio-3.0
- s390-ccw-virtio-4.2
- s390-ccw-virtio-2.5
- s390-ccw-virtio-2.11
- s390-ccw-virtio-2.8
- s390-ccw-virtio-5.0
- s390-ccw-virtio-4.1
- s390-ccw-virtio-2.4
- s390-ccw-virtio-2.10
- s390-ccw-virtio-2.7
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-sh4
- shix
- r2d
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 64
- /usr/bin/qemu-system-sh4eb
- shix
- r2d
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-sparc
- SS-5
- SS-20
- LX
- SPARCClassic
- leon3_generic
- SPARCbook
- SS-4
- SS-600MP
- SS-10
- Voyager
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 64
- /usr/bin/qemu-system-sparc64
- sun4u
- niagara
- sun4v
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 64
- /usr/bin/qemu-system-x86_64
- pc-i440fx-5.2
- pc
- pc-q35-5.2
- q35
- pc-i440fx-2.12
- pc-i440fx-2.0
- pc-q35-4.2
- pc-i440fx-2.5
- pc-i440fx-4.2
- pc-i440fx-1.5
- pc-q35-2.7
- pc-i440fx-2.2
- pc-1.1
- pc-i440fx-2.7
- pc-q35-2.4
- pc-q35-2.10
- pc-i440fx-1.7
- pc-q35-5.1
- pc-q35-2.9
- pc-i440fx-2.11
- pc-q35-3.1
- pc-q35-4.1
- pc-i440fx-2.4
- pc-1.3
- pc-i440fx-4.1
- pc-i440fx-5.1
- pc-i440fx-2.9
- isapc
- pc-i440fx-1.4
- pc-q35-2.6
- pc-i440fx-3.1
- pc-q35-2.12
- pc-i440fx-2.1
- pc-1.0
- pc-i440fx-2.6
- pc-q35-4.0.1
- pc-i440fx-1.6
- pc-q35-5.0
- pc-q35-2.8
- pc-i440fx-2.10
- pc-q35-3.0
- pc-q35-4.0
- microvm
- pc-i440fx-2.3
- pc-1.2
- pc-i440fx-4.0
- pc-i440fx-5.0
- pc-i440fx-2.8
- pc-q35-2.5
- pc-i440fx-3.0
- pc-q35-2.11
-
-
-
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-xtensa
- sim
- kc705
- ml605
- ml605-nommu
- virt
- lx60-nommu
- lx200
- lx200-nommu
- lx60
- kc705-nommu
-
-
-
-
-
-
-
-
-
-
- hvm
-
- 32
- /usr/bin/qemu-system-xtensaeb
- sim
- kc705
- ml605
- ml605-nommu
- virt
- lx60-nommu
- lx200
- lx200-nommu
- lx60
- kc705-nommu
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/resources/libvirt/xml/qemu-kvm_default-ubuntu-20-04-vm_filtered.xml b/core/modules/qemu/runvirt-plugin-qemu/src/test/resources/libvirt/xml/qemu-kvm_default-ubuntu-20-04-vm_filtered.xml
deleted file mode 100644
index 08b9ac71..00000000
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/resources/libvirt/xml/qemu-kvm_default-ubuntu-20-04-vm_filtered.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-
- ubuntu-20-04
- 8dc5433c-0228-49e4-b019-fa2b606aa544
- Ubuntu 20.04
- Ubuntu 20.04 desktop installation
-
-
-
-
-
- 4194304
- 4194304
- 2
-
- hvm
-
-
-
-
-
-
-
-
-
-
-
-
- destroy
- restart
- destroy
-
-
-
-
-
- /usr/bin/qemu-system-x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- /dev/urandom
-
-
-
-
-
--
cgit v1.2.3-55-g7522
From 2af60cedcd0daa393791f550aaf767d4f7e8edc3 Mon Sep 17 00:00:00 2001
From: Manuel Bentele
Date: Tue, 25 May 2021 09:12:06 +0200
Subject: [qemu] Rename test classes to match naming convention of
'transformation'
---
.../qemu/configuration/FilterGenericCpuTest.java | 34 ------
.../FilterGenericDiskStorageDevicesTest.java | 61 -----------
.../configuration/FilterGenericMemoryTest.java | 35 -------
.../qemu/configuration/FilterGenericNameTest.java | 30 ------
.../qemu/configuration/FilterGenericUuidTest.java | 28 -----
.../qemu/configuration/FilterTestResources.java | 17 ---
.../plugin/qemu/configuration/FilterTestUtils.java | 114 ---------------------
.../TransformationGenericCpuTest.java | 34 ++++++
...ransformationGenericDiskStorageDevicesTest.java | 55 ++++++++++
.../TransformationGenericMemoryTest.java | 35 +++++++
.../TransformationGenericNameTest.java | 30 ++++++
.../TransformationGenericUuidTest.java | 28 +++++
.../configuration/TransformationTestResources.java | 17 +++
.../configuration/TransformationTestUtils.java | 114 +++++++++++++++++++++
14 files changed, 313 insertions(+), 319 deletions(-)
delete mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericCpuTest.java
delete mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericDiskStorageDevicesTest.java
delete mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericMemoryTest.java
delete mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericNameTest.java
delete mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericUuidTest.java
delete mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterTestResources.java
delete mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterTestUtils.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpuTest.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemoryTest.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericNameTest.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuidTest.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationTestResources.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationTestUtils.java
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericCpuTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericCpuTest.java
deleted file mode 100644
index 560d4b7c..00000000
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericCpuTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package org.openslx.runvirt.plugin.qemu.configuration;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.openslx.libvirt.domain.Domain;
-import org.openslx.libvirt.domain.Domain.CpuCheck;
-import org.openslx.libvirt.domain.Domain.CpuMode;
-import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
-import org.openslx.virtualization.configuration.transformation.TransformationException;
-
-public class FilterGenericCpuTest
-{
- @Test
- @DisplayName( "Test filtering of VM CPU configuration" )
- public void testFilterGenericCpu() throws TransformationException
- {
- final TransformationGenericCpu filter = new TransformationGenericCpu();
- final Domain config = FilterTestUtils.getDefaultDomain();
- final CommandLineArgs args = FilterTestUtils.getDefaultCmdLnArgs();
-
- assertNotEquals( Integer.parseInt( FilterTestUtils.DEFAULT_VM_NCPUS ), config.getVCpu() );
- assertNotEquals( CpuMode.HOST_PASSTHROUGH, config.getCpuMode() );
- assertEquals( CpuCheck.PARTIAL, config.getCpuCheck() );
-
- filter.transform( config, args );
-
- assertEquals( Integer.parseInt( FilterTestUtils.DEFAULT_VM_NCPUS ), config.getVCpu() );
- assertEquals( CpuMode.HOST_PASSTHROUGH, config.getCpuMode() );
- assertEquals( CpuCheck.PARTIAL, config.getCpuCheck() );
- }
-}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericDiskStorageDevicesTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericDiskStorageDevicesTest.java
deleted file mode 100644
index 5dd9e4cc..00000000
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericDiskStorageDevicesTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.openslx.runvirt.plugin.qemu.configuration;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-
-import java.util.ArrayList;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.openslx.libvirt.domain.Domain;
-import org.openslx.libvirt.domain.device.Disk.StorageType;
-import org.openslx.libvirt.domain.device.DiskStorage;
-import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
-import org.openslx.virtualization.configuration.transformation.TransformationException;
-
-public class FilterGenericDiskStorageDevicesTest
-{
- @Test
- @DisplayName( "Test filtering of VM disk storage devices configuration with specified input data" )
- public void testFilterGenericDiskStorageDevices() throws TransformationException
- {
- final TransformationGenericDiskStorageDevices filter = new TransformationGenericDiskStorageDevices();
- final Domain config = FilterTestUtils.getDefaultDomain();
- final CommandLineArgs args = FilterTestUtils.getDefaultCmdLnArgs();
-
- final ArrayList devicesBeforeFiltering = config.getDiskStorageDevices();
- assertEquals( 1, devicesBeforeFiltering.size() );
- assertNotEquals( StorageType.FILE, devicesBeforeFiltering.get( 0 ).getStorageType() );
- assertNotEquals( FilterTestUtils.DEFAULT_VM_HDD0, devicesBeforeFiltering.get( 0 ).getStorageSource() );
-
- filter.transform( config, args );
-
- final ArrayList devicesAfterFiltering = config.getDiskStorageDevices();
- assertEquals( 1, devicesAfterFiltering.size() );
- assertEquals( StorageType.FILE, devicesAfterFiltering.get( 0 ).getStorageType() );
- assertEquals( FilterTestUtils.DEFAULT_VM_HDD0, devicesAfterFiltering.get( 0 ).getStorageSource() );
- }
-
- @Test
- @DisplayName( "Test filtering of VM disk storage devices configuration with unspecified input data" )
- public void testFilterGenericDiskStorageDevicesNoData() throws TransformationException
- {
- final TransformationGenericDiskStorageDevices filter = new TransformationGenericDiskStorageDevices();
- final Domain config = FilterTestUtils.getDefaultDomain();
- final CommandLineArgs args = FilterTestUtils.getEmptyCmdLnArgs();
-
- final ArrayList devicesBeforeFiltering = config.getDiskStorageDevices();
- assertEquals( 1, devicesBeforeFiltering.size() );
-
- filter.transform( config, args );
-
- final ArrayList devicesAfterFiltering = config.getDiskStorageDevices();
- assertEquals( 0, devicesAfterFiltering.size() );
- }
-
- public static void main( String[] args ) throws TransformationException
- {
- FilterGenericDiskStorageDevicesTest test = new FilterGenericDiskStorageDevicesTest();
- test.testFilterGenericDiskStorageDevicesNoData();
- }
-}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericMemoryTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericMemoryTest.java
deleted file mode 100644
index 2bbda865..00000000
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericMemoryTest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.openslx.runvirt.plugin.qemu.configuration;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-
-import java.math.BigInteger;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.openslx.libvirt.domain.Domain;
-import org.openslx.libvirt.domain.DomainUtils;
-import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
-import org.openslx.virtualization.configuration.transformation.TransformationException;
-
-public class FilterGenericMemoryTest
-{
- @Test
- @DisplayName( "Test filtering of VM memory configuration" )
- public void testFilterGenericMemory() throws TransformationException
- {
- final TransformationGenericMemory filter = new TransformationGenericMemory();
- final Domain config = FilterTestUtils.getDefaultDomain();
- final CommandLineArgs args = FilterTestUtils.getDefaultCmdLnArgs();
-
- final BigInteger defaultMemory = DomainUtils.decodeMemory( FilterTestUtils.DEFAULT_VM_MEM, "MiB" );
-
- assertNotEquals( defaultMemory.toString(), config.getMemory().toString() );
- assertNotEquals( defaultMemory.toString(), config.getCurrentMemory().toString() );
-
- filter.transform( config, args );
-
- assertEquals( defaultMemory.toString(), config.getMemory().toString() );
- assertEquals( defaultMemory.toString(), config.getCurrentMemory().toString() );
- }
-}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericNameTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericNameTest.java
deleted file mode 100644
index 188a13fa..00000000
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericNameTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.openslx.runvirt.plugin.qemu.configuration;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.openslx.libvirt.domain.Domain;
-import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
-import org.openslx.virtualization.configuration.transformation.TransformationException;
-
-public class FilterGenericNameTest
-{
- @Test
- @DisplayName( "Test filtering of VM (display) name configuration" )
- public void testFilterGenericName() throws TransformationException
- {
- final TransformationGenericName filter = new TransformationGenericName();
- final Domain config = FilterTestUtils.getDefaultDomain();
- final CommandLineArgs args = FilterTestUtils.getDefaultCmdLnArgs();
-
- assertNotEquals( FilterTestUtils.DEFAULT_VM_NAME, config.getName() );
- assertNotEquals( FilterTestUtils.DEFAULT_VM_DSPLNAME, config.getTitle() );
-
- filter.transform( config, args );
-
- assertEquals( FilterTestUtils.DEFAULT_VM_NAME, config.getName() );
- assertEquals( FilterTestUtils.DEFAULT_VM_DSPLNAME, config.getTitle() );
- }
-}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericUuidTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericUuidTest.java
deleted file mode 100644
index e15c1856..00000000
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterGenericUuidTest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.openslx.runvirt.plugin.qemu.configuration;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.openslx.libvirt.domain.Domain;
-import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
-import org.openslx.virtualization.configuration.transformation.TransformationException;
-
-public class FilterGenericUuidTest
-{
- @Test
- @DisplayName( "Test filtering of VM UUID configuration" )
- public void testFilterGenericUuid() throws TransformationException
- {
- final TransformationGenericUuid filter = new TransformationGenericUuid();
- final Domain config = FilterTestUtils.getDefaultDomain();
- final CommandLineArgs args = FilterTestUtils.getDefaultCmdLnArgs();
-
- assertNotEquals( FilterTestUtils.DEFAULT_VM_UUID, config.getUuid() );
-
- filter.transform( config, args );
-
- assertEquals( FilterTestUtils.DEFAULT_VM_UUID, config.getUuid() );
- }
-}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterTestResources.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterTestResources.java
deleted file mode 100644
index 80fa2636..00000000
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterTestResources.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.openslx.runvirt.plugin.qemu.configuration;
-
-import java.io.File;
-import java.net.URL;
-
-public class FilterTestResources
-{
- private static final String LIBVIRT_PREFIX_PATH = File.separator + "libvirt";
- private static final String LIBVIRT_PREFIX_PATH_XML = LIBVIRT_PREFIX_PATH + File.separator + "xml";
-
- public static File getLibvirtXmlFile( String libvirtXmlFileName )
- {
- String libvirtXmlPath = FilterTestResources.LIBVIRT_PREFIX_PATH_XML + File.separator + libvirtXmlFileName;
- URL libvirtXml = FilterTestResources.class.getResource( libvirtXmlPath );
- return new File( libvirtXml.getFile() );
- }
-}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterTestUtils.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterTestUtils.java
deleted file mode 100644
index a308693f..00000000
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/FilterTestUtils.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package org.openslx.runvirt.plugin.qemu.configuration;
-
-import static org.junit.jupiter.api.Assertions.fail;
-
-import org.openslx.libvirt.domain.Domain;
-import org.openslx.libvirt.xml.LibvirtXmlDocumentException;
-import org.openslx.libvirt.xml.LibvirtXmlSerializationException;
-import org.openslx.libvirt.xml.LibvirtXmlTestResources;
-import org.openslx.libvirt.xml.LibvirtXmlValidationException;
-import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
-import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs.CmdLnOption;
-import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgsException;
-import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgsTest;
-
-public class FilterTestUtils
-{
- // @formatter:off
- public static final String DEFAULT_VM_NAME = "archlinux";
- public static final String DEFAULT_VM_UUID = "4ec504d5-5eac-482f-a344-dbf1dd4956c8";
- public static final String DEFAULT_VM_DSPLNAME = "Archlinux";
- public static final String DEFAULT_VM_OS = "Windows 10 (x64)";
- public static final String DEFAULT_VM_NCPUS = "16";
- public static final String DEFAULT_VM_MEM = "1024";
- public static final String DEFAULT_VM_HDD0 = "/mnt/vm/windows.qcow2";
- public static final String DEFAULT_VM_FLOPPY0 = "/mnt/vm/floppy0.qcow2";
- public static final String DEFAULT_VM_FLOPPY1 = "/mnt/vm/floppy1.qcow2";
- public static final String DEFAULT_VM_CDROM0 = "/dev/sr0";
- public static final String DEFAULT_VM_CDROM1 = "/mnt/vm/cdrom1.qcow2";
- public static final String DEFAULT_VM_PARALLEL0 = "/dev/parport0";
- public static final String DEFAULT_VM_SERIAL0 = "/dev/ttyS0";
- public static final String DEFAULT_VM_MAC0 = "ca:06:29:84:f0:6d";
- public static final String DEFAULT_VM_FSSRC0 = "/mnt/shared/folder0";
- public static final String DEFAULT_VM_FSTGT0 = "folder0";
- public static final String DEFAULT_VM_FSSRC1 = "/mnt/shared/folder1";
- public static final String DEFAULT_VM_FSTGT1 = "folder1";
- // @formatter:on
-
- private static final String[] DEFAULT_CMDLN_ARGS = {
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_NAME.getLongOption(),
- FilterTestUtils.DEFAULT_VM_NAME,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_UUID.getLongOption(),
- FilterTestUtils.DEFAULT_VM_UUID,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_DSPLNAME.getLongOption(),
- FilterTestUtils.DEFAULT_VM_DSPLNAME,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_OS.getLongOption(),
- FilterTestUtils.DEFAULT_VM_OS,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_NCPUS.getLongOption(),
- FilterTestUtils.DEFAULT_VM_NCPUS,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_MEM.getLongOption(),
- FilterTestUtils.DEFAULT_VM_MEM,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_HDD0.getLongOption(),
- FilterTestUtils.DEFAULT_VM_HDD0,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_FLOPPY0.getLongOption(),
- FilterTestUtils.DEFAULT_VM_FLOPPY0,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_FLOPPY1.getLongOption(),
- FilterTestUtils.DEFAULT_VM_FLOPPY1,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_CDROM0.getLongOption(),
- FilterTestUtils.DEFAULT_VM_CDROM0,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_CDROM1.getLongOption(),
- FilterTestUtils.DEFAULT_VM_CDROM1,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_PARALLEL0.getLongOption(),
- FilterTestUtils.DEFAULT_VM_PARALLEL0,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_SERIAL0.getLongOption(),
- FilterTestUtils.DEFAULT_VM_SERIAL0,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_MAC0.getLongOption(),
- FilterTestUtils.DEFAULT_VM_MAC0,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_FSSRC0.getLongOption(),
- FilterTestUtils.DEFAULT_VM_FSSRC0,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_FSTGT0.getLongOption(),
- FilterTestUtils.DEFAULT_VM_FSTGT0,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_FSSRC1.getLongOption(),
- FilterTestUtils.DEFAULT_VM_FSSRC1,
- CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_FSTGT1.getLongOption(),
- FilterTestUtils.DEFAULT_VM_FSTGT1
- };
-
- private static CommandLineArgs getCmdLnArgs( String[] args )
- {
- final CommandLineArgs cmdLnArgs = new CommandLineArgs();
-
- try {
- cmdLnArgs.parseCmdLnArgs( args );
- } catch ( CommandLineArgsException e ) {
- fail( e.getLocalizedMessage() );
- }
-
- return cmdLnArgs;
- }
-
- public static CommandLineArgs getDefaultCmdLnArgs()
- {
- return FilterTestUtils.getCmdLnArgs( FilterTestUtils.DEFAULT_CMDLN_ARGS );
- }
-
- public static CommandLineArgs getEmptyCmdLnArgs()
- {
- return FilterTestUtils.getCmdLnArgs( new String[] {} );
- }
-
- public static Domain getDefaultDomain()
- {
- Domain domain = null;
-
- try {
- domain = new Domain( LibvirtXmlTestResources
- .getLibvirtXmlStream( "qemu-kvm_default-ubuntu-20-04-vm_transform-non-persistent.xml" ) );
- } catch ( LibvirtXmlDocumentException | LibvirtXmlSerializationException | LibvirtXmlValidationException e ) {
- fail( "Cannot prepare requested Libvirt domain XML file from the resources folder: "
- + e.getLocalizedMessage() );
- }
-
- return domain;
- }
-}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpuTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpuTest.java
new file mode 100644
index 00000000..9553db08
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpuTest.java
@@ -0,0 +1,34 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.Domain.CpuCheck;
+import org.openslx.libvirt.domain.Domain.CpuMode;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+
+public class TransformationGenericCpuTest
+{
+ @Test
+ @DisplayName( "Test filtering of VM CPU configuration" )
+ public void testFilterGenericCpu() throws TransformationException
+ {
+ final TransformationGenericCpu filter = new TransformationGenericCpu();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
+
+ assertNotEquals( Integer.parseInt( TransformationTestUtils.DEFAULT_VM_NCPUS ), config.getVCpu() );
+ assertNotEquals( CpuMode.HOST_PASSTHROUGH, config.getCpuMode() );
+ assertEquals( CpuCheck.PARTIAL, config.getCpuCheck() );
+
+ filter.transform( config, args );
+
+ assertEquals( Integer.parseInt( TransformationTestUtils.DEFAULT_VM_NCPUS ), config.getVCpu() );
+ assertEquals( CpuMode.HOST_PASSTHROUGH, config.getCpuMode() );
+ assertEquals( CpuCheck.PARTIAL, config.getCpuCheck() );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java
new file mode 100644
index 00000000..20fd2fb6
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java
@@ -0,0 +1,55 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import java.util.ArrayList;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.device.Disk.StorageType;
+import org.openslx.libvirt.domain.device.DiskStorage;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+
+public class TransformationGenericDiskStorageDevicesTest
+{
+ @Test
+ @DisplayName( "Test filtering of VM disk storage devices configuration with specified input data" )
+ public void testFilterGenericDiskStorageDevices() throws TransformationException
+ {
+ final TransformationGenericDiskStorageDevices filter = new TransformationGenericDiskStorageDevices();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
+
+ final ArrayList devicesBeforeFiltering = config.getDiskStorageDevices();
+ assertEquals( 1, devicesBeforeFiltering.size() );
+ assertNotEquals( StorageType.FILE, devicesBeforeFiltering.get( 0 ).getStorageType() );
+ assertNotEquals( TransformationTestUtils.DEFAULT_VM_HDD0, devicesBeforeFiltering.get( 0 ).getStorageSource() );
+
+ filter.transform( config, args );
+
+ final ArrayList devicesAfterFiltering = config.getDiskStorageDevices();
+ assertEquals( 1, devicesAfterFiltering.size() );
+ assertEquals( StorageType.FILE, devicesAfterFiltering.get( 0 ).getStorageType() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_HDD0, devicesAfterFiltering.get( 0 ).getStorageSource() );
+ }
+
+ @Test
+ @DisplayName( "Test filtering of VM disk storage devices configuration with unspecified input data" )
+ public void testFilterGenericDiskStorageDevicesNoData() throws TransformationException
+ {
+ final TransformationGenericDiskStorageDevices filter = new TransformationGenericDiskStorageDevices();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getEmptyCmdLnArgs();
+
+ final ArrayList devicesBeforeFiltering = config.getDiskStorageDevices();
+ assertEquals( 1, devicesBeforeFiltering.size() );
+
+ filter.transform( config, args );
+
+ final ArrayList devicesAfterFiltering = config.getDiskStorageDevices();
+ assertEquals( 0, devicesAfterFiltering.size() );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemoryTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemoryTest.java
new file mode 100644
index 00000000..9ef1f1d2
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemoryTest.java
@@ -0,0 +1,35 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import java.math.BigInteger;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.DomainUtils;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+
+public class TransformationGenericMemoryTest
+{
+ @Test
+ @DisplayName( "Test filtering of VM memory configuration" )
+ public void testFilterGenericMemory() throws TransformationException
+ {
+ final TransformationGenericMemory filter = new TransformationGenericMemory();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
+
+ final BigInteger defaultMemory = DomainUtils.decodeMemory( TransformationTestUtils.DEFAULT_VM_MEM, "MiB" );
+
+ assertNotEquals( defaultMemory.toString(), config.getMemory().toString() );
+ assertNotEquals( defaultMemory.toString(), config.getCurrentMemory().toString() );
+
+ filter.transform( config, args );
+
+ assertEquals( defaultMemory.toString(), config.getMemory().toString() );
+ assertEquals( defaultMemory.toString(), config.getCurrentMemory().toString() );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericNameTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericNameTest.java
new file mode 100644
index 00000000..f85af001
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericNameTest.java
@@ -0,0 +1,30 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+
+public class TransformationGenericNameTest
+{
+ @Test
+ @DisplayName( "Test filtering of VM (display) name configuration" )
+ public void testFilterGenericName() throws TransformationException
+ {
+ final TransformationGenericName filter = new TransformationGenericName();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
+
+ assertNotEquals( TransformationTestUtils.DEFAULT_VM_NAME, config.getName() );
+ assertNotEquals( TransformationTestUtils.DEFAULT_VM_DSPLNAME, config.getTitle() );
+
+ filter.transform( config, args );
+
+ assertEquals( TransformationTestUtils.DEFAULT_VM_NAME, config.getName() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_DSPLNAME, config.getTitle() );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuidTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuidTest.java
new file mode 100644
index 00000000..8b2dc69b
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuidTest.java
@@ -0,0 +1,28 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+
+public class TransformationGenericUuidTest
+{
+ @Test
+ @DisplayName( "Test filtering of VM UUID configuration" )
+ public void testFilterGenericUuid() throws TransformationException
+ {
+ final TransformationGenericUuid filter = new TransformationGenericUuid();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
+
+ assertNotEquals( TransformationTestUtils.DEFAULT_VM_UUID, config.getUuid() );
+
+ filter.transform( config, args );
+
+ assertEquals( TransformationTestUtils.DEFAULT_VM_UUID, config.getUuid() );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationTestResources.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationTestResources.java
new file mode 100644
index 00000000..b04685f9
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationTestResources.java
@@ -0,0 +1,17 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import java.io.File;
+import java.net.URL;
+
+public class TransformationTestResources
+{
+ private static final String LIBVIRT_PREFIX_PATH = File.separator + "libvirt";
+ private static final String LIBVIRT_PREFIX_PATH_XML = LIBVIRT_PREFIX_PATH + File.separator + "xml";
+
+ public static File getLibvirtXmlFile( String libvirtXmlFileName )
+ {
+ String libvirtXmlPath = TransformationTestResources.LIBVIRT_PREFIX_PATH_XML + File.separator + libvirtXmlFileName;
+ URL libvirtXml = TransformationTestResources.class.getResource( libvirtXmlPath );
+ return new File( libvirtXml.getFile() );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationTestUtils.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationTestUtils.java
new file mode 100644
index 00000000..132c6ba3
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationTestUtils.java
@@ -0,0 +1,114 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.fail;
+
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.xml.LibvirtXmlDocumentException;
+import org.openslx.libvirt.xml.LibvirtXmlSerializationException;
+import org.openslx.libvirt.xml.LibvirtXmlTestResources;
+import org.openslx.libvirt.xml.LibvirtXmlValidationException;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs.CmdLnOption;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgsException;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgsTest;
+
+public class TransformationTestUtils
+{
+ // @formatter:off
+ public static final String DEFAULT_VM_NAME = "archlinux";
+ public static final String DEFAULT_VM_UUID = "4ec504d5-5eac-482f-a344-dbf1dd4956c8";
+ public static final String DEFAULT_VM_DSPLNAME = "Archlinux";
+ public static final String DEFAULT_VM_OS = "Windows 10 (x64)";
+ public static final String DEFAULT_VM_NCPUS = "16";
+ public static final String DEFAULT_VM_MEM = "1024";
+ public static final String DEFAULT_VM_HDD0 = "/mnt/vm/windows.qcow2";
+ public static final String DEFAULT_VM_FLOPPY0 = "/mnt/vm/floppy0.qcow2";
+ public static final String DEFAULT_VM_FLOPPY1 = "/mnt/vm/floppy1.qcow2";
+ public static final String DEFAULT_VM_CDROM0 = "/dev/sr0";
+ public static final String DEFAULT_VM_CDROM1 = "/mnt/vm/cdrom1.qcow2";
+ public static final String DEFAULT_VM_PARALLEL0 = "/dev/parport0";
+ public static final String DEFAULT_VM_SERIAL0 = "/dev/ttyS0";
+ public static final String DEFAULT_VM_MAC0 = "ca:06:29:84:f0:6d";
+ public static final String DEFAULT_VM_FSSRC0 = "/mnt/shared/folder0";
+ public static final String DEFAULT_VM_FSTGT0 = "folder0";
+ public static final String DEFAULT_VM_FSSRC1 = "/mnt/shared/folder1";
+ public static final String DEFAULT_VM_FSTGT1 = "folder1";
+ // @formatter:on
+
+ private static final String[] DEFAULT_CMDLN_ARGS = {
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_NAME.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_NAME,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_UUID.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_UUID,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_DSPLNAME.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_DSPLNAME,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_OS.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_OS,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_NCPUS.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_NCPUS,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_MEM.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_MEM,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_HDD0.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_HDD0,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_FLOPPY0.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_FLOPPY0,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_FLOPPY1.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_FLOPPY1,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_CDROM0.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_CDROM0,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_CDROM1.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_CDROM1,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_PARALLEL0.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_PARALLEL0,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_SERIAL0.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_SERIAL0,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_MAC0.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_MAC0,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_FSSRC0.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_FSSRC0,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_FSTGT0.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_FSTGT0,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_FSSRC1.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_FSSRC1,
+ CommandLineArgsTest.CMDLN_PREFIX_OPTION_LONG + CmdLnOption.VM_FSTGT1.getLongOption(),
+ TransformationTestUtils.DEFAULT_VM_FSTGT1
+ };
+
+ private static CommandLineArgs getCmdLnArgs( String[] args )
+ {
+ final CommandLineArgs cmdLnArgs = new CommandLineArgs();
+
+ try {
+ cmdLnArgs.parseCmdLnArgs( args );
+ } catch ( CommandLineArgsException e ) {
+ fail( e.getLocalizedMessage() );
+ }
+
+ return cmdLnArgs;
+ }
+
+ public static CommandLineArgs getDefaultCmdLnArgs()
+ {
+ return TransformationTestUtils.getCmdLnArgs( TransformationTestUtils.DEFAULT_CMDLN_ARGS );
+ }
+
+ public static CommandLineArgs getEmptyCmdLnArgs()
+ {
+ return TransformationTestUtils.getCmdLnArgs( new String[] {} );
+ }
+
+ public static Domain getDefaultDomain()
+ {
+ Domain domain = null;
+
+ try {
+ domain = new Domain( LibvirtXmlTestResources
+ .getLibvirtXmlStream( "qemu-kvm_default-ubuntu-20-04-vm_transform-non-persistent.xml" ) );
+ } catch ( LibvirtXmlDocumentException | LibvirtXmlSerializationException | LibvirtXmlValidationException e ) {
+ fail( "Cannot prepare requested Libvirt domain XML file from the resources folder: "
+ + e.getLocalizedMessage() );
+ }
+
+ return domain;
+ }
+}
--
cgit v1.2.3-55-g7522
From bfe1288a15560d6a64a53d372cde5854c97819b3 Mon Sep 17 00:00:00 2001
From: Manuel Bentele
Date: Tue, 25 May 2021 09:41:55 +0200
Subject: [qemu] Rename term 'filter' in test classes to match 'transformation'
---
.../TransformationGenericCpuTest.java | 8 ++---
...ransformationGenericDiskStorageDevicesTest.java | 42 +++++++++++-----------
.../TransformationGenericMemoryTest.java | 8 ++---
.../TransformationGenericNameTest.java | 8 ++---
.../TransformationGenericUuidTest.java | 8 ++---
5 files changed, 38 insertions(+), 36 deletions(-)
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpuTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpuTest.java
index 9553db08..260adcc1 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpuTest.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpuTest.java
@@ -14,10 +14,10 @@ import org.openslx.virtualization.configuration.transformation.TransformationExc
public class TransformationGenericCpuTest
{
@Test
- @DisplayName( "Test filtering of VM CPU configuration" )
- public void testFilterGenericCpu() throws TransformationException
+ @DisplayName( "Test transformation of VM CPU configuration" )
+ public void testTransformationGenericCpu() throws TransformationException
{
- final TransformationGenericCpu filter = new TransformationGenericCpu();
+ final TransformationGenericCpu transformation = new TransformationGenericCpu();
final Domain config = TransformationTestUtils.getDefaultDomain();
final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
@@ -25,7 +25,7 @@ public class TransformationGenericCpuTest
assertNotEquals( CpuMode.HOST_PASSTHROUGH, config.getCpuMode() );
assertEquals( CpuCheck.PARTIAL, config.getCpuCheck() );
- filter.transform( config, args );
+ transformation.transform( config, args );
assertEquals( Integer.parseInt( TransformationTestUtils.DEFAULT_VM_NCPUS ), config.getVCpu() );
assertEquals( CpuMode.HOST_PASSTHROUGH, config.getCpuMode() );
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java
index 20fd2fb6..f7ba6f07 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevicesTest.java
@@ -16,40 +16,42 @@ import org.openslx.virtualization.configuration.transformation.TransformationExc
public class TransformationGenericDiskStorageDevicesTest
{
@Test
- @DisplayName( "Test filtering of VM disk storage devices configuration with specified input data" )
- public void testFilterGenericDiskStorageDevices() throws TransformationException
+ @DisplayName( "Test transformation of VM disk storage devices configuration with specified input data" )
+ public void testTransformationGenericDiskStorageDevices() throws TransformationException
{
- final TransformationGenericDiskStorageDevices filter = new TransformationGenericDiskStorageDevices();
+ final TransformationGenericDiskStorageDevices transformation = new TransformationGenericDiskStorageDevices();
final Domain config = TransformationTestUtils.getDefaultDomain();
final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
- final ArrayList devicesBeforeFiltering = config.getDiskStorageDevices();
- assertEquals( 1, devicesBeforeFiltering.size() );
- assertNotEquals( StorageType.FILE, devicesBeforeFiltering.get( 0 ).getStorageType() );
- assertNotEquals( TransformationTestUtils.DEFAULT_VM_HDD0, devicesBeforeFiltering.get( 0 ).getStorageSource() );
+ final ArrayList devicesBeforeTransformation = config.getDiskStorageDevices();
+ assertEquals( 1, devicesBeforeTransformation.size() );
+ final DiskStorage diskDeviceBeforeTransformation = devicesBeforeTransformation.get( 0 );
+ assertNotEquals( StorageType.FILE, diskDeviceBeforeTransformation.getStorageType() );
+ assertNotEquals( TransformationTestUtils.DEFAULT_VM_HDD0, diskDeviceBeforeTransformation.getStorageSource() );
- filter.transform( config, args );
+ transformation.transform( config, args );
- final ArrayList devicesAfterFiltering = config.getDiskStorageDevices();
- assertEquals( 1, devicesAfterFiltering.size() );
- assertEquals( StorageType.FILE, devicesAfterFiltering.get( 0 ).getStorageType() );
- assertEquals( TransformationTestUtils.DEFAULT_VM_HDD0, devicesAfterFiltering.get( 0 ).getStorageSource() );
+ final ArrayList devicesAfterTransformation = config.getDiskStorageDevices();
+ assertEquals( 1, devicesAfterTransformation.size() );
+ final DiskStorage diskDeviceAfterTransformation = devicesAfterTransformation.get( 0 );
+ assertEquals( StorageType.FILE, diskDeviceAfterTransformation.getStorageType() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_HDD0, diskDeviceAfterTransformation.getStorageSource() );
}
@Test
- @DisplayName( "Test filtering of VM disk storage devices configuration with unspecified input data" )
- public void testFilterGenericDiskStorageDevicesNoData() throws TransformationException
+ @DisplayName( "Test transformation of VM disk storage devices configuration with unspecified input data" )
+ public void testTransformationGenericDiskStorageDevicesNoData() throws TransformationException
{
- final TransformationGenericDiskStorageDevices filter = new TransformationGenericDiskStorageDevices();
+ final TransformationGenericDiskStorageDevices transformation = new TransformationGenericDiskStorageDevices();
final Domain config = TransformationTestUtils.getDefaultDomain();
final CommandLineArgs args = TransformationTestUtils.getEmptyCmdLnArgs();
- final ArrayList devicesBeforeFiltering = config.getDiskStorageDevices();
- assertEquals( 1, devicesBeforeFiltering.size() );
+ final ArrayList devicesBeforeTransformation = config.getDiskStorageDevices();
+ assertEquals( 1, devicesBeforeTransformation.size() );
- filter.transform( config, args );
+ transformation.transform( config, args );
- final ArrayList devicesAfterFiltering = config.getDiskStorageDevices();
- assertEquals( 0, devicesAfterFiltering.size() );
+ final ArrayList devicesAfterTransformation = config.getDiskStorageDevices();
+ assertEquals( 0, devicesAfterTransformation.size() );
}
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemoryTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemoryTest.java
index 9ef1f1d2..812982ee 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemoryTest.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemoryTest.java
@@ -15,10 +15,10 @@ import org.openslx.virtualization.configuration.transformation.TransformationExc
public class TransformationGenericMemoryTest
{
@Test
- @DisplayName( "Test filtering of VM memory configuration" )
- public void testFilterGenericMemory() throws TransformationException
+ @DisplayName( "Test transformation of VM memory configuration" )
+ public void testTransformationGenericMemory() throws TransformationException
{
- final TransformationGenericMemory filter = new TransformationGenericMemory();
+ final TransformationGenericMemory transformation = new TransformationGenericMemory();
final Domain config = TransformationTestUtils.getDefaultDomain();
final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
@@ -27,7 +27,7 @@ public class TransformationGenericMemoryTest
assertNotEquals( defaultMemory.toString(), config.getMemory().toString() );
assertNotEquals( defaultMemory.toString(), config.getCurrentMemory().toString() );
- filter.transform( config, args );
+ transformation.transform( config, args );
assertEquals( defaultMemory.toString(), config.getMemory().toString() );
assertEquals( defaultMemory.toString(), config.getCurrentMemory().toString() );
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericNameTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericNameTest.java
index f85af001..2403b83f 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericNameTest.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericNameTest.java
@@ -12,17 +12,17 @@ import org.openslx.virtualization.configuration.transformation.TransformationExc
public class TransformationGenericNameTest
{
@Test
- @DisplayName( "Test filtering of VM (display) name configuration" )
- public void testFilterGenericName() throws TransformationException
+ @DisplayName( "Test transformation of VM (display) name configuration" )
+ public void testTransformationGenericName() throws TransformationException
{
- final TransformationGenericName filter = new TransformationGenericName();
+ final TransformationGenericName transformation = new TransformationGenericName();
final Domain config = TransformationTestUtils.getDefaultDomain();
final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
assertNotEquals( TransformationTestUtils.DEFAULT_VM_NAME, config.getName() );
assertNotEquals( TransformationTestUtils.DEFAULT_VM_DSPLNAME, config.getTitle() );
- filter.transform( config, args );
+ transformation.transform( config, args );
assertEquals( TransformationTestUtils.DEFAULT_VM_NAME, config.getName() );
assertEquals( TransformationTestUtils.DEFAULT_VM_DSPLNAME, config.getTitle() );
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuidTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuidTest.java
index 8b2dc69b..d42a84eb 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuidTest.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuidTest.java
@@ -12,16 +12,16 @@ import org.openslx.virtualization.configuration.transformation.TransformationExc
public class TransformationGenericUuidTest
{
@Test
- @DisplayName( "Test filtering of VM UUID configuration" )
- public void testFilterGenericUuid() throws TransformationException
+ @DisplayName( "Test transformation of VM UUID configuration" )
+ public void testTransformationGenericUuid() throws TransformationException
{
- final TransformationGenericUuid filter = new TransformationGenericUuid();
+ final TransformationGenericUuid transformation = new TransformationGenericUuid();
final Domain config = TransformationTestUtils.getDefaultDomain();
final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
assertNotEquals( TransformationTestUtils.DEFAULT_VM_UUID, config.getUuid() );
- filter.transform( config, args );
+ transformation.transform( config, args );
assertEquals( TransformationTestUtils.DEFAULT_VM_UUID, config.getUuid() );
}
--
cgit v1.2.3-55-g7522
From 985b51d7a308ce468105b2c38a293e9f4bd1f48e Mon Sep 17 00:00:00 2001
From: Manuel Bentele
Date: Wed, 26 May 2021 11:32:54 +0200
Subject: [qemu] Add unit tests for Libvirt configuration transformations
---
.../runvirt/plugin/qemu/cmdln/CommandLineArgs.java | 2 +-
.../TransformationGenericDiskCdromDevices.java | 27 +++++-
.../TransformationGenericDiskFloppyDevices.java | 22 ++++-
.../TransformationGenericDiskStorageDevices.java | 16 +++-
.../TransformationGenericFileSystemDevices.java | 6 +-
.../TransformationGenericInterfaceDevices.java | 17 +++-
.../TransformationGenericParallelDevices.java | 2 +-
.../TransformationSpecificQemuArchitecture.java | 6 +-
.../TransformationSpecificQemuSerialDevices.java | 4 +-
.../org/openslx/runvirt/plugin/qemu/AppTest.java | 8 +-
.../TransformationGenericCpuTest.java | 12 +++
.../TransformationGenericDiskCdromDevicesTest.java | 60 ++++++++++++
...TransformationGenericDiskFloppyDevicesTest.java | 61 ++++++++++++
...TransformationGenericFileSystemDevicesTest.java | 61 ++++++++++++
.../TransformationGenericInterfaceDevicesTest.java | 58 ++++++++++++
.../TransformationGenericMemoryTest.java | 12 +++
.../TransformationGenericNameTest.java | 12 +++
.../TransformationGenericParallelDevicesTest.java | 53 +++++++++++
.../TransformationGenericUuidTest.java | 12 +++
...TransformationSpecificQemuArchitectureTest.java | 102 +++++++++++++++++++++
...ransformationSpecificQemuSerialDevicesTest.java | 69 ++++++++++++++
21 files changed, 596 insertions(+), 26 deletions(-)
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevicesTest.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevicesTest.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevicesTest.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevicesTest.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevicesTest.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitectureTest.java
create mode 100644 core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevicesTest.java
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java
index eb7c8739..1fe342b1 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/cmdln/CommandLineArgs.java
@@ -373,7 +373,7 @@ public class CommandLineArgs
VM_SERIAL0 ( 'q', "vmserial0", true, "Device for the first serial port interface" ),
VM_MAC0 ( 'a', "vmmac0", true, "MAC address for the first network interface" ),
VM_FSSRC0 ( 't', "vmfssrc0", true, "Source directory for first file system passthrough (shared folder)" ),
- VM_FSTGT0 ( 'u', "vmfstgt0", true, "Target directory for first file system passthrough (shared folder)" ),
+ VM_FSTGT0 ( 'e', "vmfstgt0", true, "Target directory for first file system passthrough (shared folder)" ),
VM_FSSRC1 ( 'v', "vmfssrc1", true, "Source directory for second file system passthrough (shared folder)" ),
VM_FSTGT1 ( 'w', "vmfstgt1", true, "Target directory for second file system passthrough (shared folder)" );
// @formatter:on
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevices.java
index 066af763..643c40ed 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevices.java
@@ -3,10 +3,10 @@ package org.openslx.runvirt.plugin.qemu.configuration;
import java.util.ArrayList;
import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.device.Disk.BusType;
import org.openslx.libvirt.domain.device.Disk.StorageType;
import org.openslx.libvirt.domain.device.DiskCdrom;
import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
-import org.openslx.virtualization.configuration.VirtualizationConfigurationQemu;
import org.openslx.virtualization.configuration.VirtualizationConfigurationQemuUtils;
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationGeneric;
@@ -60,11 +60,28 @@ public class TransformationGenericDiskCdromDevices extends TransformationGeneric
final ArrayList devices = config.getDiskCdromDevices();
final DiskCdrom disk = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index );
- if ( disk != null ) {
+ if ( disk == null ) {
+ if ( fileName != null ) {
+ // CDROM drive does not exist, so create new CDROM drive
+ final DiskCdrom newDisk = config.addDiskCdromDevice();
+ newDisk.setBusType( BusType.SATA );
+ String targetDevName = VirtualizationConfigurationQemuUtils.createAlphabeticalDeviceName( "sd", index );
+ newDisk.setTargetDevice( targetDevName );
+
+ if ( fileName.isEmpty() ) {
+ // remove storage source if empty string is specified to emulate an empty CDROM drive
+ newDisk.removeStorage();
+ } else {
+ // set disk image file as storage source of the disk CDROM drive
+ newDisk.setStorage( StorageType.FILE, fileName );
+ }
+ }
+ } else {
+ // CDROM drive exists, so update existing CDROM drive
if ( fileName == null ) {
- // do not remove disk CDROM drive, but set local physical drive as input source
- disk.setStorage( StorageType.BLOCK, VirtualizationConfigurationQemu.CDROM_DEFAULT_PHYSICAL_DRIVE );
- } else if ( fileName.equals( "" ) ) {
+ // remove disk storage device if disk image file name is not set
+ disk.remove();
+ } else if ( fileName.isEmpty() ) {
// remove storage source if empty string is specified to emulate an empty CDROM drive
disk.removeStorage();
} else {
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevices.java
index 87b0eb5c..fe3d3c34 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevices.java
@@ -3,6 +3,7 @@ package org.openslx.runvirt.plugin.qemu.configuration;
import java.util.ArrayList;
import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.device.Disk.BusType;
import org.openslx.libvirt.domain.device.Disk.StorageType;
import org.openslx.libvirt.domain.device.DiskFloppy;
import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
@@ -58,12 +59,27 @@ public class TransformationGenericDiskFloppyDevices extends TransformationGeneri
final ArrayList devices = config.getDiskFloppyDevices();
final DiskFloppy disk = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index );
- if ( disk != null ) {
+ if ( disk == null ) {
+ if ( fileName != null ) {
+ // floppy device does not exist, so create new floppy device
+ final DiskFloppy newDisk = config.addDiskFloppyDevice();
+ newDisk.setBusType( BusType.FDC );
+ String targetDevName = VirtualizationConfigurationQemuUtils.createAlphabeticalDeviceName( "fd", index );
+ newDisk.setTargetDevice( targetDevName );
+
+ if ( fileName.isEmpty() ) {
+ newDisk.removeStorage();
+ } else {
+ newDisk.setStorage( StorageType.FILE, fileName );
+ }
+ }
+ } else {
+ // floppy device exists, so update existing floppy device
if ( fileName == null ) {
- // remove disk floppy device if disk image file name is not set
disk.remove();
+ } else if ( fileName.isEmpty() ) {
+ disk.removeStorage();
} else {
- // set image file of disk storage if disk floppy device is available
disk.setStorage( StorageType.FILE, fileName );
}
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevices.java
index 30c26cae..9bd1edbb 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskStorageDevices.java
@@ -3,7 +3,9 @@ package org.openslx.runvirt.plugin.qemu.configuration;
import java.util.ArrayList;
import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.device.Disk.BusType;
import org.openslx.libvirt.domain.device.Disk.StorageType;
+import org.openslx.libvirt.domain.device.DiskFloppy;
import org.openslx.libvirt.domain.device.DiskStorage;
import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
import org.openslx.virtualization.configuration.VirtualizationConfigurationQemuUtils;
@@ -61,8 +63,18 @@ public class TransformationGenericDiskStorageDevices extends TransformationGener
final ArrayList devices = config.getDiskStorageDevices();
final DiskStorage disk = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index );
- if ( disk != null ) {
- if ( fileName == null ) {
+ if ( disk == null ) {
+ if ( fileName != null && !fileName.isEmpty() ) {
+ // storage device does not exist, so create new storage device
+ final DiskFloppy newDisk = config.addDiskFloppyDevice();
+ newDisk.setBusType( BusType.VIRTIO );
+ String targetDevName = VirtualizationConfigurationQemuUtils.createAlphabeticalDeviceName( "vd", index );
+ newDisk.setTargetDevice( targetDevName );
+ newDisk.setStorage( StorageType.FILE, fileName );
+ }
+ } else {
+ // storage device exists, so update existing storage device
+ if ( fileName == null || fileName.isEmpty() ) {
// remove disk storage device if disk image file name is not set
disk.remove();
} else {
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevices.java
index 88939302..a4f77b0d 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevices.java
@@ -66,7 +66,7 @@ public class TransformationGenericFileSystemDevices extends TransformationGeneri
if ( fileSystem == null ) {
// check if file system device source directory is specified
- if ( source != null && target != null ) {
+ if ( source != null && !source.isEmpty() && target != null && !target.isEmpty() ) {
// file system device does not exist, so create new file system device
final FileSystem newFileSystem = config.addFileSystemDevice();
newFileSystem.setType( Type.MOUNT );
@@ -75,7 +75,7 @@ public class TransformationGenericFileSystemDevices extends TransformationGeneri
newFileSystem.setTarget( target );
}
} else {
- if ( source == null || target == null ) {
+ if ( source == null || source.isEmpty() || target == null || target.isEmpty() ) {
// remove file system device since device source or target is not specified
fileSystem.remove();
} else {
@@ -100,7 +100,7 @@ public class TransformationGenericFileSystemDevices extends TransformationGeneri
// remove all additional file system devices
final ArrayList devices = config.getFileSystemDevices();
- for ( int i = 1; i < devices.size(); i++ ) {
+ for ( int i = 2; i < devices.size(); i++ ) {
devices.get( i ).remove();
}
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevices.java
index ab44b784..6cf12ce2 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevices.java
@@ -4,7 +4,11 @@ import java.util.ArrayList;
import org.openslx.libvirt.domain.Domain;
import org.openslx.libvirt.domain.device.Interface;
+import org.openslx.libvirt.domain.device.InterfaceBridge;
+import org.openslx.libvirt.domain.device.Interface.Model;
+import org.openslx.libvirt.domain.device.Interface.Type;
import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.virtualization.configuration.VirtualizationConfigurationQemu;
import org.openslx.virtualization.configuration.VirtualizationConfigurationQemuUtils;
import org.openslx.virtualization.configuration.transformation.TransformationException;
import org.openslx.virtualization.configuration.transformation.TransformationGeneric;
@@ -59,8 +63,17 @@ public class TransformationGenericInterfaceDevices extends TransformationGeneric
final ArrayList devices = config.getInterfaceDevices();
final Interface device = VirtualizationConfigurationQemuUtils.getArrayIndex( devices, index );
- if ( device != null ) {
- if ( macAddress == null ) {
+ if ( device == null ) {
+ if ( macAddress != null && !macAddress.isEmpty() ) {
+ // create network interface if it does not exists
+ final InterfaceBridge newDevice = config.addInterfaceBridgeDevice();
+ newDevice.setType( Type.BRIDGE );
+ newDevice.setModel( Model.VIRTIO );
+ newDevice.setMacAddress( macAddress );
+ newDevice.setSource( VirtualizationConfigurationQemu.NETWORK_BRIDGE_NAT_DEFAULT );
+ }
+ } else {
+ if ( macAddress == null || macAddress.isEmpty() ) {
// remove network interface device if MAC address is not set
device.remove();
} else {
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevices.java
index dff86132..08d43ef0 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevices.java
@@ -68,7 +68,7 @@ public class TransformationGenericParallelDevices extends TransformationGeneric<
newDevice.setSource( fileName );
}
} else {
- if ( fileName == null ) {
+ if ( fileName == null || fileName.isEmpty() ) {
// remove device since device file is not specified
device.remove();
} else {
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitecture.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitecture.java
index 0c32a3b3..f507237d 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitecture.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitecture.java
@@ -42,9 +42,9 @@ public class TransformationSpecificQemuArchitecture
*
* @param hypervisor Libvirt/QEMU hypervisor.
*/
- public TransformationSpecificQemuArchitecture( LibvirtHypervisorQemu hypervisor )
+ public TransformationSpecificQemuArchitecture( LibvirtHypervisorQemu virtualizer )
{
- super( TransformationSpecificQemuArchitecture.NAME, hypervisor );
+ super( TransformationSpecificQemuArchitecture.NAME, virtualizer );
}
/**
@@ -68,7 +68,7 @@ public class TransformationSpecificQemuArchitecture
* @throws TransformationException failed to query and return the capabilities of the
* Libvirt/QEMU hypervisor.
*/
- private Capabilities getCapabilities() throws TransformationException
+ protected Capabilities getCapabilities() throws TransformationException
{
// retrieve capabilities from QEMU hypervisor only once
if ( this.capabilities == null ) {
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevices.java b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevices.java
index 1cd3c9b0..30f60289 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevices.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/main/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevices.java
@@ -81,14 +81,14 @@ public class TransformationSpecificQemuSerialDevices
if ( device == null ) {
// check if device file name is specified
- if ( fileName != null ) {
+ if ( fileName != null && !fileName.isEmpty() ) {
// serial port device is not available, so create new serial port device
final Serial newDevice = config.addSerialDevice();
newDevice.setType( Type.DEV );
newDevice.setSource( fileName );
}
} else {
- if ( fileName == null ) {
+ if ( fileName == null || fileName.isEmpty() ) {
// remove serial port device if device file name is not set
device.remove();
} else {
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/AppTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/AppTest.java
index a7929ab0..1db1525b 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/AppTest.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/AppTest.java
@@ -63,7 +63,7 @@ public class AppTest
assertTrue( shortHelpOptionCorrectOutput.contains( App.APP_DESC ) );
// test that no error was logged and output is available
- assertEquals( 2093, shortHelpOptionCorrectOutput.length() );
+ assertEquals( 2160, shortHelpOptionCorrectOutput.length() );
assertEquals( 0, shortHelpOptionCorrectErrOutput.length() );
}
@@ -91,7 +91,7 @@ public class AppTest
assertTrue( longHelpOptionCorrectOutput.contains( App.APP_DESC ) );
// test that no error was logged and output is available
- assertEquals( 2093, longHelpOptionCorrectOutput.length() );
+ assertEquals( 2160, longHelpOptionCorrectOutput.length() );
assertEquals( 0, longHelpOptionCorrectErrOutput.length() );
}
@@ -119,7 +119,7 @@ public class AppTest
assertTrue( shortHelpOptionIncorrectOutput.contains( App.APP_DESC ) );
// test that error was logged and output is available
- assertEquals( 2093, shortHelpOptionIncorrectOutput.length() );
+ assertEquals( 2160, shortHelpOptionIncorrectOutput.length() );
assertEquals( 0, shortHelpOptionIncorrectErrOutput.length() );
}
@@ -147,7 +147,7 @@ public class AppTest
assertTrue( longHelpOptionIncorrectOutput.contains( App.APP_DESC ) );
// test that error was logged and output is available
- assertEquals( 2093, longHelpOptionIncorrectOutput.length() );
+ assertEquals( 2160, longHelpOptionIncorrectOutput.length() );
assertEquals( 0, longHelpOptionIncorrectErrOutput.length() );
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpuTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpuTest.java
index 260adcc1..7e93513b 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpuTest.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericCpuTest.java
@@ -2,6 +2,7 @@ package org.openslx.runvirt.plugin.qemu.configuration;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -31,4 +32,15 @@ public class TransformationGenericCpuTest
assertEquals( CpuMode.HOST_PASSTHROUGH, config.getCpuMode() );
assertEquals( CpuCheck.PARTIAL, config.getCpuCheck() );
}
+
+ @Test
+ @DisplayName( "Test transformation of VM CPU configuration with unspecified input data" )
+ public void testTransformationGenericCpuNoData() throws TransformationException
+ {
+ final TransformationGenericCpu transformation = new TransformationGenericCpu();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getEmptyCmdLnArgs();
+
+ assertThrows( TransformationException.class, () -> transformation.transform( config, args ) );
+ }
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevicesTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevicesTest.java
new file mode 100644
index 00000000..842e30e6
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskCdromDevicesTest.java
@@ -0,0 +1,60 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import java.util.ArrayList;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.device.Disk.StorageType;
+import org.openslx.libvirt.domain.device.DiskCdrom;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+
+public class TransformationGenericDiskCdromDevicesTest
+{
+ @Test
+ @DisplayName( "Test transformation of VM disk CDROM devices configuration with specified input data" )
+ public void testTransformationGenericDiskCdromDevices() throws TransformationException
+ {
+ final TransformationGenericDiskCdromDevices transformation = new TransformationGenericDiskCdromDevices();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
+
+ final ArrayList devicesBeforeTransformation = config.getDiskCdromDevices();
+ assertEquals( 1, devicesBeforeTransformation.size() );
+ final DiskCdrom cdromDeviceBeforeTransformation = devicesBeforeTransformation.get( 0 );
+ assertEquals( StorageType.FILE, cdromDeviceBeforeTransformation.getStorageType() );
+ assertNotEquals( TransformationTestUtils.DEFAULT_VM_CDROM0, cdromDeviceBeforeTransformation.getStorageSource() );
+
+ transformation.transform( config, args );
+
+ final ArrayList devicesAfterTransformation = config.getDiskCdromDevices();
+ assertEquals( 2, devicesAfterTransformation.size() );
+ final DiskCdrom cdromDevice1AfterTransformation = devicesAfterTransformation.get( 0 );
+ final DiskCdrom cdromDevice2AfterTransformation = devicesAfterTransformation.get( 1 );
+ assertEquals( StorageType.FILE, cdromDevice1AfterTransformation.getStorageType() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_CDROM0, cdromDevice1AfterTransformation.getStorageSource() );
+ assertEquals( StorageType.FILE, cdromDevice2AfterTransformation.getStorageType() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_CDROM1, cdromDevice2AfterTransformation.getStorageSource() );
+ }
+
+ @Test
+ @DisplayName( "Test transformation of VM disk CDROM devices configuration with unspecified input data" )
+ public void testTransformationGenericDiskCdromDevicesNoData() throws TransformationException
+ {
+ final TransformationGenericDiskCdromDevices transformation = new TransformationGenericDiskCdromDevices();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getEmptyCmdLnArgs();
+
+ final ArrayList devicesBeforeTransformation = config.getDiskCdromDevices();
+ assertEquals( 1, devicesBeforeTransformation.size() );
+
+ transformation.transform( config, args );
+
+ final ArrayList devicesAfterTransformation = config.getDiskCdromDevices();
+ assertEquals( 0, devicesAfterTransformation.size() );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevicesTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevicesTest.java
new file mode 100644
index 00000000..d4678f4f
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericDiskFloppyDevicesTest.java
@@ -0,0 +1,61 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+import java.util.ArrayList;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.device.Disk.StorageType;
+import org.openslx.libvirt.domain.device.DiskFloppy;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+
+public class TransformationGenericDiskFloppyDevicesTest
+{
+ @Test
+ @DisplayName( "Test transformation of VM disk floppy devices configuration with specified input data" )
+ public void testTransformationGenericDiskFloppyDevices() throws TransformationException
+ {
+ final TransformationGenericDiskFloppyDevices transformation = new TransformationGenericDiskFloppyDevices();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
+
+ final ArrayList devicesBeforeTransformation = config.getDiskFloppyDevices();
+ assertEquals( 1, devicesBeforeTransformation.size() );
+ final DiskFloppy floppyDeviceBeforeTransformation = devicesBeforeTransformation.get( 0 );
+ assertEquals( StorageType.FILE, floppyDeviceBeforeTransformation.getStorageType() );
+ assertNotEquals( TransformationTestUtils.DEFAULT_VM_FLOPPY0,
+ floppyDeviceBeforeTransformation.getStorageSource() );
+
+ transformation.transform( config, args );
+
+ final ArrayList devicesAfterTransformation = config.getDiskFloppyDevices();
+ assertEquals( 2, devicesAfterTransformation.size() );
+ final DiskFloppy floppyDevice1AfterTransformation = devicesAfterTransformation.get( 0 );
+ final DiskFloppy floppyDevice2AfterTransformation = devicesAfterTransformation.get( 1 );
+ assertEquals( StorageType.FILE, floppyDevice1AfterTransformation.getStorageType() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_FLOPPY0, floppyDevice1AfterTransformation.getStorageSource() );
+ assertEquals( StorageType.FILE, floppyDevice2AfterTransformation.getStorageType() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_FLOPPY1, floppyDevice2AfterTransformation.getStorageSource() );
+ }
+
+ @Test
+ @DisplayName( "Test transformation of VM disk floppy devices configuration with unspecified input data" )
+ public void testTransformationGenericDiskFloppyDevicesNoData() throws TransformationException
+ {
+ final TransformationGenericDiskFloppyDevices transformation = new TransformationGenericDiskFloppyDevices();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getEmptyCmdLnArgs();
+
+ final ArrayList devicesBeforeTransformation = config.getDiskFloppyDevices();
+ assertEquals( 1, devicesBeforeTransformation.size() );
+
+ transformation.transform( config, args );
+
+ final ArrayList devicesAfterTransformation = config.getDiskFloppyDevices();
+ assertEquals( 0, devicesAfterTransformation.size() );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevicesTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevicesTest.java
new file mode 100644
index 00000000..38a07e38
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericFileSystemDevicesTest.java
@@ -0,0 +1,61 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.ArrayList;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.device.FileSystem;
+import org.openslx.libvirt.domain.device.FileSystem.AccessMode;
+import org.openslx.libvirt.domain.device.FileSystem.Type;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+
+public class TransformationGenericFileSystemDevicesTest
+{
+ @Test
+ @DisplayName( "Test transformation of VM file system devices configuration with specified input data" )
+ public void testTransformationGenericFileSystemDevices() throws TransformationException
+ {
+ final TransformationGenericFileSystemDevices transformation = new TransformationGenericFileSystemDevices();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
+
+ final ArrayList devicesBeforeTransformation = config.getFileSystemDevices();
+ assertEquals( 0, devicesBeforeTransformation.size() );
+
+ transformation.transform( config, args );
+
+ final ArrayList devicesAfterTransformation = config.getFileSystemDevices();
+ assertEquals( 2, devicesAfterTransformation.size() );
+ final FileSystem fs1AfterTransformation = devicesAfterTransformation.get( 0 );
+ final FileSystem fs2AfterTransformation = devicesAfterTransformation.get( 1 );
+ assertEquals( Type.MOUNT, fs1AfterTransformation.getType() );
+ assertEquals( AccessMode.MAPPED, fs1AfterTransformation.getAccessMode() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_FSSRC0, fs1AfterTransformation.getSource() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_FSTGT0, fs1AfterTransformation.getTarget() );
+ assertEquals( Type.MOUNT, fs2AfterTransformation.getType() );
+ assertEquals( AccessMode.MAPPED, fs2AfterTransformation.getAccessMode() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_FSSRC1, fs2AfterTransformation.getSource() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_FSTGT1, fs2AfterTransformation.getTarget() );
+ }
+
+ @Test
+ @DisplayName( "Test transformation of VM file system devices configuration with unspecified input data" )
+ public void testTransformationGenericFileSystemDevicesNoData() throws TransformationException
+ {
+ final TransformationGenericFileSystemDevices transformation = new TransformationGenericFileSystemDevices();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getEmptyCmdLnArgs();
+
+ final ArrayList devicesBeforeTransformation = config.getFileSystemDevices();
+ assertEquals( 0, devicesBeforeTransformation.size() );
+
+ transformation.transform( config, args );
+
+ final ArrayList devicesAfterTransformation = config.getFileSystemDevices();
+ assertEquals( 0, devicesAfterTransformation.size() );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevicesTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevicesTest.java
new file mode 100644
index 00000000..6257e98f
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericInterfaceDevicesTest.java
@@ -0,0 +1,58 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.ArrayList;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.device.Interface;
+import org.openslx.libvirt.domain.device.Interface.Model;
+import org.openslx.libvirt.domain.device.Interface.Type;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.virtualization.configuration.VirtualizationConfigurationQemu;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+
+public class TransformationGenericInterfaceDevicesTest
+{
+ @Test
+ @DisplayName( "Test transformation of VM network interface devices configuration with specified input data" )
+ public void testTransformationGenericInterfaceDevices() throws TransformationException
+ {
+ final TransformationGenericInterfaceDevices transformation = new TransformationGenericInterfaceDevices();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
+
+ final ArrayList devicesBeforeTransformation = config.getInterfaceDevices();
+ assertEquals( 1, devicesBeforeTransformation.size() );
+
+ transformation.transform( config, args );
+
+ final ArrayList devicesAfterTransformation = config.getInterfaceDevices();
+ assertEquals( 1, devicesAfterTransformation.size() );
+ final Interface interfaceAfterTransformation = devicesAfterTransformation.get( 0 );
+ assertEquals( Type.BRIDGE, interfaceAfterTransformation.getType() );
+ assertEquals( Model.VIRTIO, interfaceAfterTransformation.getModel() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_MAC0, interfaceAfterTransformation.getMacAddress() );
+ assertEquals( VirtualizationConfigurationQemu.NETWORK_BRIDGE_NAT_DEFAULT,
+ interfaceAfterTransformation.getSource() );
+ }
+
+ @Test
+ @DisplayName( "Test transformation of VM network interface devices configuration with unspecified input data" )
+ public void testTransformationGenericInterfaceDevicesNoData() throws TransformationException
+ {
+ final TransformationGenericInterfaceDevices transformation = new TransformationGenericInterfaceDevices();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getEmptyCmdLnArgs();
+
+ final ArrayList devicesBeforeTransformation = config.getInterfaceDevices();
+ assertEquals( 1, devicesBeforeTransformation.size() );
+
+ transformation.transform( config, args );
+
+ final ArrayList devicesAfterTransformation = config.getInterfaceDevices();
+ assertEquals( 0, devicesAfterTransformation.size() );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemoryTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemoryTest.java
index 812982ee..76f53e40 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemoryTest.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericMemoryTest.java
@@ -2,6 +2,7 @@ package org.openslx.runvirt.plugin.qemu.configuration;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import java.math.BigInteger;
@@ -32,4 +33,15 @@ public class TransformationGenericMemoryTest
assertEquals( defaultMemory.toString(), config.getMemory().toString() );
assertEquals( defaultMemory.toString(), config.getCurrentMemory().toString() );
}
+
+ @Test
+ @DisplayName( "Test transformation of VM memory configuration with unspecified input data" )
+ public void testTransformationGenericMemoryNoData() throws TransformationException
+ {
+ final TransformationGenericMemory transformation = new TransformationGenericMemory();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getEmptyCmdLnArgs();
+
+ assertThrows( TransformationException.class, () -> transformation.transform( config, args ) );
+ }
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericNameTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericNameTest.java
index 2403b83f..b52162d7 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericNameTest.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericNameTest.java
@@ -2,6 +2,7 @@ package org.openslx.runvirt.plugin.qemu.configuration;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -27,4 +28,15 @@ public class TransformationGenericNameTest
assertEquals( TransformationTestUtils.DEFAULT_VM_NAME, config.getName() );
assertEquals( TransformationTestUtils.DEFAULT_VM_DSPLNAME, config.getTitle() );
}
+
+ @Test
+ @DisplayName( "Test transformation of VM (display) name configuration with unspecified input data" )
+ public void testTransformationGenericNameNoData() throws TransformationException
+ {
+ final TransformationGenericName transformation = new TransformationGenericName();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getEmptyCmdLnArgs();
+
+ assertThrows( TransformationException.class, () -> transformation.transform( config, args ) );
+ }
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevicesTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevicesTest.java
new file mode 100644
index 00000000..63fb134c
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericParallelDevicesTest.java
@@ -0,0 +1,53 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.ArrayList;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.device.Parallel;
+import org.openslx.libvirt.domain.device.Parallel.Type;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+
+public class TransformationGenericParallelDevicesTest
+{
+ @Test
+ @DisplayName( "Test transformation of VM parallel devices configuration with specified input data" )
+ public void testTransformationGenericParallelDevices() throws TransformationException
+ {
+ final TransformationGenericParallelDevices transformation = new TransformationGenericParallelDevices();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
+
+ final ArrayList devicesBeforeTransformation = config.getParallelDevices();
+ assertEquals( 0, devicesBeforeTransformation.size() );
+
+ transformation.transform( config, args );
+
+ final ArrayList devicesAfterTransformation = config.getParallelDevices();
+ assertEquals( 1, devicesAfterTransformation.size() );
+ final Parallel parallelDeviceAfterTransformation = devicesAfterTransformation.get( 0 );
+ assertEquals( Type.DEV, parallelDeviceAfterTransformation.getType() );
+ assertEquals( TransformationTestUtils.DEFAULT_VM_PARALLEL0, parallelDeviceAfterTransformation.getSource() );
+ }
+
+ @Test
+ @DisplayName( "Test transformation of VM parallel devices configuration with unspecified input data" )
+ public void testTransformationGenericParallelDevicesNoData() throws TransformationException
+ {
+ final TransformationGenericParallelDevices transformation = new TransformationGenericParallelDevices();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getEmptyCmdLnArgs();
+
+ final ArrayList devicesBeforeTransformation = config.getParallelDevices();
+ assertEquals( 0, devicesBeforeTransformation.size() );
+
+ transformation.transform( config, args );
+
+ final ArrayList devicesAfterTransformation = config.getParallelDevices();
+ assertEquals( 0, devicesAfterTransformation.size() );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuidTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuidTest.java
index d42a84eb..8fe20886 100644
--- a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuidTest.java
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationGenericUuidTest.java
@@ -2,6 +2,7 @@ package org.openslx.runvirt.plugin.qemu.configuration;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -25,4 +26,15 @@ public class TransformationGenericUuidTest
assertEquals( TransformationTestUtils.DEFAULT_VM_UUID, config.getUuid() );
}
+
+ @Test
+ @DisplayName( "Test transformation of VM UUID configuration with unspecified input data" )
+ public void testTransformationGenericUuidNoData() throws TransformationException
+ {
+ final TransformationGenericUuid transformation = new TransformationGenericUuid();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getEmptyCmdLnArgs();
+
+ assertThrows( TransformationException.class, () -> transformation.transform( config, args ) );
+ }
}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitectureTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitectureTest.java
new file mode 100644
index 00000000..50689c4e
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuArchitectureTest.java
@@ -0,0 +1,102 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.io.InputStream;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openslx.libvirt.capabilities.Capabilities;
+import org.openslx.libvirt.domain.Domain;
+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;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+
+class TransformationSpecificQemuArchitectureStub extends TransformationSpecificQemuArchitecture
+{
+ final String capabilityFileName;
+
+ public TransformationSpecificQemuArchitectureStub( String capabilityFileName )
+ {
+ super( null );
+
+ this.capabilityFileName = capabilityFileName;
+ }
+
+ @Override
+ protected Capabilities getCapabilities() throws TransformationException
+ {
+ final InputStream capabilityContent = LibvirtXmlTestResources.getLibvirtXmlStream( this.capabilityFileName );
+ Capabilities capabilites = null;
+
+ try {
+ capabilites = new Capabilities( capabilityContent );
+ } catch ( LibvirtXmlDocumentException | LibvirtXmlSerializationException | LibvirtXmlValidationException e ) {
+ fail( "Could not create stub for getCapabilities(): " + e.getLocalizedMessage() );
+ }
+
+ return capabilites;
+ }
+}
+
+public class TransformationSpecificQemuArchitectureTest
+{
+ @Test
+ @DisplayName( "Test transformation of VM architecture configuration if KVM required and available" )
+ public void testTransformationSpecificQemuArchitectureKvm() throws TransformationException
+ {
+ final TransformationSpecificQemuArchitectureStub transformation;
+ transformation = new TransformationSpecificQemuArchitectureStub( "qemu-kvm_capabilities_default.xml" );
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+
+ assertEquals( Type.KVM, config.getType() );
+ assertEquals( "x86_64", config.getOsArch() );
+ assertEquals( "pc-q35-5.1", config.getOsMachine() );
+ assertEquals( OsType.HVM, config.getOsType() );
+
+ transformation.transform( config, null );
+
+ assertEquals( Type.KVM, config.getType() );
+ assertEquals( "x86_64", config.getOsArch() );
+ assertEquals( "pc-q35-5.1", config.getOsMachine() );
+ assertEquals( OsType.HVM, config.getOsType() );
+ }
+
+ @Test
+ @DisplayName( "Test transformation of VM architecture configuration if KVM required but not available" )
+ public void testTransformationSpecificQemuArchitectureNoKvm() throws TransformationException
+ {
+ final TransformationSpecificQemuArchitectureStub transformation;
+ transformation = new TransformationSpecificQemuArchitectureStub( "qemu-kvm_capabilities_no-kvm.xml" );
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+
+ assertEquals( Type.KVM, config.getType() );
+ assertEquals( "x86_64", config.getOsArch() );
+ assertEquals( "pc-q35-5.1", config.getOsMachine() );
+ assertEquals( OsType.HVM, config.getOsType() );
+
+ assertThrows( TransformationException.class, () -> transformation.transform( config, null ) );
+ }
+
+ @Test
+ @DisplayName( "Test transformation of VM architecture configuration if version is not supported (machine version too new)" )
+ public void testTransformationSpecificQemuArchitectureMachineVersionDowngrade() throws TransformationException
+ {
+ final TransformationSpecificQemuArchitectureStub transformation;
+ transformation = new TransformationSpecificQemuArchitectureStub( "qemu-kvm_capabilities_old-version.xml" );
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+
+ assertEquals( Type.KVM, config.getType() );
+ assertEquals( "x86_64", config.getOsArch() );
+ assertEquals( "pc-q35-5.1", config.getOsMachine() );
+ assertEquals( OsType.HVM, config.getOsType() );
+
+ assertThrows( TransformationException.class, () -> transformation.transform( config, null ) );
+ }
+}
diff --git a/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevicesTest.java b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevicesTest.java
new file mode 100644
index 00000000..270bfff9
--- /dev/null
+++ b/core/modules/qemu/runvirt-plugin-qemu/src/test/java/org/openslx/runvirt/plugin/qemu/configuration/TransformationSpecificQemuSerialDevicesTest.java
@@ -0,0 +1,69 @@
+package org.openslx.runvirt.plugin.qemu.configuration;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.ArrayList;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.openslx.libvirt.domain.Domain;
+import org.openslx.libvirt.domain.device.Serial;
+import org.openslx.libvirt.domain.device.Serial.Type;
+import org.openslx.runvirt.plugin.qemu.cmdln.CommandLineArgs;
+import org.openslx.virtualization.configuration.transformation.TransformationException;
+
+class TransformationSpecificQemuSerialDevicesStub extends TransformationSpecificQemuSerialDevices
+{
+ public TransformationSpecificQemuSerialDevicesStub()
+ {
+ super( null );
+ }
+}
+
+public class TransformationSpecificQemuSerialDevicesTest
+{
+ @Test
+ @DisplayName( "Test transformation of VM serial devices configuration with specified input data" )
+ public void testTransformationGenericSerialDevices() throws TransformationException
+ {
+ final TransformationSpecificQemuSerialDevicesStub transformation = new TransformationSpecificQemuSerialDevicesStub();
+ final Domain config = TransformationTestUtils.getDefaultDomain();
+ final CommandLineArgs args = TransformationTestUtils.getDefaultCmdLnArgs();
+
+ final ArrayList