Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-34129

Cannot release plugin due to injected tests failure

    • Icon: Bug Bug
    • Resolution: Not A Defect
    • Icon: Blocker Blocker
    • core
    • Apache Maven 3.3.9
      Java versions: 1.7.0_79 or 1.8.0_73 (tested with both)
      Jenkins: 1.609.1
      OS El Capitan: 10.11.2

      We cannot perform a plugin release, because two injected tests fail in the Jenkins job[0].
      The code can be found on github here[1].

      Steps to reproduce:
      You can reproduce the problem, by cloning the repository and after running mvn clean install.

      For the first test ( org.jvnet.hudson.test.junit.FailedTest.org.jvnet.hudson.test.JellyTestSuiteBuilder$JellyTestSuite):
      We understand that there is a problem with Guava, but we have no idea how to fix it. Our plugin is indirectly dependent on it.

      For the second test (org.jvnet.hudson.test.PluginAutomaticTestBuilder$CliSanityTest.testCliSanity):
      We understand that there was a compatibility problem with Java 7 vs. 8. and it was resolved (see [2]), but even though we are using Jenkins 1.609.1, we are still seeing the problem, both locally with Java 7 and 8 and on the oficial Jenkins job.

      Can we get some guidance for these problems?

      Thank you,
      Andrei Tuicu

      [0] https://jenkins.ci.cloudbees.com/job/plugins/job/JiraTestResultReporter-plugin/
      [1] https://github.com/jenkinsci/JiraTestResultReporter-plugin
      [2] https://issues.jenkins-ci.org/browse/JENKINS-23239

      Full stack trace:
      Running InjectedTest
      Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 5.139 sec <<< FAILURE! - in InjectedTest
      org.jvnet.hudson.test.JellyTestSuiteBuilder$JellyTestSuite(org.jvnet.hudson.test.junit.FailedTest) Time elapsed: 0.007 sec <<< ERROR!
      java.lang.NoSuchMethodError: com.google.common.cache.CacheBuilder.build()Lcom/google/common/cache/Cache;
      at hudson.model.Queue.<init>(Queue.java:216)
      at jenkins.model.Jenkins.<init>(Jenkins.java:772)
      at hudson.model.Hudson.<init>(Hudson.java:83)
      at org.jvnet.hudson.test.HudsonTestCase.newHudson(HudsonTestCase.java:500)
      at org.jvnet.hudson.test.HudsonTestCase.setUp(HudsonTestCase.java:330)
      at org.jvnet.hudson.test.JellyTestSuiteBuilder$JellyTestSuite.setUp(JellyTestSuiteBuilder.java:133)
      at org.jvnet.hudson.test.junit.GroupedTest.run(GroupedTest.java:49)
      at junit.framework.TestSuite.runTest(TestSuite.java:255)
      at junit.framework.TestSuite.run(TestSuite.java:250)
      at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
      at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
      at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
      at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
      at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
      at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
      at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

      testCliSanity(org.jvnet.hudson.test.PluginAutomaticTestBuilder$CliSanityTest) Time elapsed: 0.238 sec <<< ERROR!
      java.lang.IllegalStateException: second instance
      at jenkins.model.Jenkins.<init>(Jenkins.java:760)
      at hudson.model.Hudson.<init>(Hudson.java:83)
      at org.jvnet.hudson.test.HudsonTestCase.newHudson(HudsonTestCase.java:500)
      at org.jvnet.hudson.test.HudsonTestCase.setUp(HudsonTestCase.java:330)
      at junit.framework.TestCase.runBare(TestCase.java:139)
      at org.jvnet.hudson.test.HudsonTestCase.runBare(HudsonTestCase.java:296)
      at junit.framework.TestResult$1.protect(TestResult.java:122)
      at junit.framework.TestResult.runProtected(TestResult.java:142)
      at junit.framework.TestResult.run(TestResult.java:125)
      at junit.framework.TestCase.run(TestCase.java:129)
      at junit.framework.TestSuite.runTest(TestSuite.java:255)
      at junit.framework.TestSuite.run(TestSuite.java:250)
      at junit.framework.TestSuite.runTest(TestSuite.java:255)
      at junit.framework.TestSuite.run(TestSuite.java:250)
      at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:84)
      at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264)
      at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
      at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
      at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
      at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
      at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

          [JENKINS-34129] Cannot release plugin due to injected tests failure

          Oleg Nenashev added a comment -

          Did you consider upgrading to the new plugin parent POM? It should align the library versions and test suites

          Oleg Nenashev added a comment - Did you consider upgrading to the new plugin parent POM? It should align the library versions and test suites

          Andrei Tuicu added a comment -

          Hello, oleg_nenashev,

          I did upgrade to the new plugin POM, but that wasn't enough. I did manage to find a workaround, by excluding Guava as a indirect dependency and by adding some other dependencies manually.

          The resulting POM can be found here: https://github.com/jenkinsci/JiraTestResultReporter-plugin/blob/master/pom.xml

          Thank you,
          Andrei

          Andrei Tuicu added a comment - Hello, oleg_nenashev , I did upgrade to the new plugin POM, but that wasn't enough. I did manage to find a workaround, by excluding Guava as a indirect dependency and by adding some other dependencies manually. The resulting POM can be found here: https://github.com/jenkinsci/JiraTestResultReporter-plugin/blob/master/pom.xml Thank you, Andrei

          Jesse Glick added a comment -

          Maven’s dependency resolution algorithm gives preference to the “closest” version of a dependency, which is not always the newest, so you have to override with an <exclude>.

          Jesse Glick added a comment - Maven’s dependency resolution algorithm gives preference to the “closest” version of a dependency, which is not always the newest, so you have to override with an <exclude> .

          Jesse Glick added a comment -

          Check whether adding this enforcer rule causes your original POM to fail (and your revised one to pass). If so, we can consider adding it to the parent POM. CC andresrc.

          Jesse Glick added a comment - Check whether adding this enforcer rule causes your original POM to fail (and your revised one to pass). If so, we can consider adding it to the parent POM. CC andresrc .

            Unassigned Unassigned
            andreituicu Andrei Tuicu
            Votes:
            1 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: