jdk/test/com/sun/servicetag/JavaServiceTagTest.java
changeset 16574 51c8dbc33017
parent 16573 5e63bda2ec36
parent 16544 e6a8f1753168
child 16575 d7ad0dfaa411
equal deleted inserted replaced
16573:5e63bda2ec36 16574:51c8dbc33017
     1 /*
       
     2  * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.  Oracle designates this
       
     8  * particular file as subject to the "Classpath" exception as provided
       
     9  * by Oracle in the LICENSE file that accompanied this code.
       
    10  *
       
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14  * version 2 for more details (a copy is included in the LICENSE file that
       
    15  * accompanied this code).
       
    16  *
       
    17  * You should have received a copy of the GNU General Public License version
       
    18  * 2 along with this work; if not, write to the Free Software Foundation,
       
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20  *
       
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    22  * or visit www.oracle.com if you need additional information or have any
       
    23  * questions.
       
    24  */
       
    25 
       
    26 /*
       
    27  * @test
       
    28  * @bug     6622366 7078024
       
    29  * @summary Basic Test for ServiceTag.getJavaServiceTag()
       
    30  *          Disable creating the service tag in the system registry.
       
    31  *          Verify the existence of registration.xml file and the
       
    32  *          content of the service tag.
       
    33  * @author  Mandy Chung
       
    34  *
       
    35  * @run build JavaServiceTagTest
       
    36  * @run main JavaServiceTagTest
       
    37  */
       
    38 
       
    39 import com.sun.servicetag.*;
       
    40 import java.io.*;
       
    41 import java.util.*;
       
    42 
       
    43 public class JavaServiceTagTest {
       
    44     public static void main(String[] argv) throws Exception {
       
    45         String registrationDir = System.getProperty("test.classes");
       
    46 
       
    47         // disable calling to stclient
       
    48         System.setProperty("servicetag.sthelper.supported", "false");
       
    49 
       
    50         if (Registry.isSupported()) {
       
    51             throw new RuntimeException("Registry.isSupported() should " +
       
    52                 "return false");
       
    53         }
       
    54         // For debugging
       
    55         // System.setProperty("servicetag.verbose", "");
       
    56 
       
    57         // cleanup the registration.xml and servicetag file in the test directory
       
    58         System.setProperty("servicetag.dir.path", registrationDir);
       
    59         File regFile = new File(registrationDir, "registration.xml");
       
    60         regFile.delete();
       
    61         File svcTagFile = new File(registrationDir, "servicetag");
       
    62         svcTagFile.delete();
       
    63 
       
    64         ServiceTag svctag = ServiceTag.getJavaServiceTag("JavaServiceTagTest");
       
    65         checkServiceTag(svctag);
       
    66 
       
    67         if (svcTagFile.exists()) {
       
    68             throw new RuntimeException(svcTagFile + " should not exist.");
       
    69         }
       
    70 
       
    71         // registration.xml should be created
       
    72         if (!regFile.exists()) {
       
    73             throw new RuntimeException(regFile + " not created.");
       
    74         }
       
    75         BufferedInputStream in = new BufferedInputStream(new FileInputStream(regFile));
       
    76         RegistrationData registration = RegistrationData.loadFromXML(in);
       
    77         Set<ServiceTag> c = registration.getServiceTags();
       
    78         if (c.size() != 1) {
       
    79             throw new RuntimeException(regFile + " has " + c.size() +
       
    80                 " service tags. Expected 1.");
       
    81         }
       
    82         ServiceTag st = registration.getServiceTag(svctag.getInstanceURN());
       
    83         if (!Util.matches(st, svctag)) {
       
    84             throw new RuntimeException("ServiceTag " +
       
    85                 " doesn't match.");
       
    86         }
       
    87     }
       
    88 
       
    89     /**
       
    90      * Tests if the running platform is a JDK.
       
    91      */
       
    92     static boolean isJDK() {
       
    93         // Determine the JRE path by checking the existence of
       
    94         // <HOME>/jre/lib and <HOME>/lib.
       
    95         String javaHome = System.getProperty("java.home");
       
    96         String jrepath = javaHome + File.separator + "jre";
       
    97         File f = new File(jrepath, "lib");
       
    98         if (!f.exists()) {
       
    99             // java.home usually points to the JRE path
       
   100             jrepath = javaHome;
       
   101         }
       
   102 
       
   103         return jrepath.endsWith(File.separator + "jre");
       
   104     }
       
   105 
       
   106     private static void checkServiceTag(ServiceTag st) throws IOException {
       
   107         Properties props = loadServiceTagProps();
       
   108         // jdk 8 and later, JDK and JRE have the same product URN.
       
   109         String jdkUrn = props.getProperty("servicetag.jdk.urn");
       
   110         String jreUrn = props.getProperty("servicetag.jre.urn");
       
   111         boolean isJdk = isJDK();
       
   112 
       
   113         if (isJdk) {
       
   114             if (!st.getProductURN().equals(jdkUrn) ||
       
   115                     !st.getProductName().equals(
       
   116                          props.getProperty("servicetag.jdk.name"))) {
       
   117                 throw new RuntimeException("Product URN and name don't match.");
       
   118             }
       
   119         } else {
       
   120             if (!st.getProductURN().equals(jreUrn) ||
       
   121                     !st.getProductName().equals(
       
   122                         props.getProperty("servicetag.jre.name"))) {
       
   123                 throw new RuntimeException("Product URN and name don't match.");
       
   124             }
       
   125         }
       
   126         if (!st.getProductVersion().
       
   127                 equals(System.getProperty("java.version"))) {
       
   128             throw new RuntimeException("Unexpected product_version: " +
       
   129                 st.getProductVersion());
       
   130         }
       
   131         if (!st.getProductParent().
       
   132                 equals(props.getProperty("servicetag.parent.name"))) {
       
   133             throw new RuntimeException("Unexpected product_parent: " +
       
   134                 st.getProductParent());
       
   135         }
       
   136         if (!st.getProductParentURN().
       
   137                 equals(props.getProperty("servicetag.parent.urn"))) {
       
   138             throw new RuntimeException("Unexpected product_parent_urn: " +
       
   139                 st.getProductParentURN());
       
   140         }
       
   141         if (!st.getPlatformArch().
       
   142                 equals(System.getProperty("os.arch"))) {
       
   143             throw new RuntimeException("Unexpected platform_arch: " +
       
   144                 st.getPlatformArch());
       
   145         }
       
   146         String vendor = System.getProperty("java.vendor");
       
   147         if (!st.getProductVendor().
       
   148                 equals(vendor)) {
       
   149             throw new RuntimeException("Unexpected product_vendor: " +
       
   150                 st.getProductVendor());
       
   151         }
       
   152         if (!st.getSource().
       
   153                 equals("JavaServiceTagTest")) {
       
   154             throw new RuntimeException("Unexpected source: " +
       
   155                 st.getSource());
       
   156         }
       
   157         String[] ss = st.getProductDefinedInstanceID().split(",");
       
   158         boolean id = false;
       
   159         boolean dir = false;
       
   160         for (String s : ss) {
       
   161             String[] values = s.split("=");
       
   162             if (values[0].equals("id")) {
       
   163                 id = true;
       
   164                 String[] sss = values[1].split(" ");
       
   165                 if (!sss[0].equals(System.getProperty("java.runtime.version"))) {
       
   166                     throw new RuntimeException("Unexpected version in id: " +
       
   167                         sss[0]);
       
   168                 }
       
   169                 if (sss.length < 2) {
       
   170                     throw new RuntimeException("Unexpected id=" + values[1]);
       
   171                 }
       
   172             } else if (values[0].equals("dir")) {
       
   173                 dir = true;
       
   174             }
       
   175         }
       
   176         if (!id || !dir) {
       
   177             throw new RuntimeException("Unexpected product_defined_instance_id: " +
       
   178                 st.getProductDefinedInstanceID());
       
   179         }
       
   180     }
       
   181 
       
   182     private static Properties loadServiceTagProps()
       
   183            throws IOException {
       
   184         String filename = "/com/sun/servicetag/resources/javase_servicetag.properties";
       
   185         try (InputStream in = Installer.class.getClass().getResourceAsStream(filename)) {
       
   186             Properties props = new Properties();
       
   187             props.load(in);
       
   188             return props;
       
   189         }
       
   190     }
       
   191 }