4

To simplify what I'm asking: what is a test failure and how do I rectify it?

I'm new to Maven, and I'm trying to get the graphical plotting application Jzy3d to work on my computer. I've updated all of the plugins to be the newest versions in the POM files for the parent and child modules, as well as checking that Maven is pointing to the newest JRE I have installed (which it is).

My dependency trees are also all fine, which covers many of the avenues for which I have seen this error on this forum and elsewhere.

I simply cannot isolate the issue.

The error message when running mvn package -e is as follows:

D:\Program Files\jzy3d-api-master>mvn package -e 
[INFO] Error stacktraces are turned on. 
[INFO] Scanning for projects... 
[INFO]
------------------------------------------------------------------------ 
[INFO] Reactor Build Order: 
[INFO] 
[INFO] Jzy3d Master Project 
[INFO] JDT core (fork of https://github.com/yonatang/JDT) 
[INFO] Jzy3d API 
[INFO] Jzy3d SWT Tools 
[INFO] Jzy3d Tutorials 
[INFO] 
[INFO]
------------------------------------------------------------------------ 
[INFO] Building Jzy3d Master Project 0.9.2-SNAPSHOT 
[INFO]
------------------------------------------------------------------------ 
[INFO] 
[INFO]
------------------------------------------------------------------------ 
[INFO] Building JDT core (fork of https://github.com/yonatang/JDT)
0.9.2-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ jzy3d-jdt-core --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] skip non existing resourceDirectory D:\Program Files\jzy3d-api-master\jzy3d-jdt-core\src\main\resources 
[INFO] 
[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ jzy3d-jdt-core --- 
[INFO] Nothing to compile - all classes are up to date 
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ jzy3d-jdt-core --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] Copying 18 resources 
[INFO] 
[INFO] --- maven-compiler-plugin:3.3:testCompile (default-testCompile) @ jzy3d-jdt-core --- 
[INFO] Nothing to compile - all classes are up to date 
[INFO] 
[INFO] --- maven-surefire-plugin:2.19.1:test (default-test) @ jzy3d-jdt-core --- 
[INFO] Surefire report directory: D:\Program Files\jzy3d-api-master\jzy3d-jdt-core\target\surefire-reports
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running il.ac.idc.jdt.SmokeTest Configuring TestNG with: TestNG60Configurator Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 2.639 sec <<< FAILURE! - in il.ac.idc.jdt.SmokeTest shouldRunOnExampleData(il.ac.idc.jdt.SmokeTest)  Time elapsed: 0.412 sec  <<< FAILURE! java.lang.AssertionError: t1_1000.tsin trangulation is correct for smf
        at il.ac.idc.jdt.SmokeTest.shouldRunOnExampleData(SmokeTest.java:28)
Results :
Failed tests:   SmokeTest.shouldRunOnExampleData:28 t1_1000.tsin trangulation is correct for smf
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0

[INFO]
------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] Jzy3d Master Project ............................... SUCCESS [  0.022 s] 
[INFO] JDT core (fork of https://github.com/yonatang/JDT) . FAILURE [  8.853 s] 
[INFO] Jzy3d API .......................................... SKIPPED 
[INFO] Jzy3d SWT Tools .................................... SKIPPED 
[INFO] Jzy3d Tutorials .................................... SKIPPED 
[INFO]
------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO]
------------------------------------------------------------------------ 
[INFO] Total time: 9.772 s 
[INFO] Finished at: 2016-01-13T11:56:26+00:00 
[INFO] Final Memory: 8M/22M 
[INFO]
------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project jzy3d-jdt-core: There are test failures. 
[ERROR] 
[ERROR] Please refer to D:\Program Files\jzy3d-api-master\jzy3d-jdt-core\target\surefire-reports for the individual test results. 
[ERROR] -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project jzy3d-jdt-core: There are test failures.
Please refer to D:\Program Files\jzy3d-api-master\jzy3d-jdt-core\target\surefire-reports for the individual test results.
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) Caused by: org.apache.maven.plugin.MojoFailureException: There are test failures.
Please refer to D:\Program Files\jzy3d-api-master\jzy3d-jdt-core\target\surefire-reports for the individual test results.
        at org.apache.maven.plugin.surefire.SurefireHelper.reportExecution(SurefireHelper.java:91)
        at org.apache.maven.plugin.surefire.SurefirePlugin.handleSummary(SurefirePlugin.java:320)
        at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:892)
        at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:755)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
        ... 20 more [ERROR] [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException [ERROR] [ERROR] After correcting the problems, you can resume the build with the command [ERROR]   mvn <goals> -rf :jzy3d-jdt-core

My parent POM file is:

<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>

    <groupId>org.jzy3d</groupId>
    <artifactId>jzy3d-master</artifactId>
    <version>0.9.2-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Jzy3d Master Project</name>
  <url>http://www.jzy3d.org</url>
  <description>A java API to draw 3d charts.</description>
  <developers>
    <developer>
      <id>martin.pernollet</id>
      <name>Martin Pernollet</name>
      <email>martin@jzy3d.org</email>
      <url>http://twitter.com/jzy3d</url>
    </developer>
    <developer>
      <id>nils.hoffmann</id>
      <name>Nils Hoffmann</name>
    </developer>
    <developer>
      <id>juan.barandiaran</id>
      <name>Juan Barandiaran</name>
    </developer>
  </developers>

  <licenses>
    <license>
      <name>The (New) BSD License</name>
      <url>http://www.opensource.org/licenses/bsd-license.php</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <scm>
    <connection>scm:git:git://github.com/jzy3d/jzy3d-api</connection>
  </scm>
  <issueManagement>
    <system>Github</system>
    <url>https://github.com/jzy3d/jzy3d-api/issues</url>
  </issueManagement>

  <modules>
      <module>jzy3d-api</module>
      <!-- <module>jzy3d-javafx</module> -->
      <module>jzy3d-swt</module>

      <module>jzy3d-jdt-core</module>
      <module>jzy3d-tutorials</module>
  </modules>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <version.jzy3d>0.9.2-SNAPSHOT</version.jzy3d>
    <version.java.source>1.6</version.java.source>
    <version.java.target>1.6</version.java.target>
        <version.mvn.compiler>3.0</version.mvn.compiler>
        <version.mvn.ftp>1.0-beta-6</version.mvn.ftp>
        <version.mvn.deploy>2.4</version.mvn.deploy>
    <version.mvn.javadoc>2.9.1</version.mvn.javadoc>
        <version.libs.junit>4.10</version.libs.junit>
        <version.libs.swt>4.2.1</version.libs.swt>
    </properties>

  <distributionManagement>
    <repository>
      <id>jzy3d-ftp</id>
      <name>Jzy3d Maven Folder</name>
      <url>ftp://ftp.cluster013.ovh.net/maven/releases</url>
    </repository>
    <snapshotRepository>
      <id>jzy3d-ftp</id>
      <name>Jzy3d Maven Folder SNAPSHOTS</name>
      <url>ftp://ftp.cluster013.ovh.net/maven/snapshots</url>
    </snapshotRepository>
  </distributionManagement>

<repositories>
  <repository>
     <id>jzy3d-snapshots</id>
     <name>Jzy3d Snapshots</name>
     <url>http://maven.jzy3d.org/snapshots</url>
  </repository>
  <repository>
     <id>jzy3d-releases</id>
     <name>Jzy3d Snapshots</name>
     <url>http://maven.jzy3d.org/releases</url>
  </repository>
</repositories>

  <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                  <version>3.3</version>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>

            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-javadoc-plugin</artifactId>
              <version>2.10.3</version>
              <configuration>
                <stylesheetfile>jzy3d-api/doc/layout.css</stylesheetfile>
              </configuration>
            </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19.1</version>
     </plugin>

 <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.10</version>
        <executions>
          <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>[ groupId ]</groupId>
                  <artifactId>[ artifactId ]</artifactId>
                  <version>[ version ]</version>
                  <type>[ packaging ]</type>
                  <classifier> [classifier - optional] </classifier>
                  <overWrite>[ true or false ]</overWrite>
                  <outputDirectory>[ output directory ]</outputDirectory>
                  <destFileName>[ filename ]</destFileName>
                </artifactItem>
              </artifactItems>
              <!-- other configurations here -->
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>
    </pluginManagement>


    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
          <artifactId>wagon-ftp</artifactId>
          <version>${version.mvn.ftp}</version>
      </extension>
    </extensions>
  </build>
</project>

And the child POM for which the error message keeps running (jzy3d-jdt-core) is:

<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.jzy3d</groupId>
        <artifactId>jzy3d-master</artifactId>
        <version>0.9.2-SNAPSHOT</version>
    </parent>
    <artifactId>jzy3d-jdt-core</artifactId>

    <name>JDT core (fork of https://github.com/yonatang/JDT)</name>
    <description>Java Delaunay Triangulation Core Library</description>

    <properties>
        <testng.version>6.5.2</testng.version>
        <hamcrest.version>1.3.RC2</hamcrest.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.1</version>
        </dependency>
Tunaki
  • 132,869
  • 46
  • 340
  • 423
TheJerseyChemist
  • 43
  • 1
  • 1
  • 7

3 Answers3

3

To simplify what I'm asking: what is a test failure and how do I rectify it?

During the build of a Maven project, it executes automatically what are called unit tests. Those are Java classes whose purpose are to verify the behaviour of specific methods of the project. In this case, it turns out that one of the test is failing in your build.


Update 12 March 2016: the issue mentioned in this post was fixed!


There is indeed a problem with the tests of the jzy3d library when run on Windows. I checked out the master of their GitHub and I had the same error as you.

The reason is that, during the unit tests, the library is checking if the contents of two files are equal. However, one file is created with the line separator of the current OS, while the control file has Unix line separator.

If you take a look at the file jzy3d-jdt-core\src\test\resources\outputs\t1_1000.tsin_result.tsin, you will notice that it uses the Unix \n line separator. The shouldRunOnExampleData test that is failing is creating a temporary file to verify against that control file. On my Windows machine, this temporary file was created in C:\Users\{UserName}\AppData\Local\Temp\jdt-4971059362436436156.smf and, if opened, you can see that it uses Windows line separator \r\n. Hence, the two files are not equal and the test fails.

A possible solution, targeted at the developers of that library, is to use IOUtils.contentEqualsIgnoreEOL inside the test shouldRunOnExampleData, since this method does not check for the line endings when comparing two input streams. I created the issue 52 for this problem and submitted a pull request, that is now merged and closed.

A solution for you, user of the library, is either:

  • to change the line endings of each file inside jzy3d-jdt-core\src\test\resources\outputs with Windows line separator. If you are using Notepad++ to open the file, you can simply change the line-endings by going to "Edit > EOL Conversion > Windows format" and save the file.
  • to fix the code by using contentEqualsIgnoreEOL inside the class SmokeTest (the arguments then need to be wrapped with an InputStreamReader).
  • to skip the tests with mvn clean install -DskipTests=true.

In my case, I changed the code of the test to ignore the line endings. The rest of the build went fine.

Tunaki
  • 132,869
  • 46
  • 340
  • 423
  • Tunaki how do I open tsin or smf files? – TheJerseyChemist Jan 17 '16 at 23:05
  • @TheJsyChemist You can open it with any editor, it's actually just a text file. I used Notepad++. If you use Notepad++, you can change the line-endings easily by going to "Edit > EOL > Change to ...". – Tunaki Jan 17 '16 at 23:05
  • Using Notepad++ to change the EOL characters did not work in my case, although I am working on your contentEqualsIgnoreEOL solution instead. I'm currently trying to familiarise myself/ learn Java by editing programmes useful for my research, so apologies if I'm a bit slow in accepting your answer as correct! – TheJerseyChemist Jan 18 '16 at 13:31
  • @TheJsyChemist No need to apologize :)! There are two occurences to change inside this class. The previous parameter took an InputStream but you can convert them to a Reader (which is what `contentEqualsIgnoreEOL` takes as argument) by adding a call to `new InputStreamReader(...)`. – Tunaki Jan 18 '16 at 13:51
0

A test failure is a negative outcome on an assertion made when a test is implemented. You basically get an unexpected result back from a called method or a field you are reading.

-> it is broken and it has to be fixed. That does not mean you have to fix is.

mvn package -Dmaven.test.skip=true

might help building the sources.

But instead of building the sources yourself, you could just download the binaries. These seem to be available on the web page as well.

Florian Salihovic
  • 3,921
  • 2
  • 19
  • 26
  • Using the command given above still doesn't work, I still end up with the same message "Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project jzy3d-jdt-core: There are test failures." – TheJerseyChemist Jan 17 '16 at 22:18
0

When I run mvn package -e on fresh clones of either the master or the 0.9.1 branch of jzy3d, all tests pass and the maven build is successful.

From your output above, it's the shouldRunOnExampleData test in src/test/java/il/ac/idc/jdt/SmokeTest.java (in the jzy3d-jdt-core submodule) that is failing for you. Looking at the source code of that test, it's pretty clear that it was designed to run on some flavor of Unix, since it references hard coded paths "/inputs/" and "/outputs/".

Also from your output above, it's clear that you are running on some flavor Windows, so it's not terribly surprising that the test does not pass for you. If you want to make the test pass, you might change those to "\\inputs\\" and "\\outputs\\", respectively, or use the more flexible File.separator that should work for every OS.

If you don't care about the tests passing, and just want to build the jar files produced by mvn package -e, then you can instead run mvn package -e -DskipTests. (Setting -Dmaven.test.skip=true should also have worked; see the Maven documentation on skipping tests.)

palimpsestor
  • 1,038
  • 1
  • 8
  • 28
  • you probably meant package and not page. Also, -DskipTests must be followed by =true otherwise will not work. Hope that can improve your already good answer. – A_Di-Matteo Jan 17 '16 at 22:38
  • Thanks for the typo correction. Re `skipTests`, it does indeed work without explicitly adding `=true`. – palimpsestor Jan 17 '16 at 22:40
  • This is incorrect, the slashes are not the problem, Java handles that automatically. – Tunaki Jan 17 '16 at 23:29