[
https://issues.jboss.org/browse/ELY-1293?page=com.atlassian.jira.plugin.s...
]
Peter Palaga commented on ELY-1293:
-----------------------------------
The solution in
https://github.com/wildfly-security/wildfly-elytron/pull/917/commits/6750...
is based on adding an explicit clock to the classes under test. Having that we can provide
a custom clock implementation during the test while otherwise we will let it use a
standard {{Clock.systemUTC()}}.
I find this approach clean and reliable.
Clearly, this approach can be used only in situations where the code querying the current
time is under our control. This is the case in {{FileAuditEndpoint}} and the fix linked
above is able to solve the problem for {{PeriodicRotatingFileAuditEndpointTest}} and
{{SizeRotatingFileAuditEndpointTest}}.
I'd like to hear others' thoughts, before I investigate if this approach can be
used to fix also {{GssapiCompatibilitySuiteChild}}.
System.currentTimeMillis() cannot be mocked on IBM JDK
------------------------------------------------------
Key: ELY-1293
URL:
https://issues.jboss.org/browse/ELY-1293
Project: WildFly Elytron
Issue Type: Bug
Reporter: Peter Palaga
Assignee: Peter Palaga
{{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.
{code}
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
{code}
Expected: the tests mocking {{System.currentTimeMillis()}} should pass
Actual: the tests mocking {{System.currentTimeMillis()}} throw the following exception or
similar:
{code}
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)
{code}
This is the case with
* PeriodicRotatingFileAuditEndpointTest
* SizeRotatingFileAuditEndpointTest
* GssapiCompatibilitySuiteChild
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)