1 package org.apache.maven.plugin.surefire.booterclient;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import junit.framework.TestCase;
23 import org.apache.maven.surefire.booter.*;
24 import org.apache.maven.surefire.cli.CommandLineOption;
25 import org.apache.maven.surefire.report.ReporterConfiguration;
26 import org.apache.maven.surefire.testset.*;
27 import org.apache.maven.surefire.util.RunOrder;
28
29 import java.io.File;
30 import java.io.FileInputStream;
31 import java.io.IOException;
32 import java.util.ArrayList;
33 import java.util.Arrays;
34 import java.util.HashMap;
35 import java.util.List;
36
37 import static org.apache.maven.surefire.cli.CommandLineOption.LOGGING_LEVEL_DEBUG;
38 import static org.apache.maven.surefire.cli.CommandLineOption.REACTOR_FAIL_FAST;
39 import static org.apache.maven.surefire.cli.CommandLineOption.SHOW_ERRORS;
40
41
42
43
44
45
46 public class BooterDeserializerStartupConfigurationTest
47 extends TestCase
48 {
49 private final ClasspathConfiguration classpathConfiguration = createClasspathConfiguration();
50
51 private final List<CommandLineOption> cli =
52 Arrays.asList( LOGGING_LEVEL_DEBUG, SHOW_ERRORS, REACTOR_FAIL_FAST );
53
54 public void testProvider()
55 throws IOException
56 {
57 assertEquals( "com.provider", getReloadedStartupConfiguration().getProviderClassName() );
58 }
59
60 public void testClassPathConfiguration()
61 throws IOException
62 {
63 AbstractPathConfiguration reloadedClasspathConfiguration =
64 getReloadedStartupConfiguration().getClasspathConfiguration();
65
66 assertTrue( reloadedClasspathConfiguration instanceof ClasspathConfiguration );
67 assertCpConfigEquals( classpathConfiguration, (ClasspathConfiguration) reloadedClasspathConfiguration );
68 }
69
70 private void assertCpConfigEquals( ClasspathConfiguration expectedConfiguration,
71 ClasspathConfiguration actualConfiguration )
72 {
73 assertEquals( expectedConfiguration.getTestClasspath().getClassPath(),
74 actualConfiguration.getTestClasspath().getClassPath() );
75 assertEquals( expectedConfiguration.isEnableAssertions(), actualConfiguration.isEnableAssertions() );
76 assertEquals( expectedConfiguration.isChildDelegation(), actualConfiguration.isChildDelegation() );
77 assertEquals( expectedConfiguration.getProviderClasspath(), actualConfiguration.getProviderClasspath() );
78 assertEquals( expectedConfiguration.getTestClasspath(), actualConfiguration.getTestClasspath() );
79 }
80
81 public void testClassLoaderConfiguration()
82 throws IOException
83 {
84 assertFalse( getReloadedStartupConfiguration().isManifestOnlyJarRequestedAndUsable() );
85 }
86
87 public void testClassLoaderConfigurationTrues()
88 throws IOException
89 {
90 final StartupConfiguration testStartupConfiguration =
91 getTestStartupConfiguration( getManifestOnlyJarForkConfiguration() );
92 boolean current = testStartupConfiguration.isManifestOnlyJarRequestedAndUsable();
93 assertEquals( current, saveAndReload( testStartupConfiguration ).isManifestOnlyJarRequestedAndUsable() );
94 }
95
96 private ClasspathConfiguration createClasspathConfiguration()
97 {
98 Classpath testClassPath = new Classpath( Arrays.asList( "CP1", "CP2" ) );
99 Classpath providerClasspath = new Classpath( Arrays.asList( "SP1", "SP2" ) );
100 return new ClasspathConfiguration( testClassPath, providerClasspath, Classpath.emptyClasspath(), true, true );
101 }
102
103 public static ClassLoaderConfiguration getSystemClassLoaderConfiguration()
104 {
105 return new ClassLoaderConfiguration( true, false );
106 }
107
108 public static ClassLoaderConfiguration getManifestOnlyJarForkConfiguration()
109 {
110 return new ClassLoaderConfiguration( true, true );
111 }
112
113
114 private StartupConfiguration getReloadedStartupConfiguration()
115 throws IOException
116 {
117 ClassLoaderConfiguration classLoaderConfiguration = getSystemClassLoaderConfiguration();
118 return saveAndReload( getTestStartupConfiguration( classLoaderConfiguration ) );
119 }
120
121 private StartupConfiguration saveAndReload( StartupConfiguration startupConfiguration )
122 throws IOException
123 {
124 final ForkConfiguration forkConfiguration = ForkConfigurationTest.getForkConfiguration( (String) null );
125 PropertiesWrapper props = new PropertiesWrapper( new HashMap<String, String>() );
126 BooterSerializer booterSerializer = new BooterSerializer( forkConfiguration );
127 String aTest = "aTest";
128 final File propsTest =
129 booterSerializer.serialize( props, getProviderConfiguration(), startupConfiguration, aTest, false, null );
130 BooterDeserializer booterDeserializer = new BooterDeserializer( new FileInputStream( propsTest ) );
131 assertNull( booterDeserializer.getPluginPid() );
132 return booterDeserializer.getProviderConfiguration();
133 }
134
135 private ProviderConfiguration getProviderConfiguration()
136 {
137
138 File cwd = new File( "." );
139 DirectoryScannerParameters directoryScannerParameters =
140 new DirectoryScannerParameters( cwd, new ArrayList<String>(), new ArrayList<String>(),
141 new ArrayList<String>(), true, "hourly" );
142 ReporterConfiguration reporterConfiguration = new ReporterConfiguration( cwd, true );
143 TestRequest testSuiteDefinition =
144 new TestRequest( Arrays.asList( getSuiteXmlFileStrings() ), getTestSourceDirectory(),
145 new TestListResolver( "aUserRequestedTest#aUserRequestedTestMethod" ));
146
147 RunOrderParameters runOrderParameters = new RunOrderParameters( RunOrder.DEFAULT, null );
148 return new ProviderConfiguration( directoryScannerParameters, runOrderParameters, true, reporterConfiguration,
149 new TestArtifactInfo( "5.0", "ABC" ), testSuiteDefinition, new HashMap<String, String>(),
150 BooterDeserializerProviderConfigurationTest.aTestTyped, true, cli, 0, Shutdown.DEFAULT, 0 );
151 }
152
153 private StartupConfiguration getTestStartupConfiguration( ClassLoaderConfiguration classLoaderConfiguration )
154 {
155 return new StartupConfiguration( "com.provider", classpathConfiguration, classLoaderConfiguration, false,
156 false );
157 }
158
159 private File getTestSourceDirectory()
160 {
161 return new File( "TestSrc" );
162 }
163
164 private String[] getSuiteXmlFileStrings()
165 {
166 return new String[]{ "A1", "A2" };
167 }
168 }