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 java.io.File;
23 import java.io.FileInputStream;
24 import java.io.IOException;
25 import java.util.ArrayList;
26 import java.util.Arrays;
27 import java.util.List;
28 import java.util.Properties;
29 import org.apache.maven.surefire.booter.BooterDeserializer;
30 import org.apache.maven.surefire.booter.ClassLoaderConfiguration;
31 import org.apache.maven.surefire.booter.ClasspathConfiguration;
32 import org.apache.maven.surefire.booter.ProviderConfiguration;
33 import org.apache.maven.surefire.booter.StartupConfiguration;
34 import org.apache.maven.surefire.booter.SystemPropertyManager;
35 import org.apache.maven.surefire.booter.TypeEncodedValue;
36 import org.apache.maven.surefire.report.ReporterConfiguration;
37 import org.apache.maven.surefire.testset.DirectoryScannerParameters;
38 import org.apache.maven.surefire.testset.TestArtifactInfo;
39 import org.apache.maven.surefire.testset.TestRequest;
40 import org.apache.maven.surefire.util.RunOrder;
41
42 import junit.framework.Assert;
43 import junit.framework.TestCase;
44
45
46
47
48
49
50 public class BooterDeserializerProviderConfigurationTest
51 extends TestCase
52 {
53
54 public static final TypeEncodedValue aTestTyped = new TypeEncodedValue( String.class.getName(), "aTest" );
55
56 private final String aUserRequestedTest = "aUserRequestedTest";
57
58 private static ClassLoaderConfiguration getForkConfiguration()
59 {
60 return new ClassLoaderConfiguration( true, false );
61 }
62
63
64 public void testDirectoryScannerParams()
65 throws IOException
66 {
67
68 File aDir = new File( "." );
69 List includes = new ArrayList();
70 List excludes = new ArrayList();
71 includes.add( "abc" );
72 includes.add( "cde" );
73 excludes.add( "xx1" );
74 excludes.add( "xx2" );
75
76 ClassLoaderConfiguration forkConfiguration = getForkConfiguration();
77 final StartupConfiguration testStartupConfiguration = getTestStartupConfiguration( forkConfiguration );
78 ProviderConfiguration providerConfiguration = getReloadedProviderConfiguration();
79 ProviderConfiguration read = saveAndReload( providerConfiguration, testStartupConfiguration );
80
81 Assert.assertEquals( aDir, read.getBaseDir() );
82 Assert.assertEquals( includes.get( 0 ), read.getIncludes().get( 0 ) );
83 Assert.assertEquals( includes.get( 1 ), read.getIncludes().get( 1 ) );
84 Assert.assertEquals( excludes.get( 0 ), read.getExcludes().get( 0 ) );
85 Assert.assertEquals( excludes.get( 1 ), read.getExcludes().get( 1 ) );
86
87 }
88
89 public void testReporterConfiguration()
90 throws IOException
91 {
92 DirectoryScannerParameters directoryScannerParameters = getDirectoryScannerParameters();
93 ClassLoaderConfiguration forkConfiguration = getForkConfiguration();
94
95 ProviderConfiguration providerConfiguration = getTestProviderConfiguration( directoryScannerParameters );
96
97 final StartupConfiguration testProviderConfiguration = getTestStartupConfiguration( forkConfiguration );
98 ProviderConfiguration reloaded = saveAndReload( providerConfiguration, testProviderConfiguration );
99
100 assertTrue( reloaded.getReporterConfiguration().isTrimStackTrace().booleanValue() );
101 assertNotNull( reloaded.getReporterConfiguration().getReportsDirectory() );
102 }
103
104 public void testTestArtifact()
105 throws IOException
106 {
107 ProviderConfiguration reloaded = getReloadedProviderConfiguration();
108
109 Assert.assertEquals( "5.0", reloaded.getTestArtifact().getVersion() );
110 Assert.assertEquals( "ABC", reloaded.getTestArtifact().getClassifier() );
111 }
112
113 public void testTestRequest()
114 throws IOException
115 {
116 ProviderConfiguration reloaded = getReloadedProviderConfiguration();
117
118 TestRequest testSuiteDefinition = reloaded.getTestSuiteDefinition();
119 List suiteXmlFiles = testSuiteDefinition.getSuiteXmlFiles();
120 File[] expected = getSuiteXmlFiles();
121 Assert.assertEquals( expected[0], suiteXmlFiles.get( 0 ) );
122 Assert.assertEquals( expected[1], suiteXmlFiles.get( 1 ) );
123 Assert.assertEquals( getTestSourceDirectory(), testSuiteDefinition.getTestSourceDirectory() );
124 Assert.assertEquals( aUserRequestedTest, testSuiteDefinition.getRequestedTest() );
125 }
126
127 public void testTestForFork()
128 throws IOException
129 {
130 final ProviderConfiguration reloaded = getReloadedProviderConfiguration();
131 Assert.assertEquals( aTestTyped, reloaded.getTestForFork() );
132
133 }
134
135 public void testFailIfNoTests()
136 throws IOException
137 {
138 ProviderConfiguration reloaded = getReloadedProviderConfiguration();
139 assertTrue( reloaded.isFailIfNoTests().booleanValue() );
140
141 }
142
143 private ProviderConfiguration getReloadedProviderConfiguration()
144 throws IOException
145 {
146 DirectoryScannerParameters directoryScannerParameters = getDirectoryScannerParameters();
147 ClassLoaderConfiguration forkConfiguration = getForkConfiguration();
148 ProviderConfiguration booterConfiguration = getTestProviderConfiguration( directoryScannerParameters );
149 final StartupConfiguration testProviderConfiguration = getTestStartupConfiguration( forkConfiguration );
150 return saveAndReload( booterConfiguration, testProviderConfiguration );
151 }
152
153 private DirectoryScannerParameters getDirectoryScannerParameters()
154 {
155 File aDir = new File( "." );
156 List includes = new ArrayList();
157 List excludes = new ArrayList();
158 includes.add( "abc" );
159 includes.add( "cde" );
160 excludes.add( "xx1" );
161 excludes.add( "xx2" );
162
163 return new DirectoryScannerParameters( aDir, includes, excludes, Boolean.TRUE, RunOrder.FILESYSTEM );
164 }
165
166 private ProviderConfiguration saveAndReload( ProviderConfiguration booterConfiguration,
167 StartupConfiguration testProviderConfiguration )
168 throws IOException
169 {
170 final ForkConfiguration forkConfiguration = ForkConfigurationTest.getForkConfiguration();
171 Properties props = new Properties();
172 BooterSerializer booterSerializer = new BooterSerializer( forkConfiguration, props );
173 String aTest = "aTest";
174 booterSerializer.serialize( booterConfiguration, testProviderConfiguration, aTest, "never" );
175 final File propsTest =
176 SystemPropertyManager.writePropertiesFile( props, forkConfiguration.getTempDirectory(), "propsTest", true );
177 BooterDeserializer booterDeserializer = new BooterDeserializer( new FileInputStream( propsTest ) );
178 return booterDeserializer.deserialize();
179 }
180
181 private ProviderConfiguration getTestProviderConfiguration( DirectoryScannerParameters directoryScannerParameters )
182 {
183
184 File cwd = new File( "." );
185 ReporterConfiguration reporterConfiguration = new ReporterConfiguration( cwd, Boolean.TRUE );
186 String aUserRequestedTestMethod = "aUserRequestedTestMethod";
187 TestRequest testSuiteDefinition =
188 new TestRequest( getSuiteXmlFileStrings(), getTestSourceDirectory(), aUserRequestedTest,
189 aUserRequestedTestMethod );
190 return new ProviderConfiguration( directoryScannerParameters, true, reporterConfiguration,
191 new TestArtifactInfo( "5.0", "ABC" ), testSuiteDefinition, new Properties(),
192 aTestTyped );
193 }
194
195 private StartupConfiguration getTestStartupConfiguration( ClassLoaderConfiguration classLoaderConfiguration )
196 {
197 ClasspathConfiguration classpathConfiguration = new ClasspathConfiguration( true, true );
198
199 return new StartupConfiguration( "com.provider", classpathConfiguration, classLoaderConfiguration, "never",
200 false );
201 }
202
203 private File getTestSourceDirectory()
204 {
205 return new File( "TestSrc" );
206 }
207
208 private File[] getSuiteXmlFiles()
209 {
210 return new File[]{ new File( "A1" ), new File( "A2" ) };
211 }
212
213 private List getSuiteXmlFileStrings()
214 {
215 return Arrays.asList( new Object[]{ "A1", "A2" } );
216 }
217 }