You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2019/06/13 09:37:13 UTC

[sling-whiteboard] 04/08: Simplify handling of client type specifics in the AgentIT

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git

commit c21af56ee23439d1b7c52b26f0693fb1fac54dfd
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Wed Jun 12 17:57:31 2019 +0200

    Simplify handling of client type specifics in the AgentIT
---
 .../java/org/apache/sling/uca/impl/AgentIT.java    | 72 ++++++++++++----------
 1 file changed, 40 insertions(+), 32 deletions(-)

diff --git a/url-connection-agent/src/test/java/org/apache/sling/uca/impl/AgentIT.java b/url-connection-agent/src/test/java/org/apache/sling/uca/impl/AgentIT.java
index ec420e5..f8ea7c7 100644
--- a/url-connection-agent/src/test/java/org/apache/sling/uca/impl/AgentIT.java
+++ b/url-connection-agent/src/test/java/org/apache/sling/uca/impl/AgentIT.java
@@ -17,6 +17,11 @@
 package org.apache.sling.uca.impl;
 
 import static java.time.Duration.ofSeconds;
+import static java.util.Objects.requireNonNull;
+import static org.apache.sling.uca.impl.HttpClientLauncher.ClientType.HC3;
+import static org.apache.sling.uca.impl.HttpClientLauncher.ClientType.HC4;
+import static org.apache.sling.uca.impl.HttpClientLauncher.ClientType.JavaNet;
+import static org.apache.sling.uca.impl.HttpClientLauncher.ClientType.OkHttp;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTimeout;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -31,8 +36,10 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.EnumMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
@@ -62,7 +69,16 @@ public class AgentIT {
     private static final Path STDERR = Paths.get("target", "stderr.txt");
     private static final Path STDOUT = Paths.get("target", "stdout.txt");
     private static final Logger LOG = LoggerFactory.getLogger(AgentIT.class);
-
+    
+    private static Map<ClientType, ErrorDescriptor> errorDescriptors = new EnumMap<>(ClientType.class);
+    static {
+        errorDescriptors.put(JavaNet, new ErrorDescriptor(SocketTimeoutException.class, "connect timed out", "Read timed out"));
+        errorDescriptors.put(HC3, new ErrorDescriptor(ConnectTimeoutException.class, "The host did not accept the connection within timeout of 3000 ms", "Read timed out"));
+        errorDescriptors.put(HC4, new ErrorDescriptor(org.apache.http.conn.ConnectTimeoutException.class, 
+                "Connect to repo1.maven.org:81 \\[.*\\] failed: connect timed out", "Read timed out"));
+        errorDescriptors.put(OkHttp, new ErrorDescriptor(SocketTimeoutException.class, "connect timed out", "timeout"));
+    }
+    
     /**
      * Validates that connecting to a unaccessible port on an existing port fails with a connect 
      * timeout exception
@@ -78,36 +94,12 @@ public class AgentIT {
     @EnumSource(HttpClientLauncher.ClientType.class)
     public void connectTimeout(ClientType clientType) throws IOException {
 
+        ErrorDescriptor ed =  requireNonNull(errorDescriptors.get(clientType), "Unhandled clientType " + clientType);
         RecordedThrowable error = assertTimeout(ofSeconds(5),  () -> runTest("http://repo1.maven.org:81", clientType));
         
-        Class<?> expectedClass;
-        String expectedMessageRegex;
-        
-        switch ( clientType ) {
-            case JavaNet:
-                expectedClass= SocketTimeoutException.class;
-                expectedMessageRegex = "connect timed out";
-                break;
-            case HC3:
-                expectedClass = ConnectTimeoutException.class;
-                expectedMessageRegex = "The host did not accept the connection within timeout of 3000 ms";
-                break;
-            case HC4:
-                expectedClass = org.apache.http.conn.ConnectTimeoutException.class;
-                expectedMessageRegex = "Connect to repo1.maven.org:81 \\[.*\\] failed: connect timed out";
-                break;
-            case OkHttp:
-                expectedClass = SocketTimeoutException.class;
-                expectedMessageRegex = "connect timed out";
-                break;
-                
-            default:
-                throw new AssertionError("Unhandled clientType " + clientType);
-        }
-        
-        assertEquals(expectedClass.getName(), error.className);
-        assertTrue(error.message.matches(expectedMessageRegex), 
-            "Actual message " + error.message + " did not match regex " + expectedMessageRegex);
+        assertEquals(ed.connectTimeoutClass.getName(), error.className);
+        assertTrue(error.message.matches(ed.connectTimeoutMessageRegex), 
+            "Actual message " + error.message + " did not match regex " + ed.connectTimeoutMessageRegex);
     }
 
     /**
@@ -119,9 +111,11 @@ public class AgentIT {
     @EnumSource(HttpClientLauncher.ClientType.class)
     public void readTimeout(ClientType clientType, MisbehavingServerControl server) throws IOException {
         
+        ErrorDescriptor ed =  requireNonNull(errorDescriptors.get(clientType), "Unhandled clientType " + clientType);
         RecordedThrowable error = assertTimeout(ofSeconds(5),  () -> runTest("http://localhost:" + server.getLocalPort(), clientType));
+        
         assertEquals(SocketTimeoutException.class.getName(), error.className);
-        assertEquals( clientType != ClientType.OkHttp ? "Read timed out" : "timeout", error.message);
+        assertEquals(ed.readTimeoutMessage, error.message);
     }
 
     private RecordedThrowable runTest(String urlSpec, ClientType clientType) throws IOException, InterruptedException {
@@ -219,6 +213,22 @@ public class AgentIT {
 
         return new RecordedThrowable(className, message);
     }
+
+    /**
+     * Data class for defining specific error messages related to individual {@link ClientType client types}. 
+     */
+    static class ErrorDescriptor {
+        private Class<? extends IOException> connectTimeoutClass;
+        private String connectTimeoutMessageRegex;
+        private String readTimeoutMessage;
+
+        public ErrorDescriptor(Class<? extends IOException> connectTimeoutClass, String connectTimeoutMessageRegex,
+                String readTimeoutMessage) {
+            this.connectTimeoutClass = connectTimeoutClass;
+            this.connectTimeoutMessageRegex = connectTimeoutMessageRegex;
+            this.readTimeoutMessage = readTimeoutMessage;
+        }
+    }
     
     /**
      * Basic information about a {@link Throwable} that was recorded in a file
@@ -231,7 +241,5 @@ public class AgentIT {
             this.className = className;
             this.message = message;
         }
-        
-        
     }
 }