jakartaee / jsonb-api

Jakarta JSON Binding
https://eclipse-ee4j.github.io/jsonb-api/
Other
79 stars 39 forks source link

TCK Signature Tests failing on Windows + JDK Semaru #327

Open KyleAure opened 2 years ago

KyleAure commented 2 years ago

The failure is due to the Signature Test plugin failing to run in static mode because it does not recognize or thinks that a specifc argument is missing. This leads it to just output the "Help" message instead of running.

Example output:

Calling:  com.sun.tdk.signaturetest.SignatureTest() with following args:
   testArguments[0] = -Static
   testArguments[1] = -CheckValue
   testArguments[2] = -mode
   testArguments[3] = src
   testArguments[4] = -Verbose
   testArguments[5] = -FileName
   testArguments[6] = C:\Users\x\AppData\Local\Temp\jakarta.json.bind.sig_3.0.0
   testArguments[7] = -Classpath
   testArguments[8] = C:\Users\x\...\results\tck_defaultServer/signaturedirectory/jakarta.json.bind-api.jar:C:\Users\x\...\results\tck_defaultServer/jdk11-bundle/java.base:C:\Users\x\...\results\tck_defaultServer/jdk11-bundle/java.rmi:C:\Users\x\...\results\tck_defaultServer/jdk11-bundle/java.sql:C:\Users\x\...\results\tck_defaultServer/jdk11-bundle/java.naming
   testArguments[9] = -Package
   testArguments[10] = jakarta.json.bind
   testArguments[11] = -Exclude
   testArguments[12] = jakarta.json.bind.adapter
   testArguments[13] = -Exclude
   testArguments[14] = jakarta.json.bind.annotation
   testArguments[15] = -Exclude
   testArguments[16] = jakarta.json.bind.config
   testArguments[17] = -Exclude
   testArguments[18] = jakarta.json.bind.serializer
   testArguments[19] = -Exclude
   testArguments[20] = jakarta.json.bind.spi
   testArguments[21] = -IgnoreJDKClass
   testArguments[22] = java.util.Map
   testArguments[23] = -IgnoreJDKClass
   testArguments[24] = java.lang.Object
   testArguments[25] = -IgnoreJDKClass
   testArguments[26] = java.io.ByteArrayInputStream
   testArguments[27] = -IgnoreJDKClass
   testArguments[28] = java.io.InputStream
   testArguments[29] = -IgnoreJDKClass
   testArguments[30] = java.lang.Deprecated
   testArguments[31] = -IgnoreJDKClass
   testArguments[32] = java.io.Writer
   testArguments[33] = -IgnoreJDKClass
   testArguments[34] = java.io.OutputStream
   testArguments[35] = -IgnoreJDKClass
   testArguments[36] = java.util.List
   testArguments[37] = -IgnoreJDKClass
   testArguments[38] = java.util.Collection
   testArguments[39] = -IgnoreJDKClass
   testArguments[40] = java.lang.instrument.IllegalClassFormatException
   testArguments[41] = -IgnoreJDKClass
   testArguments[42] = javax.transaction.xa.XAException
   testArguments[43] = -IgnoreJDKClass
   testArguments[44] = java.lang.annotation.Repeatable
   testArguments[45] = -IgnoreJDKClass
   testArguments[46] = java.lang.InterruptedException
   testArguments[47] = -IgnoreJDKClass
   testArguments[48] = java.lang.CloneNotSupportedException
   testArguments[49] = -IgnoreJDKClass
   testArguments[50] = java.lang.Throwable
   testArguments[51] = -IgnoreJDKClass
   testArguments[52] = java.lang.Thread
   testArguments[53] = -IgnoreJDKClass
   testArguments[54] = java.lang.Enum
   testArguments[55] = -ApiVersion
   testArguments[56] = 3.0.0
Test - SignatureTest version 2.2
Available options are:
------------------
-Static           Run SignatureTest in static mode (default: reflection)
-Mode [src|bin]   Select checking mode - source code or binary (default: source)
-Backward | -B    Backward compatibility checking (default: mutual compatibility)
-Classpath <path> Specify search path for tested classes in static mode
-FileName <file>  Specify signature file name
or
-Files <filelist> Specify list of signature files. Use ; to separate files.
-Package <name>   Specify package to be tested along with subpackages
-FormatHuman | -H Human readable error output
-Out <file>       Specify report file name
------------------
-TestURL <url>    Specify URL of signature file
-PackageWithoutSubpackages <name> Specify package to be tested excluding subpackages
-Exclude <name>   Specify package or class, which is not required to be tested
-NoMerge          Cancels default merging according to the JSR 68 rules (see User's Guide)
-Update <file>    Specify update file
-IgnoreJDKClass <name>   Specify JDK package or class, which is not required to be tested
-ApiVersion <str> Set API version for report
-CheckValue       Check values of primitive constants (static mode only)
-FormatPlain      Do not sort error messages
-ExtensibleInterfaces Allow extensible interfaces for backward compatibility checking 
------------------
-ClassCacheSize <numb>  Specify size of class cache (default value is 1,024). Actual in static mode only.
-Verbose          Enable error diagnostics for inherited class members
-Debug            Enable debug mode (prints stack trace)
-ErrorAll         Specifies to make the test more strict by upgrading certain warnings to errors
------------------
-Version          Print version information
-Help             Print this text
------------------
All options are case-insensitive.
********** Status Report 'jakarta.json.bind' **********
********** Package 'jakarta.json.bind' - FAILED (STATIC MODE) **********

In the end all the static tests fail, while all the reflective tests run and pass:

Some signatures failed.
    Failed packages listed below: 
        jakarta.json.bind(static mode)
        jakarta.json.bind.adapter(static mode)
        jakarta.json.bind.annotation(static mode)
        jakarta.json.bind.config(static mode)
        jakarta.json.bind.serializer(static mode)
        jakarta.json.bind.spi(static mode)
    Passed packages listed below: 
        jakarta.json.bind(reflection mode)
        jakarta.json.bind.adapter(reflection mode)
        jakarta.json.bind.annotation(reflection mode)
        jakarta.json.bind.config(reflection mode)
        jakarta.json.bind.serializer(reflection mode)
        jakarta.json.bind.spi(reflection mode)

I ran the TCK again and forced the TCK to use the Signature Test 1.6 plugin instead of 1.4 and the failure still happens.

gjwatts commented 9 months ago

Seeing this same behavior with Temurin 17 (build 17.0.4+8) and Temurin 11 (build 11.0.20+8).

gjwatts commented 9 months ago

Also noticed a couple of path errors when running the signature tests in standalone:

mvn verify -D"test=ee.jakarta.tck.json.bind.signaturetest.jsonb.JSONBSigTest"
Warning: incorrect classpath parameter: C:\Users\greg\tck\jakarta-jsonb-tck-3.0.0\jsonb-tck\bin\target/signaturedirectory/jakarta.json.bind-api.jar:C:\Users\greg\tck\jakarta-jsonb-tck-3.0.0\jsonb-tck\bin\target/jdk-bundle/java.base:C:\Users\greg\tck\jakarta-jsonb-tck-3.0.0\jsonb-tck\bin\target/jdk-bundle/java.rmi:C:\Users\greg\tck\jakarta-jsonb-tck-3.0.0\jsonb-tck\bin\target/jdk-bundle/java.sql:C:\Users\greg\tck\jakarta-jsonb-tck-3.0.0\jsonb-tck\bin\target/jdk-bundle/java.naming (java.nio.file.InvalidPathException: Illegal char <:> at index 112: C:\Users\greg\tck\jakarta-jsonb-tck-3.0.0\jsonb-tck\bin\target\signaturedirectory\jakarta.json.bind-api.jar:C:\Users\greg\tck\jakarta-jsonb-tck-3.0.0\jsonb-tck\bin\target\jdk-bundle\java.base:C:\Users\greg\tck\jakarta-jsonb-tck-3.0.0\jsonb-tck\bin\target\jdk-bundle\java.rmi:C:\Users\greg\tck\jakarta-jsonb-tck-3.0.0\jsonb-tck\bin\target\jdk-bundle\java.sql:C:\Users\greg\tck\jakarta-jsonb-tck-3.0.0\jsonb-tck\bin\target\jdk-bundle\java.naming). This directory or jar file will be ignored!

1) The colon : is being used as a classpath file/directory separator and on Windows it should be a semi-colon instead ; 2) Some of the slashes used in the classpath generation face the wrong way on Windows. They are forward slashes / and should be back slashes \.

I think Windows might automatically handle the wrong slash directions, but it would be nice to change to be consistent.