[jboss-jira] [JBoss JIRA] (ELY-1298) GssapiCompatibilitySuiteChild fails on IBM JDK
Peter Palaga (JIRA)
issues at jboss.org
Mon Aug 28 05:33:00 EDT 2017
[ https://issues.jboss.org/browse/ELY-1298?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13454485#comment-13454485 ]
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)
More information about the jboss-jira
mailing list