< prev index next >

test/jaxp/javax/xml/jaxp/unittest/transform/CR6551600Test.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * 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
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -21,76 +21,96 @@
  * questions.
  */
 
 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;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
 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
  * @summary Test using UNC path as StreamResult.
  */
 @Listeners({ jaxp.library.BasePolicy.class })
 public class CR6551600Test {
 
     @Test
     public final void testUNCPath() {
-        boolean isWindows = getSystemProperty("os.name").contains("Windows");
-        JAXPTestUtilities.runWithTmpPermission(() -> {
-            String hostName = "";
+        var 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";
+        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(() -> {
             try {
                 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                 DocumentBuilder builder = factory.newDocumentBuilder();
                 Document doc = builder.newDocument();
                 Element root = doc.createElement("test");
                 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);
                 t.transform(source, result);
             } catch (Exception e) {
                 // unexpected failure
                 e.printStackTrace();
                 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"));
     }
 }
< prev index next >