Uploaded image for project: 'WildFly Elytron'
  1. WildFly Elytron
  2. ELY-1293

System.currentTimeMillis() cannot be mocked on IBM JDK

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • 1.1.0.CR3
    • None
    • None
    • None

      System.currentTimeMillis() is native in IBM JDK and at the same time, IBM JDK does not support java.lang.instrument API for native methods. Therefore, System.currentTimeMillis() cannot be mocked on IBM JDK using jmockit.

      export JAVA_HOME=path/to/ibm/java8
      
      $JAVA_HOME/bin/java -version
      java version "1.8.0"
      Java(TM) SE Runtime Environment (build pxa6480sr3fp12-20160919_01(SR3 FP12))
      IBM J9 VM (build 2.8, JRE 1.8.0 Linux amd64-64 Compressed References 20160915_318796 (JIT enabled, AOT enabled)
      J9VM - R28_Java8_SR3_20160915_0912_B318796
      JIT  - tr.r14.java.green_20160818_122998
      GC   - R28_Java8_SR3_20160915_0912_B318796_CMPRSS
      J9CL - 20160915_318796)
      JCL - 20160914_01 based on Oracle jdk8u101-b13
      
      mvn clean test 
      

      Expected: the tests mocking System.currentTimeMillis() should pass
      Actual: the tests mocking System.currentTimeMillis() throw the following exception or similar:

      java.lang.UnsupportedOperationException: class redefinition failed: attempted to change method modifiers
      	at org.wildfly.security.audit.PeriodicRotatingFileAuditEndpointTest$1.<init>(PeriodicRotatingFileAuditEndpointTest.java:212)
      	at org.wildfly.security.audit.PeriodicRotatingFileAuditEndpointTest.mockTime(PeriodicRotatingFileAuditEndpointTest.java:212)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at java.lang.reflect.Method.invoke(Method.java:508)
      	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:367)
      	at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274)
      	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
      	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161)
      	at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:290)
      	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:242)
      	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
      

      This is the case with

      • PeriodicRotatingFileAuditEndpointTest
      • SizeRotatingFileAuditEndpointTest
      • GssapiCompatibilitySuiteChild

              ppalaga Peter Palaga
              ppalaga Peter Palaga
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: