Skip to content

Commit

Permalink
Fix possible binding exception when running the test on Linux, start …
Browse files Browse the repository at this point in the history
…using Async Http Client 1.0.0
  • Loading branch information
jfarcand committed Jun 23, 2010
1 parent 0806105 commit d0aa4aa
Show file tree
Hide file tree
Showing 13 changed files with 135 additions and 40 deletions.
16 changes: 16 additions & 0 deletions modules/cpr/src/test/java/org/atmosphere/tests/BaseTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.ServerSocket;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
Expand Down Expand Up @@ -91,6 +92,21 @@ public static int getEnvVariable(final String varName, int defaultValue) {
}
}

protected int findFreePort() throws IOException {
ServerSocket socket = null;

try {
socket = new ServerSocket(0);

return socket.getLocalPort();
}
finally {
if (socket != null) {
socket.close();
}
}
}

@BeforeMethod(alwaysRun = true)
abstract public void startServer() throws Exception;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,35 +36,14 @@
*/
package org.atmosphere.tests;

import com.ning.http.client.AsyncCompletionHandler;
import com.ning.http.client.AsyncHttpClient;
import com.ning.http.client.Response;
import org.apache.log4j.BasicConfigurator;
import org.atmosphere.cache.HeaderBroadcasterCache;
import org.atmosphere.container.BlockingIOCometSupport;
import org.atmosphere.cpr.AtmosphereHandler;
import org.atmosphere.cpr.AtmosphereResource;
import org.atmosphere.cpr.AtmosphereResourceEvent;
import org.atmosphere.cpr.AtmosphereServlet;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.Context;
import org.mortbay.jetty.servlet.ServletHolder;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.fail;


public class BlockingIOCometSupportTest extends BaseTest {
Expand All @@ -74,19 +53,19 @@ public class BlockingIOCometSupportTest extends BaseTest {
@BeforeMethod(alwaysRun = true)
public void startServer() throws Exception {

int port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", 9999);
int port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", findFreePort());
urlTarget = "http://127.0.0.1:" + port + "/invoke";

server = new Server(port);
root = new Context(server, "/", Context.SESSIONS);
atmoServlet = new AtmosphereServlet();
configureCometSupport();
setConnector();
setConnector(port);
root.addServlet(new ServletHolder(atmoServlet), ROOT);
server.start();
}

public void setConnector() {
public void setConnector(int port) throws Exception {
}

public void configureCometSupport() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public class GrizzlyCometSupportTest extends BaseTest {
@BeforeMethod(alwaysRun = true)
public void startServer() throws Exception {

int port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", 9999);
int port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", findFreePort());
urlTarget = "http://127.0.0.1:" + port + "/invoke";

ws = new GrizzlyWebServer(port);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,23 +36,90 @@
*/
package org.atmosphere.tests;

import com.ning.http.client.AsyncHttpClient;
import com.ning.http.client.Response;
import org.atmosphere.container.JettyCometSupport;
import org.atmosphere.cpr.AtmosphereHandler;
import org.atmosphere.cpr.AtmosphereResource;
import org.atmosphere.cpr.AtmosphereResourceEvent;
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.testng.annotations.Test;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;


public class Jetty6CometSupportTest extends BlockingIOCometSupportTest {

public void setConnector() {
public void setConnector(int port) throws Exception {
Connector listener = new SelectChannelConnector();

listener.setHost("127.0.0.1");
listener.setPort(TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", 9999));
listener.setPort(port);
server.addConnector(listener);
}

public void configureCometSupport() {
atmoServlet.setCometSupport(new JettyCometSupport(atmoServlet.getAtmosphereConfig()));
}

@Test(timeOut = 60000)
public void testSuspendTimeout() {
System.out.println("Running testSuspendTimeout");
final CountDownLatch latch = new CountDownLatch(1);
atmoServlet.addAtmosphereHandler(ROOT, new AtmosphereHandler<HttpServletRequest, HttpServletResponse>() {

private long currentTime;

public void onRequest(AtmosphereResource<HttpServletRequest, HttpServletResponse> event) throws IOException {
currentTime = System.currentTimeMillis();
event.suspend(5000, false);
}

public void onStateChange(AtmosphereResourceEvent<HttpServletRequest, HttpServletResponse> event) throws IOException {

try {
event.getResource().getResponse().getOutputStream().write("resume".getBytes());
assertTrue(event.isResumedOnTimeout());
long time = System.currentTimeMillis() - currentTime;
if (time > 5000 && time < 15000) {
assertTrue(true);
} else {
assertFalse(false);
}
} finally {
latch.countDown();
}
}
}, new RecyclableBroadcaster("suspend"));

AsyncHttpClient c = new AsyncHttpClient();
try {
Response r = c.prepareGet(urlTarget).execute().get();

try {
latch.await(20, TimeUnit.SECONDS);
} catch (InterruptedException e) {
fail(e.getMessage());
}
assertNotNull(r);
assertEquals(r.getStatusCode(), 200);
String resume = r.getResponseBody();
assertEquals(resume, "resume");
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
c.close();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public class Jetty7CometSupportTest extends BaseTest {
@BeforeMethod(alwaysRun = true)
public void startServer() throws Exception {

int port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", 9999);
int port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", findFreePort());
urlTarget = "http://127.0.0.1:" + port + "/invoke";

server = new Server(port);
Expand Down
18 changes: 17 additions & 1 deletion modules/cpr/src/test/java/org/atmosphere/tests/MeteorTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.ServerSocket;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicReference;

Expand Down Expand Up @@ -60,6 +61,21 @@ public static int getEnvVariable(final String varName, int defaultValue) {
}
}

protected int findFreePort() throws IOException {
ServerSocket socket = null;

try {
socket = new ServerSocket(0);

return socket.getLocalPort();
}
finally {
if (socket != null) {
socket.close();
}
}
}

public static class Meteor1 extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
Expand Down Expand Up @@ -97,7 +113,7 @@ public void onBroadcast(AtmosphereResourceEvent<HttpServletRequest, HttpServletR
@BeforeMethod(alwaysRun = true)
public void startServer() throws Exception {

int port = org.atmosphere.tests.BaseTest.TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", 9999);
int port = org.atmosphere.tests.BaseTest.TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", findFreePort());
urlTarget = "http://127.0.0.1:" + port + "/invoke";

server = new Server(port);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public void startServer() throws Exception {

System.setProperty("org.atmosphere.useNative", "true");

int port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", 9999);
int port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", findFreePort());
urlTarget = "http://127.0.0.1:" + port + "/invoke";
embedded = new Embedded();
String path = new File(".").getAbsolutePath();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.io.IOException;
import java.net.ServerSocket;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
Expand Down Expand Up @@ -96,9 +98,24 @@ public static int getEnvVariable(final String varName, int defaultValue) {
}
}

protected int findFreePort() throws IOException {
ServerSocket socket = null;

try {
socket = new ServerSocket(0);

return socket.getLocalPort();
}
finally {
if (socket != null) {
socket.close();
}
}
}

@BeforeMethod(alwaysRun = true)
public void setUpGlobal() throws Exception {
port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", 9999);
port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", findFreePort());
urlTarget = "http://127.0.0.1:" + port + "/invoke";
atmoServlet = new AtmosphereServlet();
atmoServlet.addInitParameter("com.sun.jersey.config.property.packages", this.getClass().getPackage().getName());
Expand Down Expand Up @@ -189,19 +206,19 @@ public void onThrowable(Throwable throwable) {
fail("onThrowable", throwable);
}

public STATE onBodyPartReceived(HttpResponseBodyPart<String> bp) throws Exception {
public STATE onBodyPartReceived(HttpResponseBodyPart bp) throws Exception {

System.out.println("bp: " + new String(bp.getBodyPartBytes()));
response.set(response.get() + new String(bp.getBodyPartBytes()));
locationLatch.countDown();
return STATE.CONTINUE;
}

public STATE onStatusReceived(HttpResponseStatus<String> hs) throws Exception {
public STATE onStatusReceived(HttpResponseStatus hs) throws Exception {
return STATE.CONTINUE;
}

public STATE onHeadersReceived(HttpResponseHeaders<String> rh) throws Exception {
public STATE onHeadersReceived(HttpResponseHeaders rh) throws Exception {
location.set(rh.getHeaders().getHeaderValue("Location"));
return STATE.CONTINUE;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public void configureCometSupport() {
@Override
@BeforeMethod(alwaysRun = true)
public void setUpGlobal() throws Exception {
port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", 9999);
port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", findFreePort());
urlTarget = "http://127.0.0.1:" + port + "/builder/invoke";
atmoServlet = new AtmosphereServlet();
atmoServlet.addInitParameter("com.sun.jersey.config.property.packages", this.getClass().getPackage().getName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public void startServer() throws Exception {
Connector listener = new SelectChannelConnector();

listener.setHost("127.0.0.1");
listener.setPort(TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", 9999));
listener.setPort(TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", findFreePort()));
server.addConnector(listener);

server.start();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public class Jetty7JerseyTest extends BaseTest {

@Override
public void startServer() throws Exception {
server = new Server(TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", 9999));
server = new Server(port);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public void init(final ServletConfig sc) throws ServletException {
public void setUpGlobal() throws Exception {
System.setProperty("org.atmosphere.useNative", "true");

port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", 9999);
port = TestHelper.getEnvVariable("ATMOSPHERE_HTTP_PORT", findFreePort());
urlTarget = "http://127.0.0.1:" + port + "/invoke";
configureCometSupport();
startServer();
Expand Down
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@
<repositories>
<repository>
<id>oss.sonatype.org</id>
<url>http://oss.sonatype.org</url>
<url>http://oss.sonatype.org/content/repositories/releases</url>
</repository>
<repository>
<id>oss.sonatype.org-snapshot</id>
Expand Down Expand Up @@ -418,7 +418,7 @@
<dependency>
<groupId>com.ning</groupId>
<artifactId>async-http-client</artifactId>
<version>1.0.0-SNAPSHOT</version>
<version>1.0.0</version>
<scope>test</scope>
</dependency>
</dependencies>
Expand Down

0 comments on commit d0aa4aa

Please sign in to comment.