summaryrefslogblamecommitdiffstats
path: root/src/test/java/org/openslx/virtualization/configuration/logic/ConfigurationLogicTestUtils.java
blob: 466a1d6da04b9cf4aba6b1cd208277097e13b1db (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                                                       
                                                            






                                                    
                           


                             

                               




                                                                            
                                     



                                        
                                                                                                             












                                                                                                               
                                                                                              
 
                                                                                                           
         
                                                          


























                                                                                                                                 
                                                                                                       
         
                                                                                                     
         
 
                                                                     







                                                                                                                              
                                                                                                              

                                                                      

                                                                                                             
 
                                                                                         

         
                                                                                                                 
         
                                                                                     






























                                                                                                                            
 

                                                               
         
 
package org.openslx.virtualization.configuration.logic;

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

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

import org.apache.commons.io.FileUtils;
import org.openslx.bwlp.thrift.iface.OperatingSystem;
import org.openslx.virtualization.configuration.VirtualizationConfiguration;
import org.xmlunit.assertj.XmlAssert;

public class ConfigurationLogicTestUtils
{
	// @formatter:off
	public static final List<OperatingSystem> STUB_OS_LIST = Collections.unmodifiableList( Arrays.asList(
			new OperatingSystem(  1, "Windows 7 (64 Bit)",        null, "AMD64", 196608, 256 ),
			new OperatingSystem(  2, "Windows 8 (32 Bit)",        null, "x86",     4096,  32 ),
			new OperatingSystem(  3, "Windows 8 (64 Bit)",        null, "AMD64", 131072, 256 ),
			new OperatingSystem(  4, "Ubuntu (32 Bit)",           null, "x86",        0,   0 ),
			new OperatingSystem(  5, "Ubuntu (64 Bit)",           null, "AMD64",      0,   0 ),
			new OperatingSystem(  6, "OpenSUSE (32 Bit)",         null, "x86",        0,   0 ),
			new OperatingSystem(  7, "OpenSUSE (64 Bit)",         null, "AMD64",      0,   0 ),
			new OperatingSystem(  8, "Other Linux (32 Bit)",      null, "x86",        0,   0 ),
			new OperatingSystem(  9, "Other Linux (64 Bit)",      null, "AMD64",      0,   0 ),
			new OperatingSystem( 10, "Windows 7 (32 Bit)",        null, "x86",     4096,  32 ),
			new OperatingSystem( 11, "Windows 2000 Professional", null, "x86",     4096,   4 ) ) );
	// @formatter:on

	private static final String REGEX_SOURCE_FILE_PATHS = "(<source.*file=\")(.*)(\".*>)";

	public static VirtualizationConfiguration newVirtualizationConfigurationInstance( File configFile )
	{
		VirtualizationConfiguration config = null;

		try {
			config = VirtualizationConfiguration.getInstance( ConfigurationLogicTestUtils.STUB_OS_LIST, configFile );
		} catch ( IOException e ) {
			fail( "Virtualization configuration file '" + configFile.getName() + "' can not be processed!" );
		}

		if ( config == null ) {
			fail( "Virtualization configuration can not be created from file '" + configFile.getName() + "'" );
		}

		return config;
	}

	public static String readFileToString( File file )
	{
		String content = null;

		try {
			content = FileUtils.readFileToString( file, StandardCharsets.UTF_8 );
		} catch ( IOException e ) {
			fail( "Could not read content of file '" + file.getName() + "'" );
		}

		return content;
	}

	public static void assertXmlEqual( String expectedXml, String actualXml ) throws AssertionError
	{
		XmlAssert.assertThat( actualXml ).and( expectedXml ).ignoreComments().areIdentical();
	}

	private static String removeSourceFilePaths( String content )
	{
		final Pattern patternSourceFilePaths = Pattern.compile( ConfigurationLogicTestUtils.REGEX_SOURCE_FILE_PATHS );
		final Matcher matcherSourceFilePathsContent = patternSourceFilePaths.matcher( content );

		// replace all source file paths with the empty String
		return matcherSourceFilePathsContent.replaceAll( "$1$3" );
	}

	public static void assertXmlLibvirtEqual( String expectedXml, String actualXml ) throws AssertionError
	{
		// replace all source file paths with the empty String
		final String filteredXml1 = ConfigurationLogicTestUtils.removeSourceFilePaths( expectedXml );
		final String filteredXml2 = ConfigurationLogicTestUtils.removeSourceFilePaths( actualXml );

		ConfigurationLogicTestUtils.assertXmlEqual( filteredXml1, filteredXml2 );
	}

	public static void assertXmlVirtualBoxEqual( String expectedXml, String actualXml ) throws AssertionError
	{
		ConfigurationLogicTestUtils.assertXmlEqual( expectedXml, actualXml );
	}

	public static void assertVmxVmwareEqual( String expectedVmx, String actualVmx ) throws AssertionError
	{
		final BufferedReader bfrVmx1 = new BufferedReader( new StringReader( expectedVmx ) );
		final BufferedReader bfrVmx2 = new BufferedReader( new StringReader( actualVmx ) );
		final List<String> linesVmx1 = bfrVmx1.lines().collect( Collectors.toList() );
		final List<String> linesVmx2 = bfrVmx2.lines().collect( Collectors.toList() );

		// check output size first
		if ( linesVmx1.size() != linesVmx2.size() ) {
			// create list of items that are expected but missing in the actual output
			final List<String> missingItems;
			final String missingItemsDesc;

			if ( linesVmx1.size() > linesVmx2.size() ) {
				missingItemsDesc = "The following items are expected but missing in the actual output";
				missingItems = new ArrayList<String>( linesVmx1 );
				missingItems.removeAll( linesVmx2 );
			} else {
				missingItemsDesc = "The following items are not expected but occuring in the actual output";
				missingItems = new ArrayList<String>( linesVmx2 );
				missingItems.removeAll( linesVmx1 );
			}

			throw new AssertionError( String.format(
					"VMX output size is not satisfied: Expected %d lines, but output has %d lines!\n"
							+ "%s:\n"
							+ "%s",
					linesVmx1.size(), linesVmx2.size(), missingItemsDesc, missingItems ) );
		}

		// check the content of the output line by line
		assertEquals( linesVmx1, linesVmx2 );
	}
}