< prev index next >

test/lib/testlibrary/java/util/jar/CreateMultiReleaseTestJars.java

Print this page
rev 15578 : 8165723: JarFile::isMultiRelease() method returns false when it should return true
Reviewed-by: alanb


  71             + "}\n";
  72     final private String java10 = java8.replace("8", "10");
  73     final String readme8 = "This is the root readme file";
  74     final String readme9 = "This is the version nine readme file";
  75     final String readme10 = "This is the version ten readme file";
  76     private Map<String,byte[]> rootClasses;
  77     private Map<String,byte[]> version9Classes;
  78     private Map<String,byte[]> version10Classes;
  79 
  80     public void buildUnversionedJar() throws IOException {
  81         JarBuilder jb = new JarBuilder("unversioned.jar");
  82         jb.addEntry("README", readme8.getBytes());
  83         jb.addEntry("version/Main.java", main.getBytes());
  84         jb.addEntry("version/Main.class", rootClasses.get("version.Main"));
  85         jb.addEntry("version/Version.java", java8.getBytes());
  86         jb.addEntry("version/Version.class", rootClasses.get("version.Version"));
  87         jb.build();
  88     }
  89 
  90     public void buildMultiReleaseJar() throws IOException {
  91         buildCustomMultiReleaseJar("multi-release.jar", "true");


  92     }
  93 
  94     public void buildCustomMultiReleaseJar(String filename, String multiReleaseValue) throws IOException {

  95         JarBuilder jb = new JarBuilder(filename);
  96         jb.addAttribute("Multi-Release", multiReleaseValue);
  97         jb.addEntry("README", readme8.getBytes());
  98         jb.addEntry("version/Main.java", main.getBytes());
  99         jb.addEntry("version/Main.class", rootClasses.get("version.Main"));
 100         jb.addEntry("version/Version.java", java8.getBytes());
 101         jb.addEntry("version/Version.class", rootClasses.get("version.Version"));
 102         jb.addEntry("META-INF/versions/9/README", readme9.getBytes());
 103         jb.addEntry("META-INF/versions/9/version/Version.java", java9.getBytes());
 104         jb.addEntry("META-INF/versions/9/version/PackagePrivate.java", ppjava9.getBytes());
 105         jb.addEntry("META-INF/versions/9/version/Version.class", version9Classes.get("version.Version"));
 106         jb.addEntry("META-INF/versions/9/version/PackagePrivate.class", version9Classes.get("version.PackagePrivate"));
 107         jb.addEntry("META-INF/versions/10/README", readme10.getBytes());
 108         jb.addEntry("META-INF/versions/10/version/Version.java", java10.getBytes());
 109         jb.addEntry("META-INF/versions/10/version/Version.class", version10Classes.get("version.Version"));
 110         jb.build();
 111     }
 112 
 113     public void buildShortMultiReleaseJar() throws IOException {
 114         JarBuilder jb = new JarBuilder("short-multi-release.jar");
 115         jb.addAttribute("Multi-Release", "true");
 116         jb.addEntry("README", readme8.getBytes());
 117         jb.addEntry("version/Main.java", main.getBytes());
 118         jb.addEntry("version/Main.class", rootClasses.get("version.Main"));
 119         jb.addEntry("version/Version.java", java8.getBytes());
 120         jb.addEntry("version/Version.class", rootClasses.get("version.Version"));
 121         jb.addEntry("META-INF/versions/9/README", readme9.getBytes());
 122         jb.addEntry("META-INF/versions/9/version/Version.java", java9.getBytes());
 123         jb.addEntry("META-INF/versions/9/version/PackagePrivate.java", ppjava9.getBytes());
 124         // no entry for META-INF/versions/9/version/Version.class
 125         jb.addEntry("META-INF/versions/9/version/PackagePrivate.class", version9Classes.get("version.PackagePrivate"));
 126         jb.addEntry("META-INF/versions/10/README", readme10.getBytes());
 127         jb.addEntry("META-INF/versions/10/version/Version.java", java10.getBytes());
 128         jb.addEntry("META-INF/versions/10/version/Version.class", version10Classes.get("version.Version"));
 129         jb.build();
 130     }
 131 
 132     public void buildSignedMultiReleaseJar() throws Exception {
 133         String testsrc = System.getProperty("test.src",".");
 134         String testdir = findTestDir(testsrc);
 135         String keystore = testdir + "/sun/security/tools/jarsigner/JarSigning.keystore";
 136 
 137         // jarsigner -keystore keystore -storepass "bbbbbb"
 138         //           -signedJar signed-multi-release.jar multi-release.jar b
 139 
 140         char[] password = "bbbbbb".toCharArray();
 141         KeyStore ks = KeyStore.getInstance(new File(keystore), password);
 142         PrivateKey pkb = (PrivateKey)ks.getKey("b", password);
 143         CertPath cp = CertificateFactory.getInstance("X.509")
 144                 .generateCertPath(Arrays.asList(ks.getCertificateChain("b")));
 145         JarSigner js = new JarSigner.Builder(pkb, cp).build();
 146         try (ZipFile in = new ZipFile("multi-release.jar");
 147              FileOutputStream os = new FileOutputStream("signed-multi-release.jar"))
 148         {
 149             js.sign(in, os);




  71             + "}\n";
  72     final private String java10 = java8.replace("8", "10");
  73     final String readme8 = "This is the root readme file";
  74     final String readme9 = "This is the version nine readme file";
  75     final String readme10 = "This is the version ten readme file";
  76     private Map<String,byte[]> rootClasses;
  77     private Map<String,byte[]> version9Classes;
  78     private Map<String,byte[]> version10Classes;
  79 
  80     public void buildUnversionedJar() throws IOException {
  81         JarBuilder jb = new JarBuilder("unversioned.jar");
  82         jb.addEntry("README", readme8.getBytes());
  83         jb.addEntry("version/Main.java", main.getBytes());
  84         jb.addEntry("version/Main.class", rootClasses.get("version.Main"));
  85         jb.addEntry("version/Version.java", java8.getBytes());
  86         jb.addEntry("version/Version.class", rootClasses.get("version.Version"));
  87         jb.build();
  88     }
  89 
  90     public void buildMultiReleaseJar() throws IOException {
  91         JarBuilder jb = customMultiReleaseJar("multi-release.jar", "true");
  92         addEntries(jb);
  93         jb.build();
  94     }
  95 
  96     private JarBuilder customMultiReleaseJar(String filename, String multiReleaseValue)
  97             throws IOException {
  98         JarBuilder jb = new JarBuilder(filename);
  99         jb.addAttribute("Multi-Release", multiReleaseValue);
 100         return jb;
 101     }
 102 
 103     public void buildCustomMultiReleaseJar(String filename, String multiReleaseValue,
 104             Map<String, String> extraAttributes) throws IOException {
 105         JarBuilder jb = new JarBuilder(filename);
 106         extraAttributes.entrySet()
 107                 .forEach(entry -> jb.addAttribute(entry.getKey(), entry.getValue()));
 108         jb.addAttribute("Multi-Release", multiReleaseValue);




 109         jb.build();
 110     }
 111 
 112     private void addEntries(JarBuilder jb) {


 113         jb.addEntry("README", readme8.getBytes());
 114         jb.addEntry("version/Main.java", main.getBytes());
 115         jb.addEntry("version/Main.class", rootClasses.get("version.Main"));
 116         jb.addEntry("version/Version.java", java8.getBytes());
 117         jb.addEntry("version/Version.class", rootClasses.get("version.Version"));
 118         jb.addEntry("META-INF/versions/9/README", readme9.getBytes());
 119         jb.addEntry("META-INF/versions/9/version/Version.java", java9.getBytes());
 120         jb.addEntry("META-INF/versions/9/version/PackagePrivate.java", ppjava9.getBytes());
 121         jb.addEntry("META-INF/versions/9/version/Version.class", version9Classes.get("version.Version"));
 122         jb.addEntry("META-INF/versions/9/version/PackagePrivate.class", version9Classes.get("version.PackagePrivate"));
 123         jb.addEntry("META-INF/versions/10/README", readme10.getBytes());
 124         jb.addEntry("META-INF/versions/10/version/Version.java", java10.getBytes());
 125         jb.addEntry("META-INF/versions/10/version/Version.class", version10Classes.get("version.Version"));

 126     }
 127 
 128     public void buildSignedMultiReleaseJar() throws Exception {
 129         String testsrc = System.getProperty("test.src",".");
 130         String testdir = findTestDir(testsrc);
 131         String keystore = testdir + "/sun/security/tools/jarsigner/JarSigning.keystore";
 132 
 133         // jarsigner -keystore keystore -storepass "bbbbbb"
 134         //           -signedJar signed-multi-release.jar multi-release.jar b
 135 
 136         char[] password = "bbbbbb".toCharArray();
 137         KeyStore ks = KeyStore.getInstance(new File(keystore), password);
 138         PrivateKey pkb = (PrivateKey)ks.getKey("b", password);
 139         CertPath cp = CertificateFactory.getInstance("X.509")
 140                 .generateCertPath(Arrays.asList(ks.getCertificateChain("b")));
 141         JarSigner js = new JarSigner.Builder(pkb, cp).build();
 142         try (ZipFile in = new ZipFile("multi-release.jar");
 143              FileOutputStream os = new FileOutputStream("signed-multi-release.jar"))
 144         {
 145             js.sign(in, os);


< prev index next >