--- old/test/jaxp/javax/xml/jaxp/unittest/transform/CR6551600Test.java 2018-12-05 10:14:39.119673652 +0800 +++ new/test/jaxp/javax/xml/jaxp/unittest/transform/CR6551600Test.java 2018-12-05 10:14:37.917072651 +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"); - 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"; + 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(() -> { 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")); } }