8213300: jaxp/unittest/transform/CR6551600Test.java fails due to exception in jdk/jdk CI
authorfyuan
Wed, 05 Dec 2018 16:41:13 +0800
changeset 52830 726f6a23f004
parent 52829 af52abc1f61e
child 52845 6419f8d3cc3e
8213300: jaxp/unittest/transform/CR6551600Test.java fails due to exception in jdk/jdk CI Reviewed-by: joehw
test/jaxp/javax/xml/jaxp/unittest/transform/CR6551600Test.java
--- a/test/jaxp/javax/xml/jaxp/unittest/transform/CR6551600Test.java	Fri Nov 30 15:22:44 2018 +0100
+++ b/test/jaxp/javax/xml/jaxp/unittest/transform/CR6551600Test.java	Wed Dec 05 16:41:13 2018 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2018, 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
@@ -23,10 +23,11 @@
 
 package transform;
 
-import static jaxp.library.JAXPTestUtilities.getSystemProperty;
-
 import java.io.File;
 import java.io.FilePermission;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -35,17 +36,18 @@
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
-import jaxp.library.JAXPTestUtilities;
-
 import org.testng.Assert;
 import org.testng.annotations.Listeners;
 import org.testng.annotations.Test;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import jaxp.library.JAXPTestUtilities;
+
 /*
  * @test
  * @bug 6551600
+ * @requires os.family == "windows"
  * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
  * @run testng/othervm -DrunSecMngr=true transform.CR6551600Test
  * @run testng/othervm transform.CR6551600Test
@@ -56,17 +58,22 @@
 
     @Test
     public final void testUNCPath() {
-        boolean isWindows = getSystemProperty("os.name").contains("Windows");
+        var hostName = "";
+        try {
+            hostName = java.net.InetAddress.getLocalHost().getHostName();
+        } catch (java.net.UnknownHostException e) {
+            // falls through
+        }
+
+        var uncPath = "\\\\" + hostName + "\\C$\\temp\\";
+
+        if (!checkAccess(uncPath)) {
+            System.out.println("Cannot access UNC path. Test exits.");
+            return;
+        }
+
+        var uncFilePath = uncPath + "xslt_unc_test.xml";
         JAXPTestUtilities.runWithTmpPermission(() -> {
-            String hostName = "";
-            try {
-                hostName = java.net.InetAddress.getLocalHost().getHostName();
-            } catch (java.net.UnknownHostException e) {
-                // falls through
-            }
-
-            String path = isWindows ? "\\\\" + hostName + "\\C$\\xslt_unc_test.xml" : "///tmp/test.xml";
-
             try {
                 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                 DocumentBuilder builder = factory.newDocumentBuilder();
@@ -75,7 +82,7 @@
                 doc.appendChild(root);
                 // create an identity transform
                 Transformer t = TransformerFactory.newInstance().newTransformer();
-                File f = new File(path);
+                File f = new File(uncFilePath);
                 StreamResult result = new StreamResult(f);
                 DOMSource source = new DOMSource(doc);
                 System.out.println("Writing to " + f);
@@ -86,11 +93,24 @@
                 Assert.fail(e.toString());
             }
 
-            File file = new File(path);
+            File file = new File(uncFilePath);
             if (file.exists()) {
                 file.deleteOnExit();
             }
-        }, isWindows ? new FilePermission("//localhost/C$/xslt_unc_test.xml", "read,write,delete")
-                : new FilePermission("///tmp/test.xml", "read,write,delete"));
+        }, new FilePermission(uncFilePath, "read,write,delete"));
+    }
+
+    private boolean checkAccess(String path) {
+        return JAXPTestUtilities.runWithTmpPermission(() -> {
+            try {
+                Path tmepFile = Files.createTempFile(Paths.get(path), "test", "6551600");
+                Files.deleteIfExists(tmepFile);
+                return true;
+            } catch (Exception e) {
+                System.out.println("Access check failed.");
+                e.printStackTrace();
+                return false;
+            }
+        }, new FilePermission(path + "*", "read,write,delete"));
     }
 }