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 b0fd4f8e0b252795849e9bd57ce1d16527d47674 Author: Robert Munteanu <[email protected]> AuthorDate: Wed Jun 5 11:03:49 2019 +0200 Some work on integration tests --- url-connection-agent/pom.xml | 11 ++ .../org/apache/sling/uca/impl/IntegrationTest.java | 71 ++++++++++++ .../java/org/apache/sling/uca/impl/ServerRule.java | 121 +++++++++++++++++++++ 3 files changed, 203 insertions(+) diff --git a/url-connection-agent/pom.xml b/url-connection-agent/pom.xml index 01af5b3..e44e7ba 100644 --- a/url-connection-agent/pom.xml +++ b/url-connection-agent/pom.xml @@ -70,5 +70,16 @@ <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-server</artifactId> + <version>9.4.18.v20190429</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-simple</artifactId> + <scope>test</scope> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/url-connection-agent/src/test/java/org/apache/sling/uca/impl/IntegrationTest.java b/url-connection-agent/src/test/java/org/apache/sling/uca/impl/IntegrationTest.java new file mode 100644 index 0000000..b3d6816 --- /dev/null +++ b/url-connection-agent/src/test/java/org/apache/sling/uca/impl/IntegrationTest.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.sling.uca.impl; + +import static org.junit.Assert.fail; + +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.util.concurrent.TimeUnit; + +import org.junit.Rule; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class IntegrationTest { + + private static final Logger LOG = LoggerFactory.getLogger(IntegrationTest.class); + + @Rule + public ServerRule server = new ServerRule(); + + @Test(expected = IOException.class, timeout = 5000) + public void connectTimeout() throws IOException { + + runTest(false); + } + + @Test(expected = IOException.class, timeout = 15000) + public void readTimeout() throws IOException { + + runTest(true); + } + + + private void runTest(boolean shouldConnect) throws MalformedURLException, IOException { + URL url = new URL("http://localhost:" + server.getLocalPort()); + LOG.info("connecting"); + URLConnection connection = url.openConnection(); + // TODO - remove when running through the harness + connection.setConnectTimeout((int) TimeUnit.SECONDS.toMillis(3)); + connection.setReadTimeout((int) TimeUnit.SECONDS.toMillis(3)); + connection.connect(); + /* + * if ( !shouldConnect ) fail("Connection should not be succesful"); + */ + LOG.info("connected"); + try ( InputStream is = connection.getInputStream()) { + while ( is.read() != -1) + ; + } + LOG.info("read"); + } +} diff --git a/url-connection-agent/src/test/java/org/apache/sling/uca/impl/ServerRule.java b/url-connection-agent/src/test/java/org/apache/sling/uca/impl/ServerRule.java new file mode 100644 index 0000000..6bcad85 --- /dev/null +++ b/url-connection-agent/src/test/java/org/apache/sling/uca/impl/ServerRule.java @@ -0,0 +1,121 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.sling.uca.impl; + +import java.io.IOException; +import java.util.Collections; +import java.util.concurrent.TimeUnit; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.jetty.io.Connection; +import org.eclipse.jetty.io.EndPoint; +import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.handler.AbstractHandler; +import org.junit.rules.ExternalResource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +class ServerRule extends ExternalResource { + + private static final Logger LOG = LoggerFactory.getLogger(ServerRule.class); + + private Server server; + + private int localPort = 12312; + + @Override + protected void before() throws Throwable { + server = new Server(localPort); + ServerConnector connector = new ServerConnector(server) { + @Override + public void accept(int acceptorID) throws IOException { + LOG.info("Waiting before accepting"); + try { + Thread.sleep(TimeUnit.SECONDS.toMillis(10)); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return; + } + super.accept(acceptorID); + LOG.info("Accepted"); + } + }; + connector.setPort(localPort); + connector.setConnectionFactories(Collections.singleton(new HttpConnectionFactory() { + @Override + public Connection newConnection(Connector connector, EndPoint endPoint) { + LOG.info("Waiting before creating connection"); + try { + Thread.sleep(TimeUnit.SECONDS.toMillis(10)); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException("Interrupted"); + } + + Connection connection = super.newConnection(connector, endPoint); + LOG.info("Connection created"); + return connection; + } + })); + server.setConnectors(new Connector[] { + connector + }); + server.setHandler(new AbstractHandler() { + + @Override + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { + + LOG.info("Waiting before handling"); + + try { + Thread.sleep(TimeUnit.SECONDS.toMillis(10)); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + return; + } + + response.setStatus(HttpServletResponse.SC_NO_CONTENT); + baseRequest.setHandled(true); + LOG.info("Handled"); + } + }); + + server.start(); + } + + @Override + protected void after() { + if ( server != null ) + try { + server.stop(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public int getLocalPort() { + return localPort; + } +} \ No newline at end of file
