blob: 6ac19cd9fe0e1af777dfd3922e94901fbf5fdb58 [file] [log] [blame]
/*
* 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;
}
}