test/hotspot/jtreg/runtime/appcds/DirClasspathTest.java
changeset 48611 4d7a4fad8190
parent 48469 7312ae4465d6
child 49931 840e26123940
--- a/test/hotspot/jtreg/runtime/appcds/DirClasspathTest.java	Thu Jan 04 22:54:40 2018 -0500
+++ b/test/hotspot/jtreg/runtime/appcds/DirClasspathTest.java	Thu Jan 04 22:47:38 2018 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 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
@@ -33,8 +33,13 @@
 import jdk.test.lib.Platform;
 import jdk.test.lib.process.OutputAnalyzer;
 import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
 
 public class DirClasspathTest {
+    private static final int MAX_PATH = 260;
+
     public static void main(String[] args) throws Exception {
         File dir = new File(System.getProperty("user.dir"));
         File emptydir = new File(dir, "emptydir");
@@ -42,15 +47,36 @@
 
         // Empty dir in -cp: should be OK
         OutputAnalyzer output;
-        if (!Platform.isWindows()) {
-            // This block fails on Windows because of JDK-8192927
-            output = TestCommon.dump(emptydir.getPath(), TestCommon.list("DoesntMatter"), "-Xlog:class+path=info");
-            TestCommon.checkDump(output);
+        String classList[] = {"java/lang/Object"};
+        output = TestCommon.dump(emptydir.getPath(), classList, "-Xlog:class+path=info");
+        TestCommon.checkDump(output);
+
+        // Long path to empty dir in -cp: should be OK
+        Path classDir = Paths.get(System.getProperty("test.classes"));
+        Path destDir = classDir;
+        int subDirLen = MAX_PATH - classDir.toString().length() - 2;
+        if (subDirLen > 0) {
+            char[] chars = new char[subDirLen];
+            Arrays.fill(chars, 'x');
+            String subPath = new String(chars);
+            destDir = Paths.get(System.getProperty("test.classes"), subPath);
         }
+        File longDir = destDir.toFile();
+        longDir.mkdir();
+        File subDir = new File(longDir, "subdir");
+        subDir.mkdir();
+        output = TestCommon.dump(subDir.getPath(), classList, "-Xlog:class+path=info");
+        TestCommon.checkDump(output);
 
         // Non-empty dir in -cp: should fail
         // <dir> is not empty because it has at least one subdirectory, i.e., <emptydir>
-        output = TestCommon.dump(dir.getPath(), TestCommon.list("DoesntMatter"), "-Xlog:class+path=info");
+        output = TestCommon.dump(dir.getPath(), classList, "-Xlog:class+path=info");
+        output.shouldNotHaveExitValue(0);
+        output.shouldContain("CDS allows only empty directories in archived classpaths");
+
+        // Long path to non-empty dir in -cp: should fail
+        // <dir> is not empty because it has at least one subdirectory, i.e., <emptydir>
+        output = TestCommon.dump(longDir.getPath(), classList, "-Xlog:class+path=info");
         output.shouldNotHaveExitValue(0);
         output.shouldContain("CDS allows only empty directories in archived classpaths");
     }