changeset 14369:455228b64de4

8155928: Remove hardcoded port numbers from httpclient/Security.java test Reviewed-by: chegar, rriggs
author michaelm
date Thu, 05 May 2016 11:37:18 +0100
parents 832e924b2ff8
children ee18c1df243b 294e430e2951
files src/java.httpclient/share/classes/java/net/http/Utils.java test/java/net/httpclient/security/0.policy test/java/net/httpclient/security/1.policy test/java/net/httpclient/security/10.policy test/java/net/httpclient/security/11.policy test/java/net/httpclient/security/12.policy test/java/net/httpclient/security/14.policy test/java/net/httpclient/security/15.policy test/java/net/httpclient/security/2.policy test/java/net/httpclient/security/3.policy test/java/net/httpclient/security/4.policy test/java/net/httpclient/security/5.policy test/java/net/httpclient/security/6.policy test/java/net/httpclient/security/7.policy test/java/net/httpclient/security/8.policy test/java/net/httpclient/security/9.policy test/java/net/httpclient/security/Driver.java test/java/net/httpclient/security/Security.java
diffstat 18 files changed, 215 insertions(+), 63 deletions(-) [+]
line wrap: on
line diff
--- a/src/java.httpclient/share/classes/java/net/http/Utils.java	Wed May 04 08:53:09 2016 -0700
+++ b/src/java.httpclient/share/classes/java/net/http/Utils.java	Thu May 05 11:37:18 2016 +0100
@@ -146,7 +146,7 @@
         } else {
             sb.append(uri.getScheme())
                     .append("://")
-                    .append(uri.getHost())
+                    .append(uri.getAuthority())
                     .append(uri.getPath());
             urlstring = sb.toString();
 
--- a/test/java/net/httpclient/security/0.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/0.policy	Thu May 05 11:37:18 2016 +0100
@@ -2,8 +2,7 @@
 
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
--- a/test/java/net/httpclient/security/1.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/1.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 1
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
@@ -13,7 +12,7 @@
 
 
     // permissions specific to this test
-    permission java.net.URLPermission "http://127.0.0.1:*/files/foo.txt", "GET";
+    permission java.net.URLPermission "http://127.0.0.1:${port.number}/files/foo.txt", "GET";
 };
 
 // For proxy only. Not being tested
--- a/test/java/net/httpclient/security/10.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/10.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 10
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
@@ -12,7 +11,7 @@
     permission java.lang.RuntimePermission "createClassLoader";
 
     // permissions specific to this test
-    permission java.net.URLPermission "http://127.0.0.1:*/files/foo.txt", "GET:*";
+    permission java.net.URLPermission "http://127.0.0.1:${port.number}/files/foo.txt", "GET:*";
 };
 
 // For proxy only. Not being tested
--- a/test/java/net/httpclient/security/11.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/11.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 11
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
@@ -12,8 +11,8 @@
     permission java.lang.RuntimePermission "createClassLoader";
 
     // permissions specific to this test
-    permission java.net.URLPermission "http://127.0.0.1:*/files/foo.txt", "GET:*";
-    permission java.net.URLPermission "socket://127.0.0.1:27301", "CONNECT";
+    permission java.net.URLPermission "http://127.0.0.1:${port.number}/files/foo.txt", "GET:*";
+    permission java.net.URLPermission "socket://127.0.0.1:${port.number1}", "CONNECT";
 };
 
 
--- a/test/java/net/httpclient/security/12.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/12.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 11
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
@@ -12,8 +11,8 @@
     permission java.lang.RuntimePermission "createClassLoader";
 
     // permissions specific to this test
-    permission java.net.URLPermission "http://127.0.0.1:*/files/foo.txt", "GET:*";
-    permission java.net.URLPermission "socket://127.0.0.1:27301", "CONNECT";
+    permission java.net.URLPermission "http://127.0.0.1:${port.number}/files/foo.txt", "GET:*";
+    permission java.net.URLPermission "socket://127.0.0.1:${port.number1}", "CONNECT";
 };
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/httpclient/security/14.policy	Thu May 05 11:37:18 2016 +0100
@@ -0,0 +1,23 @@
+// Policy 14
+grant {
+    // permissions common to all tests
+    permission java.util.PropertyPermission "*", "read";
+    permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
+    permission java.net.NetPermission "getDefaultHttpClient";
+    permission java.lang.RuntimePermission "modifyThread";
+    permission java.util.logging.LoggingPermission "control", "";
+    permission java.net.SocketPermission "localhost:1024-", "accept,listen";
+    permission java.io.FilePermission "${test.src}${/}docs${/}-", "read";
+    permission java.lang.RuntimePermission "createClassLoader";
+
+
+    // permissions specific to this test
+    permission java.net.URLPermission "http://127.0.0.1:*/files/foo.txt", "GET";
+};
+
+// For proxy only. Not being tested
+grant codebase "file:${test.classes}/proxydir/-" {
+    permission java.net.SocketPermission "localhost:1024-", "accept,listen,connect";
+    permission java.net.SocketPermission "127.0.0.1:1024-", "connect,resolve";
+};
+
--- a/test/java/net/httpclient/security/15.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/15.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 11
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
@@ -13,7 +12,6 @@
 
     // permissions specific to this test
     permission java.net.URLPermission "http://127.0.0.1:*/files/foo.txt", "GET:*";
-    permission java.net.URLPermission "socket://127.0.0.1:27301", "CONNECT";
 
     // Test checks for this explicitly
     permission java.net.RuntimePermission "foobar";
--- a/test/java/net/httpclient/security/2.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/2.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 2
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
--- a/test/java/net/httpclient/security/3.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/3.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 3
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
--- a/test/java/net/httpclient/security/4.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/4.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 4
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
--- a/test/java/net/httpclient/security/5.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/5.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 5
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
--- a/test/java/net/httpclient/security/6.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/6.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 6
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
--- a/test/java/net/httpclient/security/7.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/7.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 7
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
--- a/test/java/net/httpclient/security/8.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/8.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 8
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
--- a/test/java/net/httpclient/security/9.policy	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/9.policy	Thu May 05 11:37:18 2016 +0100
@@ -1,8 +1,7 @@
 // Policy 9
 grant {
     // permissions common to all tests
-    permission java.util.PropertyPermission "test.src", "read";
-    permission java.util.PropertyPermission "test.classes", "read";
+    permission java.util.PropertyPermission "*", "read";
     permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
     permission java.net.NetPermission "getDefaultHttpClient";
     permission java.lang.RuntimePermission "modifyThread";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/java/net/httpclient/security/Driver.java	Thu May 05 11:37:18 2016 +0100
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2015, 2016, 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.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ */
+
+/**
+ * @test
+ * @bug 8087112
+ * @library /lib/testlibrary/
+ * @build jdk.testlibrary.SimpleSSLContext jdk.testlibrary.Utils
+ * @compile ../../../../com/sun/net/httpserver/LogFilter.java
+ * @compile ../../../../com/sun/net/httpserver/FileServerHandler.java
+ * @compile ../ProxyServer.java
+ * @build Security
+ *
+ * @run driver/timeout=60 Driver
+ */
+
+/**
+ * driver required for allocating free portnumbers and putting this number
+ * into security policy file used in some tests.
+ *
+ * The tests are in Security.java and port number supplied in -Dport.number
+ * and -Dport.number1 for tests that require a second free port
+ */
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.io.*;
+import java.net.*;
+
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.Utils;
+
+/**
+ * Driver for tests
+ */
+public class Driver {
+
+    public static void main(String[] args) throws Throwable {
+        System.out.println("Starting Driver");
+        runtest("1.policy", "1");
+        runtest("10.policy", "10");
+        runtest("11.policy", "11");
+        runtest("12.policy", "12");
+        System.out.println("DONE");
+    }
+
+    static class Logger extends Thread {
+        private final OutputStream ps;
+        private final InputStream stdout;
+
+        Logger(String cmdLine, Process p, String dir) throws IOException {
+            super();
+            setDaemon(true);
+            cmdLine = "Command line = [" + cmdLine + "]";
+            stdout = p.getInputStream();
+            File f = File.createTempFile("debug", ".txt", new File(dir));
+            ps = new FileOutputStream(f);
+            ps.write(cmdLine.getBytes());
+            ps.flush();
+        }
+
+        public void run() {
+            try {
+                byte[] buf = new byte[128];
+                int c;
+                while ((c = stdout.read(buf)) != -1) {
+                    ps.write(buf, 0, c);
+                    ps.flush();
+                }
+                ps.close();
+            } catch (Throwable e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    public static void runtest(String policy, String testnum) throws Throwable {
+
+        String testJdk = System.getProperty("test.jdk", "?");
+        String testSrc = System.getProperty("test.src", "?");
+        String testClassPath = System.getProperty("test.class.path", "?");
+        String testClasses = System.getProperty("test.classes", "?");
+        String sep = System.getProperty("file.separator", "?");
+        String javaCmd = testJdk + sep + "bin" + sep + "java";
+        int retval = 10; // 10 is special exit code denoting a bind error
+                         // in which case, we retry
+        while (retval == 10) {
+            List<String> cmd = new ArrayList<>();
+            cmd.add(javaCmd);
+            cmd.add("-Dtest.jdk=" + testJdk);
+            cmd.add("-Dtest.src=" + testSrc);
+            cmd.add("-Dtest.classes=" + testClasses);
+            cmd.add("-Djava.security.manager");
+            cmd.add("-Djava.security.policy=" + testSrc + sep + policy);
+            cmd.add("-Dport.number=" + Integer.toString(Utils.getFreePort()));
+            cmd.add("-Dport.number1=" + Integer.toString(Utils.getFreePort()));
+            cmd.add("-cp");
+            cmd.add(testClassPath);
+            cmd.add("Security");
+            cmd.add(testnum);
+
+            ProcessBuilder processBuilder = new ProcessBuilder(cmd)
+                .redirectOutput(ProcessBuilder.Redirect.PIPE)
+                .redirectErrorStream(true);
+
+            String cmdLine = cmd.stream().collect(Collectors.joining(" "));
+            Process child = processBuilder.start();
+            Logger log = new Logger(cmdLine, child, testClasses);
+            log.start();
+            retval = child.waitFor();
+            System.out.println("retval = " + retval);
+        }
+        if (retval != 0) {
+            Thread.sleep(2000);
+            throw new RuntimeException("Non zero return value");
+        }
+    }
+}
--- a/test/java/net/httpclient/security/Security.java	Wed May 04 08:53:09 2016 -0700
+++ b/test/java/net/httpclient/security/Security.java	Thu May 05 11:37:18 2016 +0100
@@ -32,7 +32,6 @@
  * @compile ../ProxyServer.java
  *
  * @run main/othervm/secure=java.lang.SecurityManager/policy=0.policy Security 0
- * @run main/othervm/secure=java.lang.SecurityManager/policy=1.policy Security 1
  * @run main/othervm/secure=java.lang.SecurityManager/policy=2.policy Security 2
  * @run main/othervm/secure=java.lang.SecurityManager/policy=3.policy Security 3
  * @run main/othervm/secure=java.lang.SecurityManager/policy=4.policy Security 4
@@ -41,14 +40,13 @@
  * @run main/othervm/secure=java.lang.SecurityManager/policy=7.policy Security 7
  * @run main/othervm/secure=java.lang.SecurityManager/policy=8.policy Security 8
  * @run main/othervm/secure=java.lang.SecurityManager/policy=9.policy Security 9
- * @run main/othervm/secure=java.lang.SecurityManager/policy=10.policy Security 10
- * @run main/othervm/secure=java.lang.SecurityManager/policy=11.policy Security 11
- * @run main/othervm/secure=java.lang.SecurityManager/policy=12.policy Security 12
  * @run main/othervm/secure=java.lang.SecurityManager/policy=0.policy Security 13
- * @run main/othervm/secure=java.lang.SecurityManager/policy=1.policy Security 14
+ * @run main/othervm/secure=java.lang.SecurityManager/policy=14.policy Security 14
  * @run main/othervm/secure=java.lang.SecurityManager/policy=15.policy Security 15
  */
 
+// Tests 1, 10, 11 and 12 executed from Driver
+
 import com.sun.net.httpserver.*;
 import java.io.IOException;
 import java.io.InputStream;
@@ -78,7 +76,7 @@
 
     static HttpServer s1 = null;
     static ExecutorService executor=null;
-    static int port;
+    static int port, proxyPort;
     static HttpClient client;
     static String httproot, fileuri, fileroot, redirectroot;
     static List<HttpClient> clients = new LinkedList<>();
@@ -136,6 +134,9 @@
         if (!dest.toFile().exists()) {
             System.out.printf("moving %s to %s\n", src.toString(), dest.toString());
             Files.move(src, dest,  StandardCopyOption.REPLACE_EXISTING);
+        } else if (src.toFile().exists()) {
+            System.out.printf("%s exists, deleting %s\n", dest.toString(), src.toString());
+            Files.delete(src);
         } else {
             System.out.printf("NOT moving %s to %s\n", src.toString(), dest.toString());
         }
@@ -225,15 +226,15 @@
             }),
             // (10) policy has permission for destination URL but not for proxy
             test(false, () -> { //Policy 10
-                directProxyTest(27208, true);
+                directProxyTest(proxyPort, true);
             }),
             // (11) policy has permission for both destination URL and proxy
             test(true, () -> { //Policy 11
-                directProxyTest(27301, true);
+                directProxyTest(proxyPort, true);
             }),
             // (12) policy has permission for both destination URL and proxy
             test(false, () -> { //Policy 11
-                directProxyTest(28301, false);
+                directProxyTest(proxyPort, false);
             }),
             // (13) async version of test 0
             test(false, () -> { // Policy 0
@@ -350,6 +351,8 @@
                 throw new RuntimeException("Failed");
             }
             System.out.println (policy + " succeeded as expected");
+        } catch (BindException e) {
+            System.exit(10);
         } catch (SecurityException e) {
             if (succeeds) {
                 System.out.println("FAILED");
@@ -362,8 +365,12 @@
     }
 
     public static void main(String[] args) throws Exception {
-        initServer();
-        setupProxy();
+        try {
+            initServer();
+            setupProxy();
+        } catch (BindException e) {
+            System.exit(10);
+        }
         fileroot = System.getProperty ("test.src")+ "/docs";
         int testnum = Integer.parseInt(args[0]);
         String policy = args[0];
@@ -382,33 +389,25 @@
             runtest(tr.test, policy, tr.result);
         } finally {
             s1.stop(0);
-            //executor.shutdownNow();
+            executor.shutdownNow();
             for (HttpClient client : clients)
                 client.executorService().shutdownNow();
         }
     }
 
-    // create Http Server on port range below. So, we can
-    HttpServer createServer() {
-        HttpServer server;
-        for (int i=25800; i<26800; i++) {
-            InetSocketAddress a = new InetSocketAddress(i);
-            try {
-                server = HttpServer.create(a, 0);
-                return server;
-            } catch (IOException e) {}
-        }
-        return null;
-    }
+    public static void initServer() throws Exception {
+        String portstring = System.getProperty("port.number");
+        port = portstring != null ? Integer.parseInt(portstring) : 0;
+        portstring = System.getProperty("port.number1");
+        proxyPort = portstring != null ? Integer.parseInt(portstring) : 0;
 
-    public static void initServer() throws Exception {
         Logger logger = Logger.getLogger("com.sun.net.httpserver");
         ConsoleHandler ch = new ConsoleHandler();
         logger.setLevel(Level.ALL);
         ch.setLevel(Level.ALL);
         logger.addHandler(ch);
         String root = System.getProperty ("test.src")+ "/docs";
-        InetSocketAddress addr = new InetSocketAddress (0);
+        InetSocketAddress addr = new InetSocketAddress (port);
         s1 = HttpServer.create (addr, 0);
         if (s1 instanceof HttpsServer) {
             throw new RuntimeException ("should not be httpsserver");
@@ -423,7 +422,13 @@
         s1.setExecutor (executor);
         s1.start();
 
-        port = s1.getAddress().getPort();
+        if (port == 0)
+            port = s1.getAddress().getPort();
+        else {
+            if (s1.getAddress().getPort() != port)
+                throw new RuntimeException("Error wrong port");
+            System.out.println("Port was assigned by Driver");
+        }
         System.out.println("HTTP server port = " + port);
         httproot = "http://127.0.0.1:" + port + "/files/";
         redirectroot = "http://127.0.0.1:" + port + "/redirect/";