[
https://issues.jboss.org/browse/ELY-1298?page=com.atlassian.jira.plugin.s...
]
Peter Palaga commented on ELY-1298:
-----------------------------------
I have spent a couple of hours looking for a solution, but I have not found any good one.
First, it is not possible to apply the strategy used in ELY-1293 - i.e. to add a
customizable source of time to the API. It is not possible because
GssapiCompatibilitySuiteChild hits several third party layers where there is little to
zero hope that their time handling can be changed in any way. This is an incomplete
overview of locations from where {{System.currentTimeMillis()}} is called either directly
or indirectly (some of them are maybe irrelevant to the test success):
* sun.security.util.DerOutputStream.putTime()
* java.net.InetAddress$Cache.get()
* org.apache.mina.core.session.AbstractIoSession()
* org.apache.mina.util.ExpiringMap.put()
* org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived()
* org.apache.directory.shared.kerberos.KerberosTime.convertInternal()
* org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived()
* org.apache.directory.shared.kerberos.KerberosTime()
* org.apache.mina.core.polling.AbstractPollingConnectionlessIoAcceptor.write()
* org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageSent()
* sun.security.krb5.internal.KerberosTime.inClockSkew()
At some of these locations {{System.currentTimeMillis()}} is wrapped by {{new Date()}} or
{{Calendar.getInstance()}} I tried mocking those, but it was not sufficient.
Given all the above, I do not think this kind of test can work on IBM JDK.
Excluding it on JBM JDK is the only thing we can do.
GssapiCompatibilitySuiteChild fails on IBM JDK
----------------------------------------------
Key: ELY-1298
URL:
https://issues.jboss.org/browse/ELY-1298
Project: WildFly Elytron
Issue Type: Bug
Reporter: Peter Palaga
Assignee: Peter Palaga
A followup of ELY-1293
{{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}
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
{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 currently the case with
* GssapiCompatibilitySuiteChild
--
This message was sent by Atlassian JIRA
(v7.2.3#72005)