Fixed #1088 (#1090)

* Fixed #1088

Co-authored-by: jansupol <jan.supol@oracle.com>

* cap after 1025 attempts

* [1082] Rename TCK packages from jakarta.ws.rs.tck to ee.jakarta.tck.ws.rs

Co-authored-by: jansupol <jan.supol@oracle.com>
Co-authored-by: Santiago Pericasgeertsen <santiago.pericasgeertsen@oracle.com>
diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/util/JaxrsUtil.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/util/JaxrsUtil.java
index d3eae1d..0568fc2 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/util/JaxrsUtil.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/util/JaxrsUtil.java
@@ -24,6 +24,7 @@
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.lang.reflect.Array;
+import java.net.ServerSocket;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Arrays;
@@ -34,6 +35,17 @@
 
 public abstract class JaxrsUtil {
 
+  public static final int unprivilegedPort() throws IOException {
+    for (int i = 0; i < 1025; i++) {
+      try (final ServerSocket serverSocket = new ServerSocket(0)) {
+        final int port = serverSocket.getLocalPort();
+        if (port > 1024)
+          return port;
+      }
+    }
+    throw new IOException("No free unprivileged port");
+  }
+
   public static final//
   String readFromStream(InputStream stream) throws IOException {
     InputStreamReader isr = new InputStreamReader(stream);
diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/sebootstrap/SeBootstrapIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/sebootstrap/SeBootstrapIT.java
index 29c70bd..c62736b 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/sebootstrap/SeBootstrapIT.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/sebootstrap/SeBootstrapIT.java
@@ -17,12 +17,14 @@
 package ee.jakarta.tck.ws.rs.sebootstrap;
 
 import static java.util.concurrent.TimeUnit.HOURS;
+
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.greaterThan;
 import static org.hamcrest.Matchers.is;
 
+import static ee.jakarta.tck.ws.rs.common.util.JaxrsUtil.unprivilegedPort;
+
 import java.io.IOException;
-import java.net.ServerSocket;
 import java.util.Collections;
 import java.util.Optional;
 import java.util.Set;
@@ -369,9 +371,7 @@
     };
 
     private static final int someFreeIpPort() throws IOException {
-        try (final ServerSocket serverSocket = new ServerSocket(0)) {
-            return serverSocket.getLocalPort();
-        }
+        return unprivilegedPort();
     }
 
     private static final int mockInt() {
diff --git a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/jaxrs31/spec/extensions/JAXRSClientIT.java b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/jaxrs31/spec/extensions/JAXRSClientIT.java
index 1626935..15b0f9b 100644
--- a/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/jaxrs31/spec/extensions/JAXRSClientIT.java
+++ b/jaxrs-tck/src/main/java/jakarta/ws/rs/tck/jaxrs31/spec/extensions/JAXRSClientIT.java
@@ -21,6 +21,8 @@
 import jakarta.ws.rs.core.Feature;
 import jakarta.ws.rs.core.Response;
 import ee.jakarta.tck.ws.rs.common.client.JaxrsCommonClient;
+import ee.jakarta.tck.ws.rs.common.client.JdkLoggingFilter;
+import ee.jakarta.tck.ws.rs.jaxrs21.spec.completionstage.CompletionStageResource;
 import ee.jakarta.tck.ws.rs.lib.util.TestUtil;
 import org.jboss.arquillian.container.test.api.Deployment;
 import org.jboss.arquillian.junit5.ArquillianExtension;
diff --git a/jaxrs-tck/src/test/java/jakarta/ws/rs/tck/common/util/JaxrsUtilTest.java b/jaxrs-tck/src/test/java/jakarta/ws/rs/tck/common/util/JaxrsUtilTest.java
new file mode 100644
index 0000000..8129aa3
--- /dev/null
+++ b/jaxrs-tck/src/test/java/jakarta/ws/rs/tck/common/util/JaxrsUtilTest.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2022 Markus Karg. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0, which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package ee.jakarta.tck.ws.rs.common.util;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.is;
+
+import static ee.jakarta.tck.ws.rs.common.util.JaxrsUtil.unprivilegedPort;
+
+import java.io.IOException;
+
+import org.junit.jupiter.api.Test;
+
+final class JaxrsUtilTest {
+
+    @Test
+    final void shouldReturnPortLarger1024() throws IOException {
+        // when
+        final int chosenPort = unprivilegedPort();
+
+        // then
+        assertThat(chosenPort, is(greaterThan(1024)));
+    }
+
+}