diff --git a/build.gradle b/build.gradle index d4f71a5df..b46d3985a 100644 --- a/build.gradle +++ b/build.gradle @@ -47,4 +47,4 @@ tasks.register('package', Zip) { task -> task.archiveFileName = outputFileName task.destinationDirectory = layout.buildDirectory from(tck.metadataRoot) -} +} \ No newline at end of file diff --git a/metadata/io.jsonwebtoken/jjwt-jackson/0.12.0/index.json b/metadata/io.jsonwebtoken/jjwt-jackson/0.12.0/index.json new file mode 100644 index 000000000..11ac50cc5 --- /dev/null +++ b/metadata/io.jsonwebtoken/jjwt-jackson/0.12.0/index.json @@ -0,0 +1,4 @@ +[ + "reflect-config.json", + "resource-config.json" +] diff --git a/metadata/io.jsonwebtoken/jjwt-jackson/0.12.0/reflect-config.json b/metadata/io.jsonwebtoken/jjwt-jackson/0.12.0/reflect-config.json new file mode 100644 index 000000000..aa9408295 --- /dev/null +++ b/metadata/io.jsonwebtoken/jjwt-jackson/0.12.0/reflect-config.json @@ -0,0 +1,407 @@ +[ +{ + "condition":{"typeReachable":"io.jsonwebtoken.jackson.io.JacksonSerializer"}, + "name":"[Lcom.fasterxml.jackson.databind.ser.Serializers;" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.jackson.io.JacksonSerializer"}, + "name":"com.fasterxml.jackson.databind.ext.Java7SupportImpl", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.DefaultMacAlgorithm$1"}, + "name":"com.sun.crypto.provider.HmacCore$HmacSHA256", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.DefaultMacAlgorithm$1"}, + "name":"com.sun.crypto.provider.HmacCore$HmacSHA384", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.DefaultMacAlgorithm$1"}, + "name":"com.sun.crypto.provider.HmacCore$HmacSHA512", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.JcaTemplate$KeyGeneratorFactory"}, + "name":"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA256", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.JcaTemplate$KeyGeneratorFactory"}, + "name":"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA384", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.JcaTemplate$KeyGeneratorFactory"}, + "name":"com.sun.crypto.provider.KeyGeneratorCore$HmacKG$SHA512", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.Claims", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.Header", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.Identifiable", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.JwsHeader", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.ProtectedHeader", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.impl.DefaultClaims", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.Jwts"}, + "name":"io.jsonwebtoken.impl.DefaultClaimsBuilder", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.impl.DefaultHeader", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.impl.DefaultJwsHeader", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true, + "queryAllDeclaredConstructors":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.Jwts"}, + "name":"io.jsonwebtoken.impl.DefaultJwtBuilder", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.Jwts"}, + "name":"io.jsonwebtoken.impl.DefaultJwtParserBuilder", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.impl.DefaultProtectedHeader", + "allDeclaredFields":true, + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.impl.ParameterMap", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.io.NamedSerializer"}, + "name":"io.jsonwebtoken.impl.ParameterMap" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.jackson.io.JacksonSerializer"}, + "name":"io.jsonwebtoken.impl.ParameterMap", + "allDeclaredFields":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.Jwts$ZIP"}, + "name":"io.jsonwebtoken.impl.io.StandardCompressionAlgorithms", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.impl.lang.Nameable", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.io.NamedSerializer"}, + "name":"io.jsonwebtoken.impl.lang.Nameable" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.jackson.io.JacksonSerializer"}, + "name":"io.jsonwebtoken.impl.lang.Nameable" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.impl.lang.ParameterReadable", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.io.NamedSerializer"}, + "name":"io.jsonwebtoken.impl.lang.ParameterReadable" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.jackson.io.JacksonSerializer"}, + "name":"io.jsonwebtoken.impl.lang.ParameterReadable" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.security.Keys"}, + "name":"io.jsonwebtoken.impl.security.KeysBridge" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.Jwts$ENC"}, + "name":"io.jsonwebtoken.impl.security.StandardEncryptionAlgorithms", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.Jwts$KEY"}, + "name":"io.jsonwebtoken.impl.security.StandardKeyAlgorithms", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.security.Jwks$OP"}, + "name":"io.jsonwebtoken.impl.security.StandardKeyOperations", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.Jwts$SIG"}, + "name":"io.jsonwebtoken.impl.security.StandardSecureDigestAlgorithms", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"io.jsonwebtoken.security.X509Accessor", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.lang.Classes"}, + "name":"java.io.ByteArrayInputStream", + "fields":[{"name":"buf"}] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.JcaTemplate"}, + "name":"java.security.AlgorithmParametersSpi" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.EcSignatureAlgorithm$1"}, + "name":"java.security.SecureRandomParameters" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.Randoms"}, + "name":"java.security.SecureRandomParameters" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.EcSignatureAlgorithm$1"}, + "name":"java.security.interfaces.ECPrivateKey" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.EcSignatureAlgorithm$1"}, + "name":"java.security.interfaces.ECPublicKey" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.lang.OptionalMethodInvoker"}, + "name":"java.security.interfaces.EdECKey", + "methods":[{"name":"getParams","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$1"}, + "name":"java.security.interfaces.RSAPrivateKey" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$1"}, + "name":"java.security.interfaces.RSAPublicKey" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.lang.OptionalMethodInvoker"}, + "name":"java.security.interfaces.XECKey", + "methods":[{"name":"getParams","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.lang.OptionalMethodInvoker"}, + "name":"java.security.spec.NamedParameterSpec", + "methods":[{"name":"getName","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.DefaultJwtBuilder"}, + "name":"java.util.Map", + "queryAllDeclaredMethods":true +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.io.NamedSerializer"}, + "name":"java.util.Map" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.jackson.io.JacksonSerializer"}, + "name":"java.util.Map" +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.EcSignatureAlgorithm$1"}, + "name":"sun.security.provider.NativePRNG", + "methods":[{"name":"","parameterTypes":[] }, {"name":"","parameterTypes":["java.security.SecureRandomParameters"] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.Randoms"}, + "name":"sun.security.provider.NativePRNG", + "methods":[{"name":"","parameterTypes":[] }, {"name":"","parameterTypes":["java.security.SecureRandomParameters"] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.DefaultMacAlgorithm$1"}, + "name":"sun.security.provider.SHA2$SHA256", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.EcSignatureAlgorithm$1"}, + "name":"sun.security.provider.SHA2$SHA256", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.EcSignatureAlgorithm$2"}, + "name":"sun.security.provider.SHA2$SHA256", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.JcaTemplate$MessageDigestFactory"}, + "name":"sun.security.provider.SHA2$SHA256", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.JcaTemplate$SignatureFactory"}, + "name":"sun.security.provider.SHA2$SHA256", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$1"}, + "name":"sun.security.provider.SHA2$SHA256", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$2"}, + "name":"sun.security.provider.SHA2$SHA256", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.DefaultMacAlgorithm$1"}, + "name":"sun.security.provider.SHA5$SHA384", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.EcSignatureAlgorithm$1"}, + "name":"sun.security.provider.SHA5$SHA384", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.EcSignatureAlgorithm$2"}, + "name":"sun.security.provider.SHA5$SHA384", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.JcaTemplate$SignatureFactory"}, + "name":"sun.security.provider.SHA5$SHA384", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$1"}, + "name":"sun.security.provider.SHA5$SHA384", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$2"}, + "name":"sun.security.provider.SHA5$SHA384", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.DefaultMacAlgorithm$1"}, + "name":"sun.security.provider.SHA5$SHA512", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.EcSignatureAlgorithm$1"}, + "name":"sun.security.provider.SHA5$SHA512", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.EcSignatureAlgorithm$2"}, + "name":"sun.security.provider.SHA5$SHA512", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.JcaTemplate$SignatureFactory"}, + "name":"sun.security.provider.SHA5$SHA512", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$1"}, + "name":"sun.security.provider.SHA5$SHA512", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$2"}, + "name":"sun.security.provider.SHA5$SHA512", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.JcaTemplate"}, + "name":"sun.security.rsa.RSAKeyPairGenerator$Legacy", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.JcaTemplate"}, + "name":"sun.security.rsa.RSAKeyPairGenerator$PSS", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$1"}, + "name":"sun.security.rsa.RSAPSSSignature", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$2"}, + "name":"sun.security.rsa.RSAPSSSignature", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$1"}, + "name":"sun.security.rsa.RSASignature$SHA256withRSA", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$2"}, + "name":"sun.security.rsa.RSASignature$SHA256withRSA", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$1"}, + "name":"sun.security.rsa.RSASignature$SHA384withRSA", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$2"}, + "name":"sun.security.rsa.RSASignature$SHA384withRSA", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$1"}, + "name":"sun.security.rsa.RSASignature$SHA512withRSA", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.RsaSignatureAlgorithm$2"}, + "name":"sun.security.rsa.RSASignature$SHA512withRSA", + "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.lang.OptionalMethodInvoker"}, + "name":"sun.security.util.KeyUtil", + "methods":[{"name":"getKeySize","parameterTypes":["java.security.Key"] }] +}, +{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.KeysBridge"}, + "name":"sun.security.util.KeyUtil", + "methods":[{"name":"getKeySize","parameterTypes":["java.security.Key"] }] +} +] \ No newline at end of file diff --git a/metadata/io.jsonwebtoken/jjwt-jackson/0.12.0/resource-config.json b/metadata/io.jsonwebtoken/jjwt-jackson/0.12.0/resource-config.json new file mode 100644 index 000000000..b2ca951da --- /dev/null +++ b/metadata/io.jsonwebtoken/jjwt-jackson/0.12.0/resource-config.json @@ -0,0 +1,8 @@ +{ + "resources":{ + "includes":[{ + "condition":{"typeReachable":"io.jsonwebtoken.impl.security.JcaTemplate$KeyGeneratorFactory"}, + "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt67b/nfc.nrm\\E" + }]}, + "bundles":[] +} \ No newline at end of file diff --git a/metadata/io.jsonwebtoken/jjwt-jackson/index.json b/metadata/io.jsonwebtoken/jjwt-jackson/index.json index 050d6f3c3..e3e9f2cf1 100644 --- a/metadata/io.jsonwebtoken/jjwt-jackson/index.json +++ b/metadata/io.jsonwebtoken/jjwt-jackson/index.json @@ -1,6 +1,13 @@ [ { "latest": true, + "metadata-version": "0.12.0", + "module": "io.jsonwebtoken:jjwt-jackson", + "tested-versions": [ + "0.12.0" + ] + }, + { "metadata-version": "0.11.5", "module": "io.jsonwebtoken:jjwt-jackson", "tested-versions": [ diff --git a/tests/src/index.json b/tests/src/index.json index 7433ae2f9..d44d6b50f 100644 --- a/tests/src/index.json +++ b/tests/src/index.json @@ -172,6 +172,12 @@ "name" : "io.jsonwebtoken:jjwt-jackson", "versions" : [ "0.11.5" ] } ] +}, { + "test-project-path" : "io.jsonwebtoken/jjwt-jackson/0.12.0", + "libraries" : [ { + "name" : "io.jsonwebtoken:jjwt-jackson", + "versions" : [ "0.12.0" ] + } ] }, { "test-project-path" : "io.jsonwebtoken/jjwt-orgjson/0.11.5", "libraries" : [ { diff --git a/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/.gitignore b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/.gitignore new file mode 100644 index 000000000..c98c7875b --- /dev/null +++ b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/.gitignore @@ -0,0 +1,4 @@ +gradlew.bat +gradlew +gradle/ +build/ diff --git a/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/build.gradle b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/build.gradle new file mode 100644 index 000000000..78758f375 --- /dev/null +++ b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/build.gradle @@ -0,0 +1,45 @@ +/* + * Copyright and related rights waived via CC0 + * + * You should have received a copy of the CC0 legalcode along with this + * work. If not, see . + */ + +plugins { + id "org.graalvm.internal.tck" +} + +String libraryVersion = "0.12.0" + +dependencies { + testImplementation "io.jsonwebtoken:jjwt-api:$libraryVersion" + testImplementation "io.jsonwebtoken:jjwt-impl:$libraryVersion" + testImplementation "io.jsonwebtoken:jjwt-jackson:$libraryVersion" + + testImplementation 'org.assertj:assertj-core:3.22.0' +} + +graalvmNative { + + agent { + defaultMode = "conditional" + modes { + conditional { + userCodeFilterPath = "user-code-filter.json" + } + } + metadataCopy { + mergeWithExisting = true + inputTaskNames.add("test") + outputDirectories.add("src/test/resources/META-INF/native-image/io.jsonwebtoken/jjwt-jackson") + } + } +} + +tasks.named('test') { + jvmArgs( + '--add-opens=java.base/sun.security.util=ALL-UNNAMED', + '--add-opens=java.base/java.io=ALL-UNNAMED' + ) +} + diff --git a/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/gradle.properties b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/gradle.properties new file mode 100644 index 000000000..f49238fd5 --- /dev/null +++ b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/gradle.properties @@ -0,0 +1,2 @@ +library.version = 0.12.0 +metadata.dir = io.jsonwebtoken/jjwt-jackson/0.12.0/ diff --git a/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/settings.gradle b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/settings.gradle new file mode 100644 index 000000000..de1f34ae1 --- /dev/null +++ b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/settings.gradle @@ -0,0 +1,13 @@ +pluginManagement { + def tckPath = Objects.requireNonNullElse( + System.getenv("GVM_TCK_TCKDIR"), + "../../../../tck-build-logic" + ) + includeBuild(tckPath) +} + +plugins { + id "org.graalvm.internal.tck-settings" version "1.0.0-SNAPSHOT" +} + +rootProject.name = 'io.jsonwebtoken.jjwt-jackson_tests' diff --git a/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/src/test/java/io_jsonwebtoken/jjwt_jackson/Jjwt_jacksonTest.java b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/src/test/java/io_jsonwebtoken/jjwt_jackson/Jjwt_jacksonTest.java new file mode 100644 index 000000000..9eade147a --- /dev/null +++ b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/src/test/java/io_jsonwebtoken/jjwt_jackson/Jjwt_jacksonTest.java @@ -0,0 +1,108 @@ +/* + * Copyright and related rights waived via CC0 + * + * You should have received a copy of the CC0 legalcode along with this + * work. If not, see . + */ +package io_jsonwebtoken.jjwt_jackson; + +import io.jsonwebtoken.CompressionCodecs; +import io.jsonwebtoken.JwtParserBuilder; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.io.Decoders; +import io.jsonwebtoken.io.Encoders; +import io.jsonwebtoken.security.Keys; +import org.junit.jupiter.api.Test; + +import javax.crypto.SecretKey; +import java.util.Date; +import java.util.UUID; +import java.util.stream.Stream; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +class Jjwt_jacksonTest { + + @Test + void testSignedJWTs() { + SecretKey firstKey = Keys.secretKeyFor(SignatureAlgorithm.HS256); + String secretString = Encoders.BASE64.encode(firstKey.getEncoded()); + SecretKey secondKey = Keys.hmacShaKeyFor(Decoders.BASE64.decode(secretString)); + + assertThat(Jwts.parser().setSigningKey(firstKey).build() + .parseClaimsJws(Jwts.builder().setSubject("Joe").signWith(firstKey).compact()).getBody().getSubject()) + .isEqualTo("Joe"); + + assertThat(Jwts.parser().setSigningKey(secondKey).build() + .parseClaimsJws(Jwts.builder().setSubject("Joe").signWith(secondKey).compact()).getBody().getSubject()) + .isEqualTo("Joe"); + } + + @Test + void testCreatingAJWS() { + Date firstDate = new Date(); + Date secondDate = new Date(System.currentTimeMillis() + 24 * 60 * 60 * 1000L); + String uuidString = UUID.randomUUID().toString(); + SecretKey firstKey = Keys.secretKeyFor(SignatureAlgorithm.HS256); + + String firstCompactJws = Jwts.builder() + .setSubject("Joe") + .setHeaderParam("kid", "myKeyId") + .setIssuer("Aaron") + .setAudience("Abel") + .setExpiration(secondDate) + .setNotBefore(firstDate) + .setIssuedAt(firstDate) + .setId(uuidString) + .claim("exampleClaim", "Adam") + .signWith(firstKey, SignatureAlgorithm.HS256) + .compressWith(CompressionCodecs.GZIP) + .compact(); + + JwtParserBuilder jwtParserBuilder = Jwts.parser() + .setAllowedClockSkewSeconds(3 * 60) + .setSigningKey(firstKey); + + assertThat(jwtParserBuilder.build().parseClaimsJws(firstCompactJws).getBody().getSubject()).isEqualTo("Joe"); + assertDoesNotThrow(() -> jwtParserBuilder.requireSubject("Joe").build().parseClaimsJws(firstCompactJws)); + assertDoesNotThrow(() -> jwtParserBuilder.requireIssuer("Aaron").build().parseClaimsJws(firstCompactJws)); + assertDoesNotThrow(() -> jwtParserBuilder.requireAudience("Abel").build().parseClaimsJws(firstCompactJws)); + assertDoesNotThrow(() -> jwtParserBuilder.requireExpiration(secondDate).build().parseClaimsJws(firstCompactJws)); + assertDoesNotThrow(() -> jwtParserBuilder.requireNotBefore(firstDate).build().parseClaimsJws(firstCompactJws)); + assertDoesNotThrow(() -> jwtParserBuilder.requireIssuedAt(firstDate).build().parseClaimsJws(firstCompactJws)); + assertDoesNotThrow(() -> jwtParserBuilder.requireId(uuidString).build().parseClaimsJws(firstCompactJws)); + assertDoesNotThrow(() -> jwtParserBuilder.require("exampleClaim", "Adam").build().parseClaimsJws(firstCompactJws)); + } + + @Test + void testCompression() { + SecretKey firstKey = Keys.secretKeyFor(SignatureAlgorithm.HS256); + + assertThat(Jwts.parser().setSigningKey(firstKey).build().parseClaimsJws( + Jwts.builder().setSubject("Joe").signWith(firstKey).compressWith(CompressionCodecs.DEFLATE).compact() + ).getBody().getSubject()).isEqualTo("Joe"); + + assertThat(Jwts.parser().setSigningKey(firstKey).build().parseClaimsJws( + Jwts.builder().setSubject("Joe").signWith(firstKey).compressWith(CompressionCodecs.GZIP).compact() + ).getBody().getSubject()).isEqualTo("Joe"); + } + + @Test + void testSignatureAlgorithms() { + Stream.of(SignatureAlgorithm.HS256, SignatureAlgorithm.HS384, SignatureAlgorithm.HS512) + .map(Keys::secretKeyFor) + .forEach(secretKey -> assertThat(Jwts.parser().setSigningKey(secretKey).build().parseClaimsJws( + Jwts.builder().setSubject("Joe").signWith(secretKey).compact() + ).getBody().getSubject()).isEqualTo("Joe")); + + Stream.of(SignatureAlgorithm.ES256, SignatureAlgorithm.ES384, SignatureAlgorithm.ES512, + SignatureAlgorithm.RS256, SignatureAlgorithm.RS384, SignatureAlgorithm.RS512, + SignatureAlgorithm.PS256, SignatureAlgorithm.PS384, SignatureAlgorithm.PS512) + .map(Keys::keyPairFor) + .forEach(keyPair -> assertThat(Jwts.parser().setSigningKey(keyPair.getPublic()).build().parseClaimsJws( + Jwts.builder().setSubject("Joe").signWith(keyPair.getPrivate()).compact() + ).getBody().getSubject()).isEqualTo("Joe")); + } +} diff --git a/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/src/test/resources/META-INF/native-image/test/native-image.properties b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/src/test/resources/META-INF/native-image/test/native-image.properties new file mode 100644 index 000000000..a56ddadba --- /dev/null +++ b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/src/test/resources/META-INF/native-image/test/native-image.properties @@ -0,0 +1 @@ +Args = --add-opens=java.base/sun.security.util=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED \ No newline at end of file diff --git a/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/user-code-filter.json b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/user-code-filter.json new file mode 100644 index 000000000..4cf4e4b3e --- /dev/null +++ b/tests/src/io.jsonwebtoken/jjwt-jackson/0.12.0/user-code-filter.json @@ -0,0 +1,13 @@ +{ + "rules": [ + { + "excludeClasses": "**" + }, + { + "includeClasses": "io.jsonwebtoken.jackson.**" + }, + { + "includeClasses": "io.jsonwebtoken.**" + } + ] +} diff --git a/tests/tck-build-logic/build.gradle b/tests/tck-build-logic/build.gradle index 167fae448..810036f9b 100644 --- a/tests/tck-build-logic/build.gradle +++ b/tests/tck-build-logic/build.gradle @@ -41,3 +41,9 @@ dependencies { test { useJUnitPlatform() } +tasks.named('test') { + jvmArgs( + '--add-opens=java.base/sun.security.util=ALL-UNNAMED', + '--add-opens=java.base/java.io=ALL-UNNAMED' + ) +}