[Edgent-438] improve WebSocketClientTest's skip-if-cant-connect
diff --git a/connectors/websocket/src/test/java/org/apache/edgent/test/connectors/wsclient/javax/websocket/WebSocketClientConnectTestHelper.java b/connectors/websocket/src/test/java/org/apache/edgent/test/connectors/wsclient/javax/websocket/WebSocketClientConnectTestHelper.java
new file mode 100644
index 0000000..f6ffc12
--- /dev/null
+++ b/connectors/websocket/src/test/java/org/apache/edgent/test/connectors/wsclient/javax/websocket/WebSocketClientConnectTestHelper.java
@@ -0,0 +1,46 @@
+package org.apache.edgent.test.connectors.wsclient.javax.websocket;
+
+import java.net.URI;
+import java.util.Properties;
+
+import javax.websocket.ClientEndpoint;
+import javax.websocket.ContainerProvider;
+import javax.websocket.OnError;
+import javax.websocket.Session;
+import javax.websocket.WebSocketContainer;
+
+import org.eclipse.jetty.util.component.LifeCycle;
+
+@ClientEndpoint
+public class WebSocketClientConnectTestHelper {
+
+ @OnError
+ public void onError(Session client, Throwable t) {
+ System.err.println("Unable to connect to WebSocket server: "+t.getMessage());
+ }
+
+ public static void connectToServer(Properties config) throws Exception {
+ // Verify we can create a real websocket connection to the server.
+ //
+ // We do the following instead of a simple socket connect
+ // because in at least one location, the websocket connect/upgrade
+ // fails with: expecting 101 got 403 (Forbidden).
+ // There's something about that location that's not
+ // allowing a websocket to be created to the (public) server.
+ // Everything works fine from other locations.
+ //
+ String wsUri = config.getProperty("ws.uri");
+ URI uri = new URI(wsUri);
+ WebSocketContainer container = ContainerProvider.getWebSocketContainer();
+ try {
+ Session session = container.connectToServer(WebSocketClientConnectTestHelper.class, uri);
+ session.close();
+ }
+ finally {
+ if (container instanceof LifeCycle) {
+ ((LifeCycle)container).stop();
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/connectors/websocket/src/test/java/org/apache/edgent/test/connectors/wsclient/javax/websocket/WebSocketClientTest.java b/connectors/websocket/src/test/java/org/apache/edgent/test/connectors/wsclient/javax/websocket/WebSocketClientTest.java
index 4ef65c9..b256bfe 100644
--- a/connectors/websocket/src/test/java/org/apache/edgent/test/connectors/wsclient/javax/websocket/WebSocketClientTest.java
+++ b/connectors/websocket/src/test/java/org/apache/edgent/test/connectors/wsclient/javax/websocket/WebSocketClientTest.java
@@ -23,8 +23,6 @@
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
-import java.net.InetSocketAddress;
-import java.net.Socket;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
@@ -772,21 +770,15 @@
}
private void skipTestIfCantConnect(Properties config) throws Exception {
- String wsUri = config.getProperty("ws.uri");
- // Skip tests if the WebSocket server can't be contacted.
- try {
- URI uri = new URI(wsUri);
- int port = uri.getPort();
- if (port == -1)
- port = uri.getScheme().equals("ws") ? 80 : 443;
- Socket s = new Socket();
- s.connect(new InetSocketAddress(uri.getHost(), port), 5*1000/*cn-timeout-msec*/);
- s.close();
- } catch (Exception e) {
- System.err.println("Unable to connect to WebSocket server "+wsUri+" : "+e.getMessage());
- e.printStackTrace();
- assumeTrue(false);
- }
+ String wsUri = config.getProperty("ws.uri");
+ try {
+ WebSocketClientConnectTestHelper.connectToServer(config);
+ } catch (Exception e) {
+ System.err.println("Unable to connect to WebSocket server "+wsUri+" : "+e.getMessage());
+ e.printStackTrace();
+ System.err.println("skipTestIfCantConnect(): SKIPPING TEST");
+ assumeTrue(false);
+ }
}
@Test