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