jsonp signature test enhancements. Signed-off-by: gurunandan.rao@oracle.com <gurunandan.rao@oracle.com>
diff --git a/impl-tck/tck-tests/pom.xml b/impl-tck/tck-tests/pom.xml index 136181f..e2508ed 100644 --- a/impl-tck/tck-tests/pom.xml +++ b/impl-tck/tck-tests/pom.xml
@@ -61,34 +61,6 @@ <artifactId>maven-dependency-plugin</artifactId> <version>3.2.0</version> <executions> - <execution> - <id>copy-jsonp-tck-signature-files</id> - <phase>generate-test-sources</phase> - <goals> - <goal>unpack</goal> - </goals> - <configuration> - <artifactItems> - <artifactItem> - <groupId>jakarta.json</groupId> - <artifactId>jakarta.json-tck-tests</artifactId> - <version>${jsonp-tck.version}</version> - <type>jar</type> - <overWrite>true</overWrite> - </artifactItem> - </artifactItems> - <!-- We need the signature file, mapping file and package list file --> - <includes>**/*sig-test*,**/*jakarta.json.sig_*,**/*sig-test-pkg-list.txt</includes> - <outputDirectory>${project.build.directory}/signaturedirectory</outputDirectory> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-dependency-plugin</artifactId> - <version>3.2.0</version> - <executions> <execution> <id>copy</id> <phase>generate-test-sources</phase> @@ -120,9 +92,6 @@ <dependenciesToScan>jakarta.json:jakarta.json-tck-tests</dependenciesToScan> <systemPropertyVariables> <jimage.dir>${project.build.directory}/jdk11-bundle</jimage.dir> - <signature.mapfile>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest/sig-test.map</signature.mapfile> - <signature.repositoryDir>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest</signature.repositoryDir> - <signature.packagelist>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest/sig-test-pkg-list.txt</signature.packagelist> <signature.sigTestClasspath>${project.build.directory}/signaturedirectory/jakarta.json-api.jar:${project.build.directory}/jdk11-bundle/java.base:${project.build.directory}/jdk11-bundle/java.rmi:${project.build.directory}/jdk11-bundle/java.sql:${project.build.directory}/jdk11-bundle/java.naming</signature.sigTestClasspath> </systemPropertyVariables> </configuration> @@ -149,9 +118,6 @@ </includes> <systemPropertyVariables> <jimage.dir>${project.build.directory}/jdk11-bundle</jimage.dir> - <signature.mapfile>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest/sig-test.map</signature.mapfile> - <signature.repositoryDir>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest</signature.repositoryDir> - <signature.packagelist>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest/sig-test-pkg-list.txt</signature.packagelist> <signature.sigTestClasspath>${project.build.directory}/signaturedirectory/jakarta.json-api.jar:${project.build.directory}/jdk11-bundle/java.base:${project.build.directory}/jdk11-bundle/java.rmi:${project.build.directory}/jdk11-bundle/java.sql:${project.build.directory}/jdk11-bundle/java.naming</signature.sigTestClasspath> </systemPropertyVariables> </configuration>
diff --git a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/README b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/README index 1cc412c..9c061a9 100644 --- a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/README +++ b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/README
@@ -30,67 +30,21 @@ The signature file name expected is jakarta.json.sig_${version} , where version is the api version for which the signature is generated. - 2. Place the required files in the TCK folder : - - All the below files has to be placed in the folder tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest, so they are included as part of the TCK jar during the build. - - -The signature file generated from above of the name jakarta.json.sig_${version} - -The mapping file will be named sig-test.map, it contains the api to version mapping. This file will be used to pick the right signature file when running the signature test. - -The package list file will be named sig-test-pkg-list.txt, contains the list of packages tested. - - For TCK users (to run the signature test as a Junit test) :- - 1. The signature test related files will need to be extracted from the jar to a known location to be used for running the test. -For eg: in maven we can use the below code to extract the signature file, mapping file and package list file to ${project.build.directory}/signaturedirectory. - - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-dependency-plugin</artifactId> - <version>3.2.0</version> - <executions> - <execution> - <id>copy-jsonp-tck-signature-files</id> - <phase>generate-test-sources</phase> - <goals> - <goal>unpack</goal> - </goals> - <configuration> - <artifactItems> - <artifactItem> - <groupId>jakarta.json</groupId> - <artifactId>jakarta.json-tck-tests</artifactId> - <version>${jsonp-tck.version}</version> - <type>jar</type> - <overWrite>true</overWrite> - </artifactItem> - </artifactItems> - <!-- We need the signature file, mapping file and package list file --> - <includes>**/*sig-test*,**/*jakarta.json.sig_*,**/*sig-test-pkg-list.txt</includes> - <outputDirectory>${project.build.directory}/signaturedirectory</outputDirectory> - </configuration> - </execution> - </executions> - </plugin> - 2. Set the below system properties correctly : + 1.Set the below system properties correctly : jimage.dir //The jdk9+(jdk11 for this release) will be extracted to this location as to use the Java modules in the path. optional.tech.packages.to.ignore // The optional package that should be ignored while running the signature test - signature.mapfile //The full path of the signature mapping file - signature.repositoryDir // The directory where the signature file is placed. - signature.packagelist //The full path of the list of packages that will be tested. signature.sigTestClasspath // the sigTestClasspath that will contain the implementation jar that needs to be tested along with dependent jars. For eg: <jimage.dir>${project.build.directory}/jdk11-bundle</jimage.dir> <optional.tech.packages.to.ignore>jakarta.xml.bind</optional.tech.packages.to.ignore> - <signature.mapfile>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest/sig-test.map</signature.mapfile> - <signature.repositoryDir>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest</signature.repositoryDir> - <signature.packagelist>${project.build.directory}/signaturedirectory/jakarta/jsonp/tck/signaturetest/sig-test-pkg-list.txt</signature.packagelist> <signature.sigTestClasspath>${project.build.directory}/signaturedirectory/jakarta.json-api.jar:${project.build.directory}/jdk11-bundle/java.base:${project.build.directory}/jdk11-bundle/java.rmi:${project.build.directory}/jdk11-bundle/java.sql:${project.build.directory}/jdk11-bundle/java.naming</signature.sigTestClasspath> - 3. The signature test alone can be run using below command within jersey-tck/ directory. + 2. The signature test alone can be run using below command within impl-tck/ directory. - mvn clean verify -Dit.test=jakarta.jsonp.tck.signaturetest.** + mvn clean test -Dtest=jakarta.jsonp.tck.signaturetest.jsonp.JSONPSigTest#signatureTest
diff --git a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/jsonp/JSONPSigTest.java b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/jsonp/JSONPSigTest.java index e09f542..042db22 100644 --- a/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/jsonp/JSONPSigTest.java +++ b/tck/tck-tests/src/main/java/jakarta/jsonp/tck/signaturetest/jsonp/JSONPSigTest.java
@@ -31,12 +31,7 @@ import jakarta.jsonp.tck.signaturetest.SigTestResult; -import java.io.BufferedReader; -import java.io.File; -import java.io.InputStreamReader; -import java.io.IOException; -import java.io.PrintWriter; -import java.io.PrintStream; +import java.io.*; import java.util.ArrayList; import java.util.Properties; @@ -72,6 +67,62 @@ } + + public File writeStreamToTempFile(InputStream inputStream, String tempFilePrefix, String tempFileSuffix) throws IOException { + FileOutputStream outputStream = null; + + try { + File file = File.createTempFile(tempFilePrefix, tempFileSuffix); + outputStream = new FileOutputStream(file); + byte[] buffer = new byte[1024]; + while (true) { + int bytesRead = inputStream.read(buffer); + if (bytesRead == -1) { + break; + } + outputStream.write(buffer, 0, bytesRead); + } + return file; + } + + finally { + if (outputStream != null) { + outputStream.close(); + } + } + } + + public File writeStreamToSigFile(InputStream inputStream, String packageVersion) throws IOException { + FileOutputStream outputStream = null; + String tmpdir = System.getProperty("java.io.tmpdir"); + try { + File sigfile = new File(tmpdir+File.separator+"jakarta.json.sig_"+packageVersion); + if(sigfile.exists()){ + sigfile.delete(); + System.out.println("Existing signature file deleted to create new one"); + } + if(!sigfile.createNewFile()){ + System.out.println("signature file is not created"); + } + outputStream = new FileOutputStream(sigfile); + byte[] buffer = new byte[1024]; + while (true) { + int bytesRead = inputStream.read(buffer); + if (bytesRead == -1) { + break; + } + outputStream.write(buffer, 0, bytesRead); + } + return sigfile; + } + + finally { + if (outputStream != null) { + outputStream.close(); + } + } + } + /***** Boilerplate Code *****/ @@ -96,8 +147,8 @@ /* * @testName: signatureTest * - * @assertion: A JSONB container must implement the required classes and APIs - * specified in the JSONB Specification. + * @assertion: A JSONP container must implement the required classes and APIs + * specified in the JSONP Specification. * * @test_Strategy: Using reflection, gather the implementation specific * classes and APIs. Compare these results with the expected (required) @@ -106,13 +157,40 @@ */ @Test public void signatureTest() throws Fault { - System.out.println("$$$ JSONBSigTest.signatureTest() called"); + System.out.println("$$$ JSONPSigTest.signatureTest() called"); SigTestResult results = null; - String mapFile = System.getProperty("signature.mapfile"); - String repositoryDir = System.getProperty("signature.repositoryDir"); + String mapFile = null; + String packageFile = null; + String repositoryDir = null; + Properties mapFileAsProps = null; + try { + + InputStream inStreamMapfile = JSONPSigTest.class.getClassLoader().getResourceAsStream("jakarta/jsonp/tck/signaturetest/sig-test.map"); + File mFile = writeStreamToTempFile(inStreamMapfile, "sig-test", ".map"); + mapFile = mFile.getCanonicalPath(); + System.out.println("mapFile location is :"+mapFile); + + InputStream inStreamPackageFile = JSONPSigTest.class.getClassLoader().getResourceAsStream("jakarta/jsonp/tck/signaturetest/sig-test-pkg-list.txt"); + File pFile = writeStreamToTempFile(inStreamPackageFile, "sig-test-pkg-list", ".txt"); + packageFile = pFile.getCanonicalPath(); + System.out.println("packageFile location is :"+packageFile); + + mapFileAsProps = getSigTestDriver().loadMapFile(mapFile); + String packageVersion = mapFileAsProps.getProperty("jakarta.json"); + System.out.println("Package version from mapfile :"+ packageVersion); + + InputStream inStreamSigFile = JSONPSigTest.class.getClassLoader().getResourceAsStream("jakarta/jsonp/tck/signaturetest/jakarta.json.sig_"+packageVersion); + File sigFile = writeStreamToSigFile(inStreamSigFile, packageVersion); + System.out.println("signature File location is :"+sigFile.getCanonicalPath()); + repositoryDir = System.getProperty("java.io.tmpdir"); + + + } catch(IOException ex){ + System.out.println("Exception while creating temp files :"+ex); + } + String[] packages = getPackages(testInfo.getVehicle()); String[] classes = getClasses(testInfo.getVehicle()); - String packageFile = System.getProperty("signature.packagelist"); String testClasspath = System.getProperty("signature.sigTestClasspath"); String optionalPkgToIgnore = testInfo.getOptionalTechPackagesToIgnore(); @@ -168,10 +246,9 @@ // Call verifyJtaJarTest based on some conditions, please check the // comment for verifyJtaJarTest. if ("standalone".equalsIgnoreCase(testInfo.getVehicle())) { - Properties mapFileAsProps = getSigTestDriver().loadMapFile(mapFile); if (mapFileAsProps == null || mapFileAsProps.size() == 0) { // empty signature file, something unusual - System.out.println("JSONBSigTest.signatureTest() returning, " + + System.out.println("JSONPSigTest.signatureTest() returning, " + "as signature map file is empty."); return; } @@ -182,7 +259,7 @@ // jakarta.transaction String jtaVersion = mapFileAsProps.getProperty("jakarta.transaction"); if (jtaVersion == null || "".equals(jtaVersion.trim())) { - System.out.println("JSONBSigTest.signatureTest() returning, " + + System.out.println("JSONPSigTest.signatureTest() returning, " + "as this is neither JTA TCK run, not Java EE CTS run."); return; } @@ -198,10 +275,10 @@ verifyJtaJarTest(); } } - System.out.println("$$$ JSONBSigTest.signatureTest() returning"); + System.out.println("$$$ JSONPSigTest.signatureTest() returning"); } catch (Exception e) { if (results != null && !results.passed()) { - throw new Fault("JSONBSigTest.signatureTest() failed!, diffs found"); + throw new Fault("JSONPSigTest.signatureTest() failed!, diffs found"); } else { System.out.println("Unexpected exception " + e.getMessage()); throw new Fault("signatureTest failed with an unexpected exception", e); @@ -209,5 +286,9 @@ } } + /* + * Call the parent class's cleanup method. + */ -} // end class JSONBSigTest + +} // end class JSONPSigTest