< prev index next >

test/jdk/java/lang/System/PropertyTest.java

Print this page
rev 52426 : 8185496: Improve performance of system properties initialization in initPhase1
8213424: VersionProps duplicate and skipped initialization

@@ -19,42 +19,242 @@
  * 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.
  */
 
+import java.lang.System;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
+import org.testng.Assert;
+import org.testng.IMethodInstance;
+import org.testng.IMethodInterceptor;
+import org.testng.TestListenerAdapter;
+import org.testng.TestNG;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+
 /*
  * @test
- * @bug 4463345
- * @summary Simple test of System.clearProperty
- * @run main/othervm ClearProperty
+ * @bug 4463345 4244670 8030781
+ * @summary Simple test of System getProperty, setProperty, clearProperty,
+ *      getProperties, and setProperties
+ * @run testng/othervm PropertyTest
  */
 
-public class ClearProperty {
-    public static void main(String [] argv) throws Exception {
-        clearTest();
-        paramTest();
+@Test
+public class PropertyTest {
+
+    @DataProvider(name = "requiredProperties")
+    static Object[][] requiredProperties() {
+        return new Object[][]{
+                {"java.version"},
+                {"java.version.date"},
+                {"java.vendor"},
+                {"java.vendor.url"},
+                {"java.home"},
+                {"java.vm.specification.version"},
+                {"java.vm.specification.vendor"},
+                {"java.vm.specification.name"},
+                {"java.vm.version"},
+                {"java.vm.vendor"},
+                {"java.vm.name"},
+                {"java.specification.version"},
+                {"java.specification.vendor"},
+                {"java.specification.name"},
+                {"java.class.version"},
+                {"java.class.path"},
+                {"java.library.path"},
+                {"java.io.tmpdir"},
+                {"os.arch"},
+                {"os.version"},
+                {"file.separator"},
+                {"path.separator"},
+                {"line.separator"},
+                {"user.name"},
+                {"user.home"},
+                {"user.dir"},
+                {"java.runtime.version"},
+                {"java.runtime.name"},
+        };
     }
 
-    static void clearTest() throws Exception {
+    @Test
+    static void getTest() {
         System.setProperty("blah", "blech");
-        if (!System.getProperty("blah").equals("blech"))
-            throw new RuntimeException("Clear test failed 1");
-        System.clearProperty("blah");
-        if (System.getProperty("blah") != null)
-            throw new RuntimeException("Clear test failed 2");
+        Assert.assertEquals(System.getProperty("blah"), "blech");
+
+        try {
+            System.getProperty(null);
+            Assert.fail("Failed: expected NullPointerException");
+        } catch (NullPointerException npe) {
+            // Correct result
     }
+        try {
+            System.getProperty("");
+            Assert.fail("Failed: expected IllegalArgumentException");
+        } catch (IllegalArgumentException iae) {
+            // Correct result
+        }
+    }
+
+    @Test
+    static void clearTest() {
+        System.setProperty("blah", "blech");
+        Assert.assertEquals(System.getProperty("blah"), "blech");
+
+        System.clearProperty("blah");
+        Assert.assertNull(System.getProperty("blah"));
 
-    static void paramTest() throws Exception {
         try {
             System.clearProperty(null);
-            throw new RuntimeException("Param test failed");
+            Assert.fail("Failed: expected NullPointerException");
         } catch (NullPointerException npe) {
             // Correct result
         }
         try {
             System.clearProperty("");
-            throw new RuntimeException("Param test failed");
+            Assert.fail("Failed: expected IllegalArgumentException");
+        } catch (IllegalArgumentException iae) {
+            // Correct result
+        }
+    }
+
+    @Test
+    static void setTest() {
+        System.setProperty("blah", "blech");
+        Assert.assertEquals(System.getProperty("blah"), "blech");
+
+        System.setProperty("blah", "");
+        Assert.assertEquals(System.getProperty("blah"), "");
+
+        try {
+            System.setProperty(null, null);
+            Assert.fail("Failed: expected NullPointerException");
+        } catch (NullPointerException npe) {
+            // Correct result
+        }
+
+        try {
+            System.setProperty("blah", null);
+            Assert.fail("Failed: expected NullPointerException");
+        } catch (NullPointerException npe) {
+            // Correct result
+        }
+
+        try {
+            System.setProperty(null, "blech");
+            Assert.fail("Failed: expected NullPointerException");
+        } catch (NullPointerException npe) {
+            // Correct result
+        }
+
+        try {
+            System.setProperty("", "blech");
+            Assert.fail("Failed: expected IllegalArgumentException");
         } catch (IllegalArgumentException iae) {
             // Correct result
         }
+        try {
+            System.setProperty("", "");
+            Assert.fail("Failed: expected IllegalArgumentException");
+        } catch (IllegalArgumentException iae) {
+            // Correct result
+        }
+    }
+
+    @Test
+    static void replaceSetProperties() {
+        Properties oldProps = System.getProperties();
+        Properties newProps = new Properties();
+        oldProps.forEach( (k,v) -> newProps.put(k,v));
+        System.setProperties(newProps);
+
+        Assert.assertSame(System.getProperties(), newProps,
+                "getProperties not the same as setProperties");
+
+        final String KEY = "blah";
+        final String VALUE = "blech";
+
+        // Set via Property instance; get via System methods
+        newProps.setProperty(KEY, VALUE);
+        Assert.assertEquals(System.getProperty(KEY), VALUE, KEY);
+
+        String s = (String)newProps.remove(KEY);
+        Assert.assertEquals(s, VALUE);
+        Assert.assertNull(System.getProperty(KEY), KEY);
+
+        // Set via System methods; Get via Property instance;
+        System.setProperty(KEY, VALUE);
+        Assert.assertEquals(newProps.getProperty(KEY), VALUE);
+
+        String t = System.clearProperty(KEY);
+        Assert.assertEquals(t, VALUE, KEY);
+        Assert.assertNull(newProps.getProperty(KEY), KEY);
+    }
+
+    @Test
+    static void setNullProperties() {
+        Properties oldProps = System.getProperties();
+        Properties savedProps = new Properties();
+        oldProps.forEach((k,v) -> {
+            if (v == null) {
+                throw new RuntimeException("null value, key: " + k);
+            }
+            savedProps.put(k,v);
+        });
+
+        // Re-initialize properties
+        System.setProperties(null);
+
+        Properties newProps = System.getProperties();
+        Object[][] propnames = requiredProperties();
+        for (Object[] p : propnames) {
+            String name = (String)p[0];
+            Assert.assertEquals(System.getProperty(name), savedProps.getProperty(name), name);
+
+            Assert.assertEquals(newProps.getProperty(name), savedProps.getProperty(name), name);
+        }
+    }
+
+    // Verify all the required properties have values from System.getProperty and
+    // System.getProperties()
+    @Test(dataProvider = "requiredProperties")
+    static void checkRequiredProperties(String name) {
+        Assert.assertNotNull(System.getProperty(name), name);
+
+        Properties props = System.getProperties();
+        Assert.assertNotNull(props.getProperty(name), name);
+    }
+
+    @SuppressWarnings("raw_types")
+    @Test(enabled=false)
+    public static void main(String[] args) {
+        TestListenerAdapter tla = new TestListenerAdapter();
+
+        Class<?>[] testclass = {PropertyTest.class};
+        TestNG testng = new TestNG();
+        testng.setTestClasses(testclass);
+        testng.addListener(tla);
+        if (args.length > 0) {
+            IMethodInterceptor intercept = (m, c) -> {
+                List<IMethodInstance> x = m.stream()
+                        .filter(m1 -> m1.getMethod().getMethodName().contains(args[0]))
+                        .collect(Collectors.toList());
+                return x;
+            };
+            testng.setMethodInterceptor(intercept);
+        }
+        testng.run();
+        tla.getPassedTests()
+                .stream().forEach(t -> System.out.printf("Passed: %s%s%n", t.getName(),
+                List.of(t.getParameters())));
+        tla.getFailedTests()
+                .stream().forEach(t -> System.out.printf("Failed: %s%s%n", t.getName(),
+                List.of(t.getParameters())));
     }
 }
< prev index next >