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.Assert;
23 import junit.framework.TestCase;
24 import org.apache.maven.surefire.booter.*;
25 import org.apache.maven.surefire.cli.CommandLineOption;
26 import org.apache.maven.surefire.report.ReporterConfiguration;
27 import org.apache.maven.surefire.testset.*;
28 import org.apache.maven.surefire.util.RunOrder;
29
30 import java.io.File;
31 import java.io.FileInputStream;
32 import java.io.IOException;
33 import java.util.*;
34
35 import static org.apache.maven.surefire.cli.CommandLineOption.LOGGING_LEVEL_DEBUG;
36 import static org.apache.maven.surefire.cli.CommandLineOption.REACTOR_FAIL_FAST;
37 import static org.apache.maven.surefire.cli.CommandLineOption.SHOW_ERRORS;
38
39
40
41
42
43
44 public class BooterDeserializerProviderConfigurationTest
45 extends TestCase
46 {
47
48 public static final TypeEncodedValue aTestTyped = new TypeEncodedValue( String.class.getName(), "aTest" );
49
50 private static final String aUserRequestedTest = "aUserRequestedTest";
51
52 private static final String aUserRequestedTestMethod = "aUserRequestedTestMethod";
53
54 private static final int rerunFailingTestsCount = 3;
55
56 private final List<CommandLineOption> cli =
57 Arrays.asList( LOGGING_LEVEL_DEBUG, SHOW_ERRORS, REACTOR_FAIL_FAST );
58
59 private static ClassLoaderConfiguration getForkConfiguration()
60 {
61 return new ClassLoaderConfiguration( true, false );
62 }
63
64
65 public void testDirectoryScannerParams()
66 throws IOException
67 {
68
69 File aDir = new File( "." );
70 List<String> includes = new ArrayList<String>();
71 List<String> excludes = new ArrayList<String>();
72 includes.add( "abc" );
73 includes.add( "cde" );
74 excludes.add( "xx1" );
75 excludes.add( "xx2" );
76
77 ClassLoaderConfiguration forkConfiguration = getForkConfiguration();
78 final StartupConfiguration testStartupConfiguration = getTestStartupConfiguration( forkConfiguration );
79 ProviderConfiguration providerConfiguration = getReloadedProviderConfiguration();
80 ProviderConfiguration read = saveAndReload( providerConfiguration, testStartupConfiguration, false );
81
82 Assert.assertEquals( aDir, read.getBaseDir() );
83 Assert.assertEquals( includes.get( 0 ), read.getIncludes().get( 0 ) );
84 Assert.assertEquals( includes.get( 1 ), read.getIncludes().get( 1 ) );
85 Assert.assertEquals( excludes.get( 0 ), read.getExcludes().get( 0 ) );
86 Assert.assertEquals( excludes.get( 1 ), read.getExcludes().get( 1 ) );
87 assertEquals( cli, providerConfiguration.getMainCliOptions() );
88 }
89
90 public void testReporterConfiguration()
91 throws IOException
92 {
93 DirectoryScannerParameters directoryScannerParameters = getDirectoryScannerParametersWithoutSpecificTests();
94 ClassLoaderConfiguration forkConfiguration = getForkConfiguration();
95
96 ProviderConfiguration providerConfiguration = getTestProviderConfiguration( directoryScannerParameters, false );
97
98 final StartupConfiguration testProviderConfiguration = getTestStartupConfiguration( forkConfiguration );
99 ProviderConfiguration reloaded = saveAndReload( providerConfiguration, testProviderConfiguration, false );
100
101 assertTrue( reloaded.getReporterConfiguration().isTrimStackTrace() );
102 assertNotNull( reloaded.getReporterConfiguration().getReportsDirectory() );
103 assertEquals( cli, providerConfiguration.getMainCliOptions() );
104 }
105
106 public void testTestArtifact()
107 throws IOException
108 {
109 ProviderConfiguration reloaded = getReloadedProviderConfiguration();
110
111 Assert.assertEquals( "5.0", reloaded.getTestArtifact().getVersion() );
112 Assert.assertEquals( "ABC", reloaded.getTestArtifact().getClassifier() );
113 assertEquals( cli, reloaded.getMainCliOptions() );
114 }
115
116 public void testTestRequest()
117 throws IOException
118 {
119 ProviderConfiguration reloaded = getReloadedProviderConfiguration();
120
121 TestRequest testSuiteDefinition = reloaded.getTestSuiteDefinition();
122 List<?> suiteXmlFiles = testSuiteDefinition.getSuiteXmlFiles();
123 File[] expected = getSuiteXmlFiles();
124 Assert.assertEquals( expected[0], suiteXmlFiles.get( 0 ) );
125 Assert.assertEquals( expected[1], suiteXmlFiles.get( 1 ) );
126 Assert.assertEquals( getTestSourceDirectory(), testSuiteDefinition.getTestSourceDirectory() );
127 TestListResolver resolver = testSuiteDefinition.getTestListResolver();
128 Assert.assertNotNull( resolver );
129 Assert.assertFalse( resolver.isEmpty() );
130 Assert.assertEquals( aUserRequestedTest + "#" + aUserRequestedTestMethod, resolver.getPluginParameterTest() );
131 Assert.assertFalse( resolver.getIncludedPatterns().isEmpty() );
132 Assert.assertTrue( resolver.getExcludedPatterns().isEmpty() );
133 Assert.assertEquals( 1, resolver.getIncludedPatterns().size() );
134 ResolvedTest filter = resolver.getIncludedPatterns().iterator().next();
135 Assert.assertNotNull( filter );
136 Assert.assertEquals( "**/" + aUserRequestedTest, filter.getTestClassPattern() );
137 Assert.assertEquals( aUserRequestedTestMethod, filter.getTestMethodPattern() );
138 Assert.assertEquals( rerunFailingTestsCount, testSuiteDefinition.getRerunFailingTestsCount() );
139 assertEquals( cli, reloaded.getMainCliOptions() );
140 }
141
142 public void testTestForFork()
143 throws IOException
144 {
145 final ProviderConfiguration reloaded = getReloadedProviderConfiguration();
146 Assert.assertEquals( aTestTyped, reloaded.getTestForFork() );
147 assertEquals( cli, reloaded.getMainCliOptions() );
148 }
149
150 public void testTestForForkWithMultipleFiles()
151 throws IOException
152 {
153 final ProviderConfiguration reloaded = getReloadedProviderConfigurationForReadFromInStream();
154 Assert.assertNull( reloaded.getTestForFork() );
155 Assert.assertTrue( reloaded.isReadTestsFromInStream() );
156 assertEquals( cli, reloaded.getMainCliOptions() );
157 }
158
159 public void testFailIfNoTests()
160 throws IOException
161 {
162 ProviderConfiguration reloaded = getReloadedProviderConfiguration();
163 assertTrue( reloaded.isFailIfNoTests() );
164 assertEquals( cli, reloaded.getMainCliOptions() );
165 }
166
167 private ProviderConfiguration getReloadedProviderConfigurationForReadFromInStream()
168 throws IOException
169 {
170 return getReloadedProviderConfiguration( true );
171 }
172
173 private ProviderConfiguration getReloadedProviderConfiguration()
174 throws IOException
175 {
176 return getReloadedProviderConfiguration( false );
177 }
178
179 private ProviderConfiguration getReloadedProviderConfiguration( boolean readTestsFromInStream )
180 throws IOException
181 {
182 DirectoryScannerParameters directoryScannerParameters = getDirectoryScannerParametersWithoutSpecificTests();
183 ClassLoaderConfiguration forkConfiguration = getForkConfiguration();
184 ProviderConfiguration booterConfiguration =
185 getTestProviderConfiguration( directoryScannerParameters, readTestsFromInStream );
186 assertEquals( cli, booterConfiguration.getMainCliOptions() );
187 final StartupConfiguration testProviderConfiguration = getTestStartupConfiguration( forkConfiguration );
188 return saveAndReload( booterConfiguration, testProviderConfiguration, readTestsFromInStream );
189 }
190
191 private DirectoryScannerParameters getDirectoryScannerParametersWithoutSpecificTests()
192 {
193 File aDir = new File( "." );
194 List<String> includes = new ArrayList<String>();
195 List<String> excludes = new ArrayList<String>();
196 includes.add( "abc" );
197 includes.add( "cde" );
198 excludes.add( "xx1" );
199 excludes.add( "xx2" );
200
201 return new DirectoryScannerParameters( aDir, includes, excludes, Collections.<String>emptyList(), true,
202 RunOrder.asString( RunOrder.DEFAULT ) );
203 }
204
205 private ProviderConfiguration saveAndReload( ProviderConfiguration booterConfiguration,
206 StartupConfiguration testProviderConfiguration,
207 boolean readTestsFromInStream )
208 throws IOException
209 {
210 final ForkConfiguration forkConfiguration = ForkConfigurationTest.getForkConfiguration( (String) null );
211 PropertiesWrapper props = new PropertiesWrapper( new HashMap<String, String>() );
212 BooterSerializer booterSerializer = new BooterSerializer( forkConfiguration );
213 Object test;
214 if ( readTestsFromInStream )
215 {
216 test = null;
217 }
218 else
219 {
220 test = "aTest";
221 }
222 final File propsTest = booterSerializer.serialize( props, booterConfiguration, testProviderConfiguration, test,
223 readTestsFromInStream, 51L );
224 BooterDeserializer booterDeserializer = new BooterDeserializer( new FileInputStream( propsTest ) );
225 assertEquals( 51L, (Object) booterDeserializer.getPluginPid() );
226 return booterDeserializer.deserialize();
227 }
228
229 private ProviderConfiguration getTestProviderConfiguration( DirectoryScannerParameters directoryScannerParameters,
230 boolean readTestsFromInStream )
231 {
232 File cwd = new File( "." );
233 ReporterConfiguration reporterConfiguration = new ReporterConfiguration( cwd, true );
234 TestRequest testSuiteDefinition =
235 new TestRequest( getSuiteXmlFileStrings(), getTestSourceDirectory(),
236 new TestListResolver( aUserRequestedTest + "#aUserRequestedTestMethod" ),
237 rerunFailingTestsCount );
238 RunOrderParameters runOrderParameters = new RunOrderParameters( RunOrder.DEFAULT, null );
239 return new ProviderConfiguration( directoryScannerParameters, runOrderParameters, true, reporterConfiguration,
240 new TestArtifactInfo( "5.0", "ABC" ), testSuiteDefinition, new HashMap<String, String>(), aTestTyped,
241 readTestsFromInStream, cli, 0, Shutdown.DEFAULT, 0 );
242 }
243
244 private StartupConfiguration getTestStartupConfiguration( ClassLoaderConfiguration classLoaderConfiguration )
245 {
246 ClasspathConfiguration classpathConfiguration = new ClasspathConfiguration( true, true );
247
248 return new StartupConfiguration( "com.provider", classpathConfiguration, classLoaderConfiguration, false,
249 false );
250 }
251
252 private File getTestSourceDirectory()
253 {
254 return new File( "TestSrc" );
255 }
256
257 private File[] getSuiteXmlFiles()
258 {
259 return new File[]{ new File( "A1" ), new File( "A2" ) };
260 }
261
262 private List<String> getSuiteXmlFileStrings()
263 {
264 return Arrays.asList( "A1", "A2" );
265 }
266 }