| /* |
| * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. Oracle designates this |
| * particular file as subject to the "Classpath" exception as provided |
| * by Oracle in the LICENSE file that accompanied this code. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| |
| /* |
| * @test |
| * @bug 6622366 |
| * @summary Basic Test for ServiceTag.getJavaServiceTag() |
| * Disable creating the service tag in the system registry. |
| * Verify the existence of registration.xml file and the |
| * content of the service tag. |
| * @author Mandy Chung |
| * |
| * @run build JavaServiceTagTest |
| * @run main JavaServiceTagTest |
| */ |
| |
| import com.sun.servicetag.*; |
| import java.io.*; |
| import java.util.*; |
| |
| public class JavaServiceTagTest { |
| public static void main(String[] argv) throws Exception { |
| String registrationDir = System.getProperty("test.classes"); |
| |
| // disable calling to stclient |
| System.setProperty("servicetag.sthelper.supported", "false"); |
| |
| if (Registry.isSupported()) { |
| throw new RuntimeException("Registry.isSupported() should " + |
| "return false"); |
| } |
| // For debugging |
| // System.setProperty("servicetag.verbose", ""); |
| |
| // cleanup the registration.xml and servicetag file in the test directory |
| System.setProperty("servicetag.dir.path", registrationDir); |
| File regFile = new File(registrationDir, "registration.xml"); |
| regFile.delete(); |
| File svcTagFile = new File(registrationDir, "servicetag"); |
| svcTagFile.delete(); |
| |
| ServiceTag svctag = ServiceTag.getJavaServiceTag("JavaServiceTagTest"); |
| checkServiceTag(svctag); |
| |
| if (svcTagFile.exists()) { |
| throw new RuntimeException(svcTagFile + " should not exist."); |
| } |
| |
| // registration.xml should be created |
| if (!regFile.exists()) { |
| throw new RuntimeException(regFile + " not created."); |
| } |
| BufferedInputStream in = new BufferedInputStream(new FileInputStream(regFile)); |
| RegistrationData registration = RegistrationData.loadFromXML(in); |
| Set<ServiceTag> c = registration.getServiceTags(); |
| if (c.size() != 1) { |
| throw new RuntimeException(regFile + " has " + c.size() + |
| " service tags. Expected 1."); |
| } |
| ServiceTag st = registration.getServiceTag(svctag.getInstanceURN()); |
| if (!Util.matches(st, svctag)) { |
| throw new RuntimeException("ServiceTag " + |
| " doesn't match."); |
| } |
| } |
| |
| private static void checkServiceTag(ServiceTag st) throws IOException { |
| Properties props = loadSwordfishEntries(); |
| if (st.getProductURN(). |
| equals(props.getProperty("servicetag.jdk.urn"))) { |
| if (!st.getProductName(). |
| equals(props.getProperty("servicetag.jdk.name"))) { |
| throw new RuntimeException("Product URN and name don't match."); |
| } |
| } else if (st.getProductURN(). |
| equals(props.getProperty("servicetag.jre.urn"))) { |
| if (!st.getProductName(). |
| equals(props.getProperty("servicetag.jre.name"))) { |
| throw new RuntimeException("Product URN and name don't match."); |
| } |
| } else { |
| throw new RuntimeException("Unexpected product_urn: " + |
| st.getProductURN()); |
| } |
| if (!st.getProductVersion(). |
| equals(System.getProperty("java.version"))) { |
| throw new RuntimeException("Unexpected product_version: " + |
| st.getProductVersion()); |
| } |
| if (!st.getProductParent(). |
| equals(props.getProperty("servicetag.parent.name"))) { |
| throw new RuntimeException("Unexpected product_parent: " + |
| st.getProductParent()); |
| } |
| if (!st.getProductParentURN(). |
| equals(props.getProperty("servicetag.parent.urn"))) { |
| throw new RuntimeException("Unexpected product_parent_urn: " + |
| st.getProductParentURN()); |
| } |
| if (!st.getPlatformArch(). |
| equals(System.getProperty("os.arch"))) { |
| throw new RuntimeException("Unexpected platform_arch: " + |
| st.getPlatformArch()); |
| } |
| if (!st.getProductVendor(). |
| equals("Sun Microsystems")) { |
| throw new RuntimeException("Unexpected product_vendor: " + |
| st.getProductVendor()); |
| } |
| if (!st.getSource(). |
| equals("JavaServiceTagTest")) { |
| throw new RuntimeException("Unexpected source: " + |
| st.getSource()); |
| } |
| String[] ss = st.getProductDefinedInstanceID().split(","); |
| boolean id = false; |
| boolean dir = false; |
| for (String s : ss) { |
| String[] values = s.split("="); |
| if (values[0].equals("id")) { |
| id = true; |
| String[] sss = values[1].split(" "); |
| if (!sss[0].equals(System.getProperty("java.runtime.version"))) { |
| throw new RuntimeException("Unexpected version in id: " + |
| sss[0]); |
| } |
| if (sss.length < 2) { |
| throw new RuntimeException("Unexpected id=" + values[1]); |
| } |
| } else if (values[0].equals("dir")) { |
| dir = true; |
| } |
| } |
| if (!id || !dir) { |
| throw new RuntimeException("Unexpected product_defined_instance_id: " + |
| st.getProductDefinedInstanceID()); |
| } |
| } |
| |
| private static Properties loadSwordfishEntries() |
| throws IOException { |
| int version = sun.misc.Version.jdkMinorVersion(); |
| String filename = "/com/sun/servicetag/resources/javase_" + |
| version + "_swordfish.properties"; |
| InputStream in = Installer.class.getClass().getResourceAsStream(filename); |
| Properties props = new Properties(); |
| try { |
| props.load(in); |
| } finally { |
| in.close(); |
| } |
| return props; |
| } |
| } |