Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

glassfish 7 platform tck jsonp testsuite pluggability test failures. #23892

Closed
gurunrao opened this issue Apr 6, 2022 · 34 comments · Fixed by #23943
Closed

glassfish 7 platform tck jsonp testsuite pluggability test failures. #23892

gurunrao opened this issue Apr 6, 2022 · 34 comments · Fixed by #23943
Labels
ee10-tck EE 10 TCK failures

Comments

@gurunrao
Copy link
Contributor

gurunrao commented Apr 6, 2022

glassfish 7 latest nightly build has 72 test failures for platform tck jsonp pluggability tests.

The failing test are as follows:

  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest1_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest1_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest1_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest1_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest10_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest10_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest10_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest10_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest11_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest11_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest11_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest11_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest12_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest12_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest12_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest12_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest13_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest13_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest13_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest13_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest14_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest14_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest14_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest14_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest15_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest15_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest15_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest15_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest16_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest16_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest16_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest16_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest17_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest17_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest17_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest17_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest18_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest18_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest18_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest18_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest2_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest2_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest2_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest2_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest3_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest3_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest3_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest3_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest4_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest4_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest4_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest4_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest5_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest5_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest5_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest5_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest6_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest6_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest6_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest6_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest7_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest7_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest7_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest7_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest8_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest8_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest8_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest8_from_servlet
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest9_from_appclient
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest9_from_ejb
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest9_from_jsp
  • com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest9_from_servlet

Detailed logs for failure can be found at: https://ci.eclipse.org/jakartaee-tck/blue/rest/organizations/jenkins/pipelines/jakartaee-tck/branches/master/runs/1722/nodes/50/steps/199/log/?start=0

Based on discussion with @lukasj, failure reason for test failures with GF 7 is due to presence of jars jakarta.json-api.jar + parsson.jar instead of just jakarta.json.jar.
jakarta.json-api.jar + parsson.jar will not pass pluggability tests without changes to GF7 class-loader, "jakarta.json.jar" will pass pluggability tests without modification of GF class-loader.

CC @lukasj

@gurunrao gurunrao added the ee10-tck EE 10 TCK failures label Apr 6, 2022
@gurunrao
Copy link
Contributor Author

gurunrao commented Apr 6, 2022

Platform TCK JSONP testsuite run logs - jsonp-run.txt

@arjantijms
Copy link
Contributor

Based on discussion with @lukasj, failure reason for test failures with GF 7 is due to presence of jars jakarta.json-api.jar + parsson.jar instead of just jakarta.json.jar.

Having to depend on a combined jar instead of the API + Impl seems, wrong. But it is what it is I guess. Unless someone steps up to look at the class loader, I'll replace them by jakarta.json.jar for now.

cc @dmatej

@lukasj
Copy link
Member

lukasj commented Apr 6, 2022

the classloading issue may be solvable via having sth like following in the test war:

<glassfish-web-app>
  <class-loader delegate="false"/>
</glassfish-web-app>

...untested but I believe that should work

@jamezp
Copy link

jamezp commented Apr 14, 2022

Is there a TCK issue for this by chance? In WildFly we have an issue with the MyJsonProvider assuming it will be the one loaded. I don't see anything in the specification that says providers from a deployment are required to be loaded.

@lukasj
Copy link
Member

lukasj commented Apr 14, 2022

thread context class loader of the deployment is the one to be able to find test provider

@scottmarlow
Copy link
Member

scottmarlow commented Apr 14, 2022

In case it helps, I looked inside latest EE 10 Platform TCK build. I extracted contents of jakartaeetck/dist/com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/jsonprovidertests_appclient_vehicle.ear and the contained jsonp_alternate_provider.jar file.

Contents of jsonp_alternate_provider.jar:

tree META-INF/
META-INF/
├── MANIFEST.MF
└── services
    └── jakarta.json.spi.JsonProvider

cat META-INF/services/jakarta.json.spi.JsonProvider 
com.sun.ts.tests.jsonp.provider.MyJsonProvider

tree com
com
└── sun
    └── ts
        └── tests
            └── jsonp
                └── provider
                    ├── MyJsonGenerator.class
                    ├── MyJsonGeneratorFactory.class
                    ├── MyJsonParser.class
                    ├── MyJsonParserFactory.class
                    ├── MyJsonProvider.class
                    ├── MyJsonReader.class
                    ├── MyJsonReaderFactory.class
                    ├── MyJsonWriter.class
                    └── MyJsonWriterFactory.class

Also worth noting that the pluggability test was in EE 9.1:
https://github.com/eclipse-ee4j/jakartaee-tck/blob/9.1.x/src/com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java

And the test hasn't been changed as https://github.com/eclipse-ee4j/jakartaee-tck/tree/master/src/com/sun/ts/tests/jsonp/pluggability shows last change was for EE 9.1 (removed unneeded imports).

@jamezp
Copy link

jamezp commented Apr 14, 2022

thread context class loader of the deployment is the one to be able to find test provider

Not for all class loading models. For example this is not the case for JBoss Modules.

@lukasj
Copy link
Member

lukasj commented Apr 14, 2022

Implementation discovery consists of following steps:

  1. If the system property "jakarta.json.provider" exists, then its value is assumed to be the provider factory class. This phase of the look up enables per-JVM override of the JsonProvider implementation.
  2. The provider is loaded using the ServiceLoader.load(Class) method.
  3. If all the steps above fail, then the rest of the look up is unspecified. That said, the recommended behavior is to simply look for some hard-coded platform default Jakarta JSON Processing implementation. This phase of the look up is so that a platform can have its own Jakarta JSON Processing implementation as the last resort.

ServiceLoader is defined to rely on the thread context classloader, it knows nothing about other class loading models.

@jamezp
Copy link

jamezp commented Apr 14, 2022

Sorry, I don't think I explained myself well :) Yes, using the TCCL is correct and it does work. However, there is an assumption that the ServiceLoader will load the service from the deployment first which may not be the case.

@lukasj
Copy link
Member

lukasj commented Apr 14, 2022

Wouldn’t that violate or go against recommendation in section 10.7.2 of the servlet spec?

@jamezp
Copy link

jamezp commented Apr 14, 2022

That section states though:

The container should not allow applications to override or access the container’s implementation classes.

I will admit the next sentence somewhat contradicts that, but does use the wording "It is recommended".

All this said, I'm not really arguing we should make any changes for Jakarta EE 10. I'm just saying there are assumptions there that don't seem valid. However, these tests have been around for a while :) I did get WildFly itself passing the tests now with an up and coming change waiting to be merged.

@lukasj
Copy link
Member

lukasj commented Apr 14, 2022

I do not think that the implementation of a spec is ment by container’s implementation classes. How would it be possible for the user app to use ie hibernate specific features in a server having it as a default runtime which is not made accessible (to satisfy should not allow access part)?

@jamezp
Copy link

jamezp commented Apr 14, 2022

In my personal opinion that shouldn't be allowed :) The whole point of Jakarta EE is to provide a container where dependencies like that are not required in a deployment. Anyway, I really don't want to distract from this issue since it's a GlassFish filed issue and not really about this specifically :)

@lukasj
Copy link
Member

lukasj commented Apr 14, 2022

It is - the test is to cover the use-case where user-app contains different spec runtime than the one provided by the server (ie jackson vs parsson, hibernate vs eclipselink vs openjpa, etc; or even just different version from the one provided by the server). One container is designed to host different deployments with possibly different needs at the same time. If the deployment should not be allowed to override the server provided runtime, this test and use-case probably becomes invalid.

@scottmarlow
Copy link
Member

It is - the test is to cover the use-case where user-app contains different spec runtime than the one provided by the server (ie jackson vs parsson, hibernate vs eclipselink vs openjpa, etc; or even just different version from the one provided by the server). One container is designed to host different deployments with possibly different needs at the same time. If the deployment should not be allowed to override the server provided runtime, this test and use-case probably becomes invalid.

User-app containing different spec implementation was never considered part of the Jakarta Platform specification as far as I can remember. I agree that this discussion could be moved to a SPEC issue for discussion.

@gurunrao
Copy link
Contributor Author

more discussion on issue at GF dev - https://www.eclipse.org/lists/glassfish-dev/msg01279.html

@scottmarlow
Copy link
Member

@arjantijms from the linked GlassFish discussion, it sounds like this failure is thought to be a (GlassFish) implementation bug. Do you agree?

@arjantijms
Copy link
Contributor

At least org.glassfish.wasp.runtime.ProtectedFunctionMapper$1 is a GlassFish bug, I'll stage a new WaSP version that fixes this.

@scottmarlow
Copy link
Member

scottmarlow commented May 17, 2022

Looks like we are getting further, actually since this is a generic issue, I will just paste new errors here.

Results are here https://ci.eclipse.org/jakartaee-tck/job/jakartaee-tck/job/master/1813/artifact/jsonp-results.tar.gz

The first failure that I see in the below results is:

   [runcts] OUT => [javatest.batch] 05-16-2022 04:49:42:  setup ok
   [runcts] OUT => [javatest.batch] 05-16-2022 04:49:42:  provider class=org.eclipse.parsson.JsonProviderImpl
   [runcts] OUT => [javatest.batch] 05-16-2022 04:49:42:  ERROR: Current provider is not my provider - unexpected.
   [runcts] OUT => [javatest.batch] 05-16-2022 04:49:42:  Providers: [org.eclipse.parsson.JsonProviderImpl@47ffe971, com.sun.ts.tests.jsonp.provider.MyJsonProvider@7d04529c]
   [runcts] OUT => [javatest.batch] 05-16-2022 04:49:42:  ERROR: jsonProviderTest1 Failed
   [runcts] OUT => [javatest.batch] 05-16-2022 04:49:42:  ERROR: Test case throws exception: jsonProviderTest1 Failed
   [runcts] OUT => [javatest.batch] 05-16-2022 04:49:42:  ERROR: Exception at:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:49:42:  ERROR: com.sun.ts.lib.harness.EETest$Fault: jsonProviderTest1 Failed
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.jsonp.pluggability.jsonprovidertests.Client.jsonProviderTest1(Client.java:115)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:596)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:115)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.EmptyVehicleRunner.run(EmptyVehicleRunner.java:41)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:105)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.getPropsReady(EETest.java:486)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:209)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:285)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.VehicleClient.main(VehicleClient.java:37)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:420)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientFacade.launch(AppClientFacade.java:146)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientGroupFacade.main(AppClientGroupFacade.java:39)
   [runcts] OUT => [javatest.batch]
   [runcts] OUT => [javatest.batch] 05-16-2022 04:49:42:  cleanup ok
   [runcts] OUT => [javatest.batch] STATUS:Failed.Test case throws exception: jsonProviderTest1 Failed
   [runcts] OUT => [javatest.batch] Failed. Test case throws exception: jsonProviderTest1 Failed
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Finished Test:  FAILED........com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest1_from_appclient
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Number of tests completed:  5 (4 passed, 1 failed, 0 with errors)

Note the above Current provider is not my provider - unexpected. in output.

Then we see the NullPointerException:

   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:01:  setup ok
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:01:  Calling SPI provider method: public JsonParser createParser(InputStream)
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:01:  ERROR: Test case throws exception: jsonProviderTest10 Failed:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:01:  ERROR: Exception at:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:01:  ERROR: java.lang.NullPointerException
   [runcts] OUT => [javatest.batch]     at org.eclipse.parsson.UnicodeDetectingInputStream.fillBuf(UnicodeDetectingInputStream.java:65)
   [runcts] OUT => [javatest.batch]     at org.eclipse.parsson.UnicodeDetectingInputStream.detectEncoding(UnicodeDetectingInputStream.java:104)
   [runcts] OUT => [javatest.batch]     at org.eclipse.parsson.UnicodeDetectingInputStream.<init>(UnicodeDetectingInputStream.java:51)
   [runcts] OUT => [javatest.batch]     at org.eclipse.parsson.JsonParserImpl.<init>(JsonParserImpl.java:87)
   [runcts] OUT => [javatest.batch]     at org.eclipse.parsson.JsonParserImpl.<init>(JsonParserImpl.java:80)
   [runcts] OUT => [javatest.batch]     at org.eclipse.parsson.JsonProviderImpl.createParser(JsonProviderImpl.java:64)
   [runcts] OUT => [javatest.batch]     at jakarta.json.Json.createParser(Json.java:88)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.jsonp.pluggability.jsonprovidertests.Client.jsonProviderTest10(Client.java:342)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:596)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:115)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.EmptyVehicleRunner.run(EmptyVehicleRunner.java:41)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:105)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.getPropsReady(EETest.java:486)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:209)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:285)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.VehicleClient.main(VehicleClient.java:37)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:420)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientFacade.launch(AppClientFacade.java:146)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientGroupFacade.main(AppClientGroupFacade.java:39)
   [runcts] OUT => [javatest.batch]
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:01:  cleanup ok
   [runcts] OUT => [javatest.batch] STATUS:Failed.Test case throws exception: jsonProviderTest10 Failed:
   [runcts] OUT => [javatest.batch] Failed. Test case throws exception: jsonProviderTest10 Failed:
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Finished Test:  FAILED........com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest10_from_appclient
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Number of tests completed:  9 (4 passed, 5 failed, 0 with errors)

@scottmarlow
Copy link
Member

scottmarlow commented May 17, 2022

Note that I am only reporting each failure once even though the same problem occurring more than one test.

Continuing to add additional failures from previous comment results:

Failure in com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest11_from_appclient

   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:18:  setup ok
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:18:  Calling SPI provider method: public JsonArrayBuilder createArrayBuilder()
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:18:  Verify SPI provider method was called: public JsonArrayBuilder createArrayBuilder()
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:18:  ERROR: String mismatch
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:18:  ERROR: Expected: public JsonArrayBuilder createArrayBuilder()
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:18:  ERROR: Actual:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:18:  ERROR: jsonProviderTest11 Failed
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:18:  ERROR: Test case throws exception: jsonProviderTest11 Failed
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:18:  ERROR: Exception at:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:18:  ERROR: com.sun.ts.lib.harness.EETest$Fault: jsonProviderTest11 Failed
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.jsonp.pluggability.jsonprovidertests.Client.jsonProviderTest11(Client.java:374)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:596)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:115)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.EmptyVehicleRunner.run(EmptyVehicleRunner.java:41)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:105)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.getPropsReady(EETest.java:486)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:209)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:285)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.VehicleClient.main(VehicleClient.java:37)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:420)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientFacade.launch(AppClientFacade.java:146)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientGroupFacade.main(AppClientGroupFacade.java:39)
   [runcts] OUT => [javatest.batch]
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:18:  cleanup ok
   [runcts] OUT => [javatest.batch] STATUS:Failed.Test case throws exception: jsonProviderTest11 Failed
   [runcts] OUT => [javatest.batch] Failed. Test case throws exception: jsonProviderTest11 Failed
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Finished Test:  FAILED........com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest11_from_appclient
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Number of tests completed:  13 (4 passed, 9 failed, 0 with errors)

com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest12_from_appclient failure:

   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:36:  setup ok
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:36:  Calling SPI provider method: public JsonObjectBuilder createObjectBuilder()
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:36:  Verify SPI provider method was called: public JsonObjectBuilder createObjectBuilder()
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:36:  ERROR: String mismatch
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:36:  ERROR: Expected: public JsonObjectBuilder createObjectBuilder()
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:36:  ERROR: Actual:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:36:  ERROR: jsonProviderTest12 Failed
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:36:  ERROR: Test case throws exception: jsonProviderTest12 Failed
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:36:  ERROR: Exception at:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:36:  ERROR: com.sun.ts.lib.harness.EETest$Fault: jsonProviderTest12 Failed
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.jsonp.pluggability.jsonprovidertests.Client.jsonProviderTest12(Client.java:398)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:596)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:115)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.EmptyVehicleRunner.run(EmptyVehicleRunner.java:41)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:105)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.getPropsReady(EETest.java:486)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:209)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:285)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.VehicleClient.main(VehicleClient.java:37)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:420)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientFacade.launch(AppClientFacade.java:146)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientGroupFacade.main(AppClientGroupFacade.java:39)
   [runcts] OUT => [javatest.batch]
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:36:  cleanup ok
   [runcts] OUT => [javatest.batch] STATUS:Failed.Test case throws exception: jsonProviderTest12 Failed
   [runcts] OUT => [javatest.batch] Failed. Test case throws exception: jsonProviderTest12 Failed
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Finished Test:  FAILED........com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest12_from_appclient
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Number of tests completed:  17 (4 passed, 13 failed, 0 with errors)

com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest13_from_appclient failure:

   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:54:  setup ok
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:54:  Calling SPI provider method: public JsonBuilderFactory createBuilderFactory(Map<String, ?>)
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:54:  getEmptyConfig
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:54:  Verify SPI provider method was called: public JsonBuilderFactory createBuilderFactory(Map<String, ?>)
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:54:  ERROR: String mismatch
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:54:  ERROR: Expected: public JsonBuilderFactory createBuilderFactory(Map<String, ?>)
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:54:  ERROR: Actual:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:54:  ERROR: jsonProviderTest13 Failed
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:54:  ERROR: Test case throws exception: jsonProviderTest13 Failed
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:54:  ERROR: Exception at:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:54:  ERROR: com.sun.ts.lib.harness.EETest$Fault: jsonProviderTest13 Failed
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.jsonp.pluggability.jsonprovidertests.Client.jsonProviderTest13(Client.java:423)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:596)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:115)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.EmptyVehicleRunner.run(EmptyVehicleRunner.java:41)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:105)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.getPropsReady(EETest.java:486)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:209)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:285)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.VehicleClient.main(VehicleClient.java:37)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:420)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientFacade.launch(AppClientFacade.java:146)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientGroupFacade.main(AppClientGroupFacade.java:39)
   [runcts] OUT => [javatest.batch]
   [runcts] OUT => [javatest.batch] 05-16-2022 04:50:54:  cleanup ok
   [runcts] OUT => [javatest.batch] STATUS:Failed.Test case throws exception: jsonProviderTest13 Failed
   [runcts] OUT => [javatest.batch] Failed. Test case throws exception: jsonProviderTest13 Failed
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Finished Test:  FAILED........com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest13_from_appclient
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Number of tests completed:  21 (4 passed, 17 failed, 0 with errors)

com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest14_from_appclient:

  [runcts] OUT => [javatest.batch] 05-16-2022 04:51:11:  setup ok
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:11:  Calling SPI provider method: public JsonReader createReader(Reader)
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:11:  Verify SPI provider method was called: public JsonReader createReader(Reader)
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:11:  ERROR: String mismatch
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:11:  ERROR: Expected: public JsonReader createReader(Reader)
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:11:  ERROR: Actual:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:11:  ERROR: jsonProviderTest14 Failed
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:11:  ERROR: Test case throws exception: jsonProviderTest14 Failed
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:11:  ERROR: Exception at:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:11:  ERROR: com.sun.ts.lib.harness.EETest$Fault: jsonProviderTest14 Failed
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.jsonp.pluggability.jsonprovidertests.Client.jsonProviderTest14(Client.java:447)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:596)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:115)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.EmptyVehicleRunner.run(EmptyVehicleRunner.java:41)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:105)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.getPropsReady(EETest.java:486)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:209)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:285)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.VehicleClient.main(VehicleClient.java:37)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:420)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientFacade.launch(AppClientFacade.java:146)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientGroupFacade.main(AppClientGroupFacade.java:39)
   [runcts] OUT => [javatest.batch]
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:11:  cleanup ok
   [runcts] OUT => [javatest.batch] STATUS:Failed.Test case throws exception: jsonProviderTest14 Failed
   [runcts] OUT => [javatest.batch] Failed. Test case throws exception: jsonProviderTest14 Failed
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Finished Test:  FAILED........com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest14_from_appclient
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Number of tests completed:  25 (4 passed, 21 failed, 0 with errors)

com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest15_from_appclient failure:

   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:29:  setup ok
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:29:  Calling SPI provider method: public JsonReader createReader(InputStream)
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:29:  Verify SPI provider method was called: public JsonReader createReader(InputStream)
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:29:  ERROR: String mismatch
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:29:  ERROR: Expected: public JsonReader createReader(InputStream)
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:29:  ERROR: Actual:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:29:  ERROR: jsonProviderTest15 Failed
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:29:  ERROR: Test case throws exception: jsonProviderTest15 Failed
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:29:  ERROR: Exception at:
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:29:  ERROR: com.sun.ts.lib.harness.EETest$Fault: jsonProviderTest15 Failed
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.jsonp.pluggability.jsonprovidertests.Client.jsonProviderTest15(Client.java:472)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:596)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:115)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.EmptyVehicleRunner.run(EmptyVehicleRunner.java:41)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:105)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.getPropsReady(EETest.java:486)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:209)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.lib.harness.EETest.run(EETest.java:285)
   [runcts] OUT => [javatest.batch]     at com.sun.ts.tests.common.vehicle.VehicleClient.main(VehicleClient.java:37)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   [runcts] OUT => [javatest.batch]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   [runcts] OUT => [javatest.batch]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:420)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientFacade.launch(AppClientFacade.java:146)
   [runcts] OUT => [javatest.batch]     at org.glassfish.appclient.client.AppClientGroupFacade.main(AppClientGroupFacade.java:39)
   [runcts] OUT => [javatest.batch]
   [runcts] OUT => [javatest.batch] 05-16-2022 04:51:29:  cleanup ok
   [runcts] OUT => [javatest.batch] STATUS:Failed.Test case throws exception: jsonProviderTest15 Failed
   [runcts] OUT => [javatest.batch] Failed. Test case throws exception: jsonProviderTest15 Failed
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Finished Test:  FAILED........com/sun/ts/tests/jsonp/pluggability/jsonprovidertests/Client.java#jsonProviderTest15_from_appclient
   [runcts] OUT => [javatest.batch] ********************************************************************************
   [runcts] OUT => [javatest.batch] Number of tests completed:  29 (4 passed, 25 failed, 0 with errors)

@scottmarlow
Copy link
Member

log.zip has the remaining failures (72 total including the above 25 failures).

@scottmarlow
Copy link
Member

@lukasj is this failure limited to EE implementations that have the org.glassfish.hk2.osgiresourcelocator.ServiceLoader class?

I don't see it with WildFly currently but am curious if other Jakarta EE 10 implementations may also see the same failure and need to follow the recommendation to combine the JSON-P SPEC API classloader with the JSON-P implementation classloader?

@jamezp
Copy link

jamezp commented May 18, 2022

This was fixed in WildFly by exporting the implementation to the deployments class loader https://github.com/wildfly/wildfly/blob/98fd7caada41a1e30b1cea5cd10904a1056d78cc/ee-9/ee-9-api/src/main/resources/modules/system/layers/base/jakarta/json/api/main/module.xml#L35-L42.

@scottmarlow
Copy link
Member

So it seems that this issue impacts non-OSGi EE implementations also which does sound like JSON-P 2.1 has an (unintended) breaking change.

@jamezp
Copy link

jamezp commented May 18, 2022

It actually could be the fact that the old GlassFish RI used to ship with both the API and implementation. Eclipse Parsson correctly leaves the API out of the artifact. I'm making some guesses though because I don't know much about how other app servers crate class loaders.

@scottmarlow
Copy link
Member

@arjantijms do you think GlassFish should work around this failure or challenge the (Platform TCK JSON-P) tests that are failing?

I'm not sure of what the outcome of the challenge would be of course. Even if the tests aren't challenged, they could be in the future if other implementations raise a TCK challenge.

@dmatej
Copy link
Contributor

dmatej commented May 19, 2022

Reproduced locally now: jsonp, 4 passed, 72 failed, 284 seconds.
I'll try to fix it.

@dmatej
Copy link
Contributor

dmatej commented May 19, 2022

It actually could be the fact that the old GlassFish RI used to ship with both the API and implementation. Eclipse Parsson correctly leaves the API out of the artifact. I'm making some guesses though because I don't know much about how other app servers crate class loaders.

GlassFish includes both Parsson 1.1.0 and JSON-API 2.1.0.
This is an error on the client side, even server.log doesn't contain any related errors. EDIT: This sentence is not true, see the next comment.

@dmatej
Copy link
Contributor

dmatej commented May 19, 2022

Do I understand well, that:

  • originally JsonProvider and Parsson impl was a single module. Then this class (see link) tried to use the ServiceLoader, then OSGI, then looked for default class (which is still in the code despite the class doesn't exist any more).
  • now JsonProvider does still the same, but because Parsson has it's own service file, so here in the test we have two providers. Then ServiceLoader loads list of providers without guaranteed order (?) - client has to decide or takes the first in the list. JsonProvider doesn't care and takes the first found.
  • there is yet one option - set the class name into the JVM option. Not useful in this case.

https://github.com/eclipse-ee4j/jsonp/blob/7f7ba7e8b89df797b8c618ab001e7647c73d20f9/api/src/main/java/jakarta/json/spi/JsonProvider.java#L102

See also ServiceLoader.iterator's javadoc:

The iterator returned by this method first yields all of the elements of the provider cache, in the order that they were loaded. It then lazily loads and instantiates any remaining service providers, adding each one to the cache in turn.

So ... now what?

@lukasj
Copy link
Member

lukasj commented May 19, 2022

So ... now what?

read the end of Guru's initial report - the part about replacing jakarta.json:jakarta.json-api + org.eclipse.parsson:parsson with org.eclipse.parsson:jakarta.json

This is how I did it:

  • I built GF
  • I run following commands:
$ cd glassfish7/glassfish/modules/
$ rm jakarta.json-api.jar parsson.jar 
$ curl -o jakarta.json.jar  "https://repo1.maven.org/maven2/org/eclipse/parsson/jakarta.json/1.1.0/jakarta.json-1.1.0.jar"

=> I see expected empty json array there and no exception in the log

OR read my comment from April 6...

This is what I did:

=> I got RuntimeException: MyGenerator is not picked up - basically the same thing tests are showing

  • I deleted the customprovider.war from the glassfish7/glassfish/domains/domain1/autodeploy folder
  • I applied my comment from April 6 - added WEB-INF/glassfish-web.xml with following content to the customprovider.war:
 <glassfish-web-app>
  <class-loader delegate="false"/>
</glassfish-web-app>

=> I see expected empty json array there and no exception in the log

This should clearly show that if I am able to get my custom json provider implementation sitting in the WAR file loaded and used properly by the server, there should be a way to get these tests passing. An alternative could also be to ask the parsson project to provide extra implementation only binary without META-INF/services file for GF (or GF could do this modification during the build time itself).

As to why both ways work:

originally JsonProvider and Parsson impl was a single module. Then this class (see link) tried to use the ServiceLoader, then OSGI, then looked for default class (which is still in the code despite the class doesn't exist any more).

the doesn't exist any more part is wrong - the default org.eclipse.parsson.JsonProviderImpl is in parsson.jar; basically this is there for the org.eclipse.parsson:jakarta.json artifact which does have API and implementation and does NOT have META-INF/services entries (this is the case for the platform default fallback scenario)
Note that org.eclipse.parsson:jakarta.json follows org.glassfish:jakarta.json from pre-EE10 times which has been used by GF for years

now JsonProvider does still the same, but because Parsson has it's own service file, so here in the test we have two providers. Then ServiceLoader loads list of providers without guaranteed order (?) - client has to decide or takes the first in the list. JsonProvider doesn't care and takes the first found.

Well, one can wheedle the ServiceLoader to load what is required, especially in the EE server environment, where particular hierarchy and classloader ordering is defined. The trick here is to make the app loader to be the first instead of the last by changing the order through the glassfish-web.xml (ServiceLoader will ask the parent classloader for the resource if current one doesn't have any services file but since there is one, it has no need to ask parent)

... the choice & decision is yours...

@lukasj
Copy link
Member

lukasj commented May 19, 2022

Just for the record - I prefer addition of gf-web.xml file(s) to the TCK over going back to API+Impl bundle on the GF side

@dmatej
Copy link
Contributor

dmatej commented May 20, 2022

Nice recapitulation, but ...

  1. Referencing impl in another project from API project is in fact a circular dependency (despite no tool would report it). But ok, it does exist.
  2. Merging jars is quite nasty and doesn't resolve the problem how ServiceLoader works and how we use it in JsonProvider. We should guarantee respecting classloader hierarchy instead of order of loading.
  3. glassfish-web.xml variant would mean that also users would have to use it. On the other hand ... if I remember well, I already had to use it because of this or similar issue in some of my projects using gf years ago ...
  4. I have yet one idea to minimize efforts for now - to use the JVM option and implement own JsonProvider which would have control over all these scenarios. I will try this path and if I would not succeed today, I agree with the gf-web.xml too.

But in my opinion TCK tests are right, this should not happen on appserver :-)

@lukasj
Copy link
Member

lukasj commented May 20, 2022

re 1&2

there is a difference in how SE and EE do things wrt APIs and JPMS which is relevant for some EE specs, including JSON Processing - the former believes that each API should come with some default implementation allowing it to be overriden while the latter believes APIs should be completely standalone leaving the responsibility of finding out and setting up some implementation up to the user. jakarta.json.jar follows what SE team does, jakarta.json-api.jar+parsson.jar follows what EE wants. The argument about accidentally using implementation specific APIs EE has with the SE approach became less relevant on JPMS. OTOH EE servers do not support JPMS to enforce it from the implementations and one can not expect users to rely on JPMS when they're building their apps.

re 3

this is documented approach in the GF user guide to allow apps to override arbitrary server provided library. But I have to agree one cannot expect users to read docs, especially when there is SO :-D

re 4

that can work too

@dmatej
Copy link
Contributor

dmatej commented May 21, 2022

each API should come with some default implementation

I would say that doesn't mean the implementation should be referenced directly from the code, just that there should be some real-world-usable implementation proving that the concept is correct.

re re 3) Maybe someone should read JVM javadoc first ... it is not about ignoring documented "workarounds", but about having to override the default behavior of the server, more work, more explanations. Btw I tried that and it wasn't enough.

Nevermind, I found yet solution 5, which already existed in GlassFish, but just needs some changes. Now I am on 18 failures instead original 72, so this will be resolved soon without much pain, finally, uffff. Changes are just in GlassFish, so no more pain for other projects :-)

dmatej added a commit to dmatej/glassfish that referenced this issue May 22, 2022
arjantijms added a commit that referenced this issue May 22, 2022
Issue #23892 Fixed rules for overriding resources by deployed applications
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ee10-tck EE 10 TCK failures
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants