Details

    • Bug
    • Status: Closed
    • Blocker
    • Resolution: Fixed
    • 2.1
    • 2.1
    • Win64 with Maven 3.0.5 and Java 1.8.0_05

    Description

      When running the unit tests the RAM provider custom tests fails only with Java 8 (build and runtime):

      Tests run: 9, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.019 sec <<< FAILURE! - in org.apache.commons.vfs2.provider.ram.test.CustomRamProviderTest
      testSmallFS(org.apache.commons.vfs2.provider.ram.test.CustomRamProviderTest)  Time elapsed: 0.012 sec  <<< ERROR!
      java.lang.IllegalArgumentException: Self-suppression not permitted
              at org.apache.commons.vfs2.provider.ram.RamFileObject.resize(RamFileObject.java:277)
              at org.apache.commons.vfs2.provider.ram.RamFileOutputStream.write(RamFileOutputStream.java:68)
              at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
              at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
              at org.apache.commons.vfs2.util.MonitorOutputStream.flush(MonitorOutputStream.java:114)
              at java.io.FilterOutputStream.close(FilterOutputStream.java:158)
              at org.apache.commons.vfs2.util.MonitorOutputStream.close(MonitorOutputStream.java:54)
              at org.apache.commons.vfs2.provider.DefaultFileContent$FileContentOutputStream.close(DefaultFileContent.java:711)
              at org.apache.commons.vfs2.provider.ram.test.CustomRamProviderTest.testSmallFS(CustomRamProviderTest.java:264)
      

      Attachments

        1. fos.patch
          0.7 kB
          Bernd Eckenfels

        Activity

          b.eckenfels Bernd Eckenfels added a comment - - edited

          This seems to be a java8 thing. The test actually expexts an IOException, and in the above stacktrace location it is actually thrown:

          org.apache.commons.vfs2.provider.ram.RamFileObject.resize(RamFileObject.java:277)

          But the runtime seems to wrap this in an IlelgalArgumentException. Internez say it is related to try with resource (which can collect suppressed exceptions), however we don't use that (at least not in the VFS code). Maybe its a test test-framework or JUnit problem?

          b.eckenfels Bernd Eckenfels added a comment - - edited This seems to be a java8 thing. The test actually expexts an IOException, and in the above stacktrace location it is actually thrown: org.apache.commons.vfs2.provider.ram.RamFileObject.resize(RamFileObject.java:277) But the runtime seems to wrap this in an IlelgalArgumentException. Internez say it is related to try with resource (which can collect suppressed exceptions), however we don't use that (at least not in the VFS code). Maybe its a test test-framework or JUnit problem?
          b.eckenfels Bernd Eckenfels added a comment - - edited

          The whole stacktrace is more informative, it looks like:

          java.lang.IllegalArgumentException: Self-suppression not permitted
          	at java.lang.Throwable.addSuppressed(Throwable.java:1043)
          	at java.io.FilterOutputStream.close(FilterOutputStream.java:159)
          	at org.apache.commons.vfs2.util.MonitorOutputStream.close(MonitorOutputStream.java:54)
          	at org.apache.commons.vfs2.provider.DefaultFileContent$FileContentOutputStream.close(DefaultFileContent.java:710)
          	at org.apache.commons.vfs2.provider.ram.test.CustomRamProviderTest.testSmallFS(CustomRamProviderTest.java:264)
          	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:483)
          	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
          	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
          	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
          	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
          	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
          	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
          	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
          	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
          	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
          	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
          	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
          	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
          	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
          	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
          	at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
          	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
          	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
          	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
          	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
          	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
          	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
          Caused by: java.io.IOException: FileSystem capacity (10) exceeded.
          	at org.apache.commons.vfs2.provider.ram.RamFileObject.resize(RamFileObject.java:277)
          	at org.apache.commons.vfs2.provider.ram.RamFileOutputStream.write(RamFileOutputStream.java:68)
          	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
          	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
          	at org.apache.commons.vfs2.util.MonitorOutputStream.flush(MonitorOutputStream.java:114)
          	at java.io.FilterOutputStream.close(FilterOutputStream.java:158)
          	... 28 more
          
          b.eckenfels Bernd Eckenfels added a comment - - edited The whole stacktrace is more informative, it looks like: java.lang.IllegalArgumentException: Self-suppression not permitted at java.lang.Throwable.addSuppressed(Throwable.java:1043) at java.io.FilterOutputStream.close(FilterOutputStream.java:159) at org.apache.commons.vfs2.util.MonitorOutputStream.close(MonitorOutputStream.java:54) at org.apache.commons.vfs2.provider.DefaultFileContent$FileContentOutputStream.close(DefaultFileContent.java:710) at org.apache.commons.vfs2.provider.ram.test.CustomRamProviderTest.testSmallFS(CustomRamProviderTest.java:264) 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:483) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.io.IOException: FileSystem capacity (10) exceeded. at org.apache.commons.vfs2.provider.ram.RamFileObject.resize(RamFileObject.java:277) at org.apache.commons.vfs2.provider.ram.RamFileOutputStream.write(RamFileOutputStream.java:68) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) at org.apache.commons.vfs2.util.MonitorOutputStream.flush(MonitorOutputStream.java:114) at java.io.FilterOutputStream.close(FilterOutputStream.java:158) ... 28 more

          The above patch does fix the problem for Java 8 and it also avoids using the unsafe super.close() method. What do you think? (it does not use the suppressed warnings feature as this is Java 5 code).

          b.eckenfels Bernd Eckenfels added a comment - The above patch does fix the problem for Java 8 and it also avoids using the unsafe super.close() method. What do you think? (it does not use the suppressed warnings feature as this is Java 5 code).

          It works for me and does not seem do have an adverse affect in my downstream libraries that depend on it.

          ysb33r Schalk W. Cronjé added a comment - It works for me and does not seem do have an adverse affect in my downstream libraries that depend on it.

          Have commited a fix, similiar to the fos.patch.

          http://svn.apache.org/r1636224

          b.eckenfels Bernd Eckenfels added a comment - Have commited a fix, similiar to the fos.patch. http://svn.apache.org/r1636224

          Apache Commons VFS 2.1 has been released. It includes this (total 171) resolved issues.

          b.eckenfels Bernd Eckenfels added a comment - Apache Commons VFS 2.1 has been released. It includes this (total 171) resolved issues.

          People

            b.eckenfels Bernd Eckenfels
            b.eckenfels Bernd Eckenfels
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: