You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2015/09/28 02:07:07 UTC

[4/4] maven-surefire git commit: [SUREFIRE-1144] Time for testsuite on commandline does not suit with the time value given in the report file

[SUREFIRE-1144] Time for testsuite on commandline does not suit with the time value given in the report file


Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/feda0885
Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/feda0885
Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/feda0885

Branch: refs/heads/master
Commit: feda08851f48a6467bd681449eaea1635051bc3b
Parents: ce880f1
Author: Tibor17 <ti...@lycos.com>
Authored: Mon Sep 28 02:03:53 2015 +0200
Committer: Tibor17 <ti...@lycos.com>
Committed: Mon Sep 28 02:03:53 2015 +0200

----------------------------------------------------------------------
 .../surefire/report/StatelessXmlReporter.java   | 57 +-------------
 .../report/StatelessXmlReporterTest.java        |  3 +-
 .../surefire/its/XmlReporterRunTimeIT.java      | 32 ++++----
 .../its/jiras/Surefire1144XmlRunTimeIT.java     | 58 ++++++++++++++
 .../test/resources/runorder-parallel/pom.xml    | 10 +--
 .../src/test/java/runorder/parallel/Test1.java  |  2 +-
 .../resources/surefire-1144-xml-runtime/pom.xml | 63 +++++++++++++++
 .../src/test/java/surefire1144/Test1.java       | 82 ++++++++++++++++++++
 8 files changed, 229 insertions(+), 78 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/feda0885/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
----------------------------------------------------------------------
diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
index 3a8dc2c..1489f20 100644
--- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
+++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java
@@ -129,7 +129,7 @@ public class StatelessXmlReporter
             ppw.setEncoding( ENCODING );
 
             createTestSuiteElement( ppw, testSetReportEntry, testSetStats, reportNameSuffix,
-                                    testSetStats.elapsedTimeAsString( getRunTimeForAllTests( methodRunHistoryMap ) ) );
+                                    testSetReportEntry.elapsedTimeAsString() );
 
             showProperties( ppw );
 
@@ -268,61 +268,6 @@ public class StatelessXmlReporter
         return DefaultReporterFactory.getTestResultType( testResultTypeList, rerunFailingTestsCount );
     }
 
-    /**
-     * Get run time for the entire test suite (test class)
-     * For a successful/failed/error test, the run time is the first run
-     * For a flaky test, the run time is the first successful run's time
-     * The run time for the entire test class is the sum of all its test methods
-     *
-     *
-     * @param methodRunHistoryMap the input map between test method name and the list of all its runs
-     *                            in a given test class
-     * @return the run time for the entire test class
-     */
-    private int getRunTimeForAllTests( Map<String, List<WrappedReportEntry>> methodRunHistoryMap )
-    {
-        int totalTimeForSuite = 0;
-        for ( Map.Entry<String, List<WrappedReportEntry>> entry : methodRunHistoryMap.entrySet() )
-        {
-            List<WrappedReportEntry> methodEntryList = entry.getValue();
-            if ( methodEntryList == null )
-            {
-                throw new IllegalStateException( "Get null test method run history" );
-            }
-
-            if ( !methodEntryList.isEmpty() )
-            {
-                TestResultType resultType = getTestResultType( methodEntryList );
-
-                switch ( resultType )
-                {
-                    case success:
-                    case error:
-                    case failure:
-                        // Get the first run's time for failure/error/success runs
-                        totalTimeForSuite = totalTimeForSuite + methodEntryList.get( 0 ).getElapsed();
-                        break;
-                    case flake:
-                        // Get the first successful run's time for flaky runs
-                        for ( WrappedReportEntry singleRunEntry : methodEntryList )
-                        {
-                            if ( singleRunEntry.getReportEntryType() == ReportEntryType.SUCCESS )
-                            {
-                                totalTimeForSuite = totalTimeForSuite + singleRunEntry.getElapsed();
-                                break;
-                            }
-                        }
-                        break;
-                    case skipped:
-                        break;
-                    default:
-                        throw new IllegalStateException( "Get unknown test result type" );
-                }
-            }
-        }
-        return totalTimeForSuite;
-    }
-
     private Map<String, List<WrappedReportEntry>> getAddMethodRunHistoryMap( String testClassName )
     {
         Map<String, List<WrappedReportEntry>> methodRunHistoryMap = testClassMethodRunHistoryMap.get( testClassName );

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/feda0885/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java
----------------------------------------------------------------------
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java
index e6e3d1a..09fa1d1 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporterTest.java
@@ -230,8 +230,7 @@ public class StatelessXmlReporterTest
 
         Xpp3Dom testSuite = Xpp3DomBuilder.build( new InputStreamReader( fileInputStream, "UTF-8" ) );
         assertEquals( "testsuite", testSuite.getName() );
-        // 0.019 = 0.012 + 0.005 +0.002
-        assertEquals( "0.019", testSuite.getAttribute( "time" ) );
+        assertEquals( "0.012", testSuite.getAttribute( "time" ) );
         Xpp3Dom properties = testSuite.getChild( "properties" );
         assertEquals( System.getProperties().size(), properties.getChildCount() );
         Xpp3Dom child = properties.getChild( 1 );

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/feda0885/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/XmlReporterRunTimeIT.java
----------------------------------------------------------------------
diff --git a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/XmlReporterRunTimeIT.java b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/XmlReporterRunTimeIT.java
index 56cfc43..d96cf61 100644
--- a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/XmlReporterRunTimeIT.java
+++ b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/XmlReporterRunTimeIT.java
@@ -20,15 +20,15 @@ package org.apache.maven.surefire.its;
  */
 
 import org.apache.maven.plugins.surefire.report.ReportTestSuite;
-import org.apache.maven.surefire.its.fixture.HelperAssertions;
 import org.apache.maven.surefire.its.fixture.OutputValidator;
 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
 import org.junit.Test;
 
-import java.io.File;
-import java.util.List;
-
-import static org.junit.Assert.assertTrue;
+import static org.apache.maven.surefire.its.fixture.HelperAssertions.extractReports;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.greaterThanOrEqualTo;
+import static org.hamcrest.Matchers.lessThan;
 
 /**
  * Test reported runtime
@@ -42,26 +42,32 @@ public class XmlReporterRunTimeIT
     public void testForkModeAlways()
         throws Exception
     {
-        OutputValidator outputValidator = unpack( "/runorder-parallel" ).parallelMethods().executeTest();
+        // just generate .surefire-<hash> in order to apply runOrder
+        unpack( "/runorder-parallel" )
+            .executeTest()
+            .verifyErrorFree( 9 );
+
+        // now assert test results match expected values
+        OutputValidator outputValidator = unpack( "/runorder-parallel" )
+            .executeTest()
+            .verifyErrorFree( 9 );
 
-        List<ReportTestSuite> reports = HelperAssertions.extractReports( new File[]{ outputValidator.getBaseDir() } );
-        for ( ReportTestSuite report : reports )
+        for ( ReportTestSuite report : extractReports( outputValidator.getBaseDir() ) )
         {
             if ( "runorder.parallel.Test1".equals( report.getFullClassName() ) )
             {
-                assertTrue( "runorder.parallel.Test1 report.getTimeElapsed found:" + report.getTimeElapsed(),
-                            report.getTimeElapsed() >= 1.2f );
+                assertThat( "runorder.parallel.Test1 report.getTimeElapsed found:" + report.getTimeElapsed(),
+                            report.getTimeElapsed(), allOf( greaterThanOrEqualTo( 0.6f ), lessThan( 0.7f ) ) );
             }
             else if ( "runorder.parallel.Test2".equals( report.getFullClassName() ) )
             {
-                assertTrue( "runorder.parallel.Test2 report.getTimeElapsed found:" + report.getTimeElapsed(),
-                            report.getTimeElapsed() >= 0.9f );
+                assertThat( "runorder.parallel.Test2 report.getTimeElapsed found:" + report.getTimeElapsed(),
+                            report.getTimeElapsed(), allOf( greaterThanOrEqualTo( 0.5f ), lessThan( 0.6f ) ) );
             }
             else
             {
                 System.out.println( "report = " + report );
             }
         }
-
     }
 }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/feda0885/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1144XmlRunTimeIT.java
----------------------------------------------------------------------
diff --git a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1144XmlRunTimeIT.java b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1144XmlRunTimeIT.java
new file mode 100644
index 0000000..d81d7c2
--- /dev/null
+++ b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1144XmlRunTimeIT.java
@@ -0,0 +1,58 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.plugins.surefire.report.ReportTestSuite;
+import org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.apache.maven.surefire.its.fixture.HelperAssertions.extractReports;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.greaterThanOrEqualTo;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.is;
+
+/**
+ * Test that runtime reported on console matches runtime in XML
+ *
+ * @author <a href="mailto:eloussi2@illinois.edu">Lamyaa Eloussi</a>
+ */
+public class Surefire1144XmlRunTimeIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    @Test
+    public void testXmlRunTime()
+        throws Exception
+    {
+        OutputValidator outputValidator = unpack( "/surefire-1144-xml-runtime" ).forkOnce().executeTest();
+
+        List<ReportTestSuite> reports = extractReports( outputValidator.getBaseDir() );
+        assertThat( reports, hasSize( 1 ) );
+
+        ReportTestSuite report = reports.get( 0 );
+        float xmlTime = report.getTimeElapsed();
+
+        assertThat( xmlTime, is(greaterThanOrEqualTo( 1.6f ) ) ); //include beforeClass and afterClass
+        outputValidator.verifyTextInLog( Float.toString( xmlTime ) ); //same time in console
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/feda0885/surefire-integration-tests/src/test/resources/runorder-parallel/pom.xml
----------------------------------------------------------------------
diff --git a/surefire-integration-tests/src/test/resources/runorder-parallel/pom.xml b/surefire-integration-tests/src/test/resources/runorder-parallel/pom.xml
index f876e2b..f5c967d 100644
--- a/surefire-integration-tests/src/test/resources/runorder-parallel/pom.xml
+++ b/surefire-integration-tests/src/test/resources/runorder-parallel/pom.xml
@@ -15,10 +15,6 @@
     </dependency>
   </dependencies>
 
-  <properties>
-    <runOrder>balanced</runOrder>
-  </properties>
-
   <build>
     <plugins>
       <plugin>
@@ -34,8 +30,10 @@
         <artifactId>maven-surefire-plugin</artifactId>
         <version>${surefire.version}</version>
         <configuration>
-          <runOrder>${runOrder}</runOrder>
-          <threadCount>2</threadCount>
+          <runOrder>balanced</runOrder>
+          <parallel>classesAndMethods</parallel>
+          <threadCountClasses>2</threadCountClasses>
+          <threadCountMethods>6</threadCountMethods>
           <perCoreThreadCount>false</perCoreThreadCount>
           <includes>
             <include>**/Test*.java</include>

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/feda0885/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test1.java
----------------------------------------------------------------------
diff --git a/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test1.java b/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test1.java
index 8fbddd6..5429fda 100755
--- a/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test1.java
+++ b/surefire-integration-tests/src/test/resources/runorder-parallel/src/test/java/runorder/parallel/Test1.java
@@ -38,7 +38,7 @@ public class Test1
         {
             do
             {
-                Thread.sleep( ms );
+                Thread.sleep( 1L );
             }
             while ( System.currentTimeMillis() < target );
         }

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/feda0885/surefire-integration-tests/src/test/resources/surefire-1144-xml-runtime/pom.xml
----------------------------------------------------------------------
diff --git a/surefire-integration-tests/src/test/resources/surefire-1144-xml-runtime/pom.xml b/surefire-integration-tests/src/test/resources/surefire-1144-xml-runtime/pom.xml
new file mode 100644
index 0000000..799f87e
--- /dev/null
+++ b/surefire-integration-tests/src/test/resources/surefire-1144-xml-runtime/pom.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.maven.surefire</groupId>
+    <artifactId>it-parent</artifactId>
+    <version>1.0</version>
+  </parent>
+
+  <groupId>org.apache.maven.plugins.surefire</groupId>
+  <artifactId>surefire1144-xml-runtime</artifactId>
+  <version>1.0</version>
+
+  <url>http://maven.apache.org</url>
+
+  <contributors>
+    <contributor>
+      <name>lamyaa (Lamyaa Eloussi)</name>
+      <email>eloussi2@illinois.edu</email>
+    </contributor>
+  </contributors>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.0</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/feda0885/surefire-integration-tests/src/test/resources/surefire-1144-xml-runtime/src/test/java/surefire1144/Test1.java
----------------------------------------------------------------------
diff --git a/surefire-integration-tests/src/test/resources/surefire-1144-xml-runtime/src/test/java/surefire1144/Test1.java b/surefire-integration-tests/src/test/resources/surefire-1144-xml-runtime/src/test/java/surefire1144/Test1.java
new file mode 100644
index 0000000..047a741
--- /dev/null
+++ b/surefire-integration-tests/src/test/resources/surefire-1144-xml-runtime/src/test/java/surefire1144/Test1.java
@@ -0,0 +1,82 @@
+package surefire1144;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class Test1
+{
+    static void sleep( int ms )
+    {
+        long target = System.currentTimeMillis() + ms;
+        try
+        {
+            do
+            {
+                Thread.sleep( 1L );
+            }
+            while ( System.currentTimeMillis() < target );
+        }
+        catch ( InterruptedException e )
+        {
+            throw new RuntimeException( e );
+        }
+    }
+
+    static void printTimeAndSleep( String msg, int ms )
+    {
+        System.out.println( msg + " started @ " + System.currentTimeMillis() );
+        sleep( ms );
+    }
+
+    @Test
+    public void testSleep100()
+    {
+        printTimeAndSleep( "Test1.sleep100", 100 );
+    }
+
+    @Test
+    public void testSleep200()
+    {
+        printTimeAndSleep( "Test1.sleep200", 200 );
+    }
+
+    @Test
+    public void testSleep300()
+    {
+        printTimeAndSleep( "Test1.sleep300", 300 );
+    }
+
+    @BeforeClass
+    public static void setUpBeforeClass()
+        throws Exception
+    {
+        printTimeAndSleep( "beforeClass sleep 500", 500 );
+    }
+
+    @AfterClass
+    public static void tearDownAfterClass()
+        throws Exception
+    {
+        printTimeAndSleep( "afterClass sleep 500", 500 );
+    }
+}