View Javadoc

1   package org.apache.maven.plugin.surefire.booterclient;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *     http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * Performs roundtrip testing of serialization/deserialization of the ProviderConfiguration
47   *
48   * @author Kristian Rosenvold
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      // ProviderConfiguration methods
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 }