You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jg...@apache.org on 2007/12/30 12:37:00 UTC

svn commit: r607542 [6/6] - in /geronimo/sandbox/async-http-client-mina2: ./ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/ahc/ src/main/java/org/apache/ahc/auth/ src/main/java/org/apache/ahc/codec/...

Added: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/AuthTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/AuthTest.java?rev=607542&view=auto
==============================================================================
--- geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/AuthTest.java (added)
+++ geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/AuthTest.java Sun Dec 30 03:36:47 2007
@@ -0,0 +1,89 @@
+/*
+ *  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.ahc;
+
+import java.net.URL;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.ahc.auth.AuthScope;
+import org.apache.ahc.auth.UsernamePasswordCredentials;
+import org.apache.ahc.codec.HttpRequestMessage;
+
+public class AuthTest extends AbstractTest {
+
+    AsyncHttpClient ahc;
+
+    public void testBasicAuth() throws Exception {
+        TestCallback callback = new TestCallback();
+        HttpRequestMessage request = new HttpRequestMessage(
+            new URL("http://localhost:8282/authbasic/secure.jsp"), callback);
+
+        UsernamePasswordCredentials creds = new UsernamePasswordCredentials("test","password");
+        request.addCredentials(AuthScope.ANY, creds);
+        ahc.sendRequest(request);
+
+        callback.await(5, TimeUnit.SECONDS);
+
+        assertEquals(200, callback.getMessage().getStatusCode());
+        assertEquals("Hello World!\n", callback.getMessage().getStringContent());
+    }
+
+    public void testBasicAuthFailure() throws Exception {
+
+        TestCallback callback = new TestCallback();
+        HttpRequestMessage request = new HttpRequestMessage(
+            new URL("http://localhost:8282/authbasic/secure.jsp"), callback);
+
+        UsernamePasswordCredentials creds = new UsernamePasswordCredentials("test","badpassword");
+        request.addCredentials(AuthScope.ANY, creds);
+        ahc.sendRequest(request);
+
+        callback.await(5, TimeUnit.SECONDS);
+
+        //Should be an auth failure
+        assertEquals(401, callback.getMessage().getStatusCode());
+    }
+
+    public void testDigestAuth() throws Exception {
+        TestCallback callback = new TestCallback();
+        HttpRequestMessage request = new HttpRequestMessage(
+            new URL("http://localhost:8282/authdigest/secure.jsp"), callback);
+
+        UsernamePasswordCredentials creds = new UsernamePasswordCredentials("test","password");
+        request.addCredentials(AuthScope.ANY, creds);
+        ahc.sendRequest(request);
+
+        callback.await(5, TimeUnit.SECONDS);
+
+        assertEquals(200, callback.getMessage().getStatusCode());
+        assertEquals("Hello World!\n", callback.getMessage().getStringContent());
+    }
+
+    protected void setUp() throws Exception {
+        super.setUp();
+        ahc = new AsyncHttpClient();
+        ahc.setTcpNoDelay(true);
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        ahc.destroyAll();
+    }
+}

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/AuthTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/AuthTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/AuthTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/x-java

Added: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ChunkedTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ChunkedTest.java?rev=607542&view=auto
==============================================================================
--- geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ChunkedTest.java (added)
+++ geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ChunkedTest.java Sun Dec 30 03:36:47 2007
@@ -0,0 +1,83 @@
+/*
+ *  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.ahc;
+
+import junit.framework.TestCase;
+import org.apache.ahc.codec.HttpResponseDecoder;
+import org.apache.ahc.codec.HttpResponseMessage;
+import org.apache.mina.common.IoBuffer;
+import org.apache.mina.common.IoSession;
+
+import java.util.Arrays;
+
+public class ChunkedTest extends TestCase {
+
+    private static final String FAKE_HTTP =
+        "HTTP/1.1 200 OK\r\n" 
+            + "Date: Fri, 31 Dec 1999 23:59:59 GMT\r\n"
+            + "Content-Type: text/plain\r\n"
+            + "Transfer-Encoding: chunked\r\n"
+            + "\r\n"
+            + "1a; ignore-stuff-here\r\n"
+            + "abcdefghijklmnopqrstuvwxyz\r\n"
+            + "10\r\n"
+            + "1234567890abcdef\r\n"
+            + "0\r\n"
+            + "some-footer: some-value\r\n"
+            + "another-footer: another-value\r\n\r\n";
+
+
+    private static final String  FAKE_HTTP_CONTINUE =
+        "HTTP/1.1 100 Continue\r\n" 
+            + "Date: Fri, 31 Dec 1999 23:59:59 GMT\r\n" 
+            + "Content-Type: text/plain\r\n"
+            + "\r\n" + FAKE_HTTP;
+
+    public void testChunking() throws Exception {
+        IoBuffer buffer = IoBuffer.allocate(FAKE_HTTP.length());
+        buffer.put(FAKE_HTTP.getBytes());
+        buffer.flip();
+
+        IoSession session = new FakeIoSession();
+        HttpResponseDecoder decoder = new HttpResponseDecoder();
+        FakeProtocolDecoderOutput out = new FakeProtocolDecoderOutput();
+        decoder.decode(session, buffer, out);
+
+        HttpResponseMessage response = (HttpResponseMessage)out.getObject();
+        assertTrue(
+            Arrays.equals(response.getContent(), "abcdefghijklmnopqrstuvwxyz1234567890abcdef".getBytes()));
+    }
+
+    public void testChunkingContinue() throws Exception {
+        IoBuffer buffer = IoBuffer.allocate(FAKE_HTTP_CONTINUE.length());
+        buffer.put(FAKE_HTTP.getBytes());
+        buffer.flip();
+
+        IoSession session = new FakeIoSession();
+        HttpResponseDecoder decoder = new HttpResponseDecoder();
+        FakeProtocolDecoderOutput out = new FakeProtocolDecoderOutput();
+        decoder.decode(session, buffer, out);
+
+        HttpResponseMessage response = (HttpResponseMessage)out.getObject();
+        assertTrue(
+            Arrays.equals(response.getContent(), "abcdefghijklmnopqrstuvwxyz1234567890abcdef".getBytes()));
+    }
+
+}

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ChunkedTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ChunkedTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ChunkedTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/x-java

Added: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ConnectionReuseTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ConnectionReuseTest.java?rev=607542&view=auto
==============================================================================
--- geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ConnectionReuseTest.java (added)
+++ geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ConnectionReuseTest.java Sun Dec 30 03:36:47 2007
@@ -0,0 +1,126 @@
+/*
+ *  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.ahc;
+
+import java.net.URL;
+import java.util.concurrent.Future;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.ahc.codec.HttpRequestMessage;
+import org.apache.ahc.codec.HttpResponseMessage;
+
+public class ConnectionReuseTest extends AbstractTest {
+    // variable that keeps count of session close's
+    private final AtomicInteger closeCount = new AtomicInteger(0);
+    
+    // It is important that this test case contains these methods in this order.
+    // It is because to test connection reuse we need to keep the embedded 
+    // server running while connections are reused.  However, AbstractTest 
+    // starts and tears down the server around each test method.
+    public void testConnectionReuse() throws Exception {
+        // reset the count
+        closeCount.set(0);
+        Future<HttpResponseMessage> future = 
+                submitRequest("http://localhost:8282/", true, new SessionCloseCounter());
+
+        HttpResponseMessage msg = future.get();
+        assertEquals("\nHello World!", msg.getStringContent());
+        
+        // do another request for the same host
+        future = submitRequest("http://localhost:8282/params.jsp", true, 
+                new SessionCloseCounter());
+
+        msg = future.get();
+        assertEquals("Test One Test Two", msg.getStringContent());
+        
+        // check that I got zero close at this point
+        assertEquals(0, closeCount.get());
+    }
+    
+    
+    public void testSSLConnectionReuse() throws Exception {
+        // reset the count
+        closeCount.set(0);
+        Future<HttpResponseMessage> future = 
+                submitRequest("https://localhost:8383/", true, new SessionCloseCounter());
+
+        HttpResponseMessage msg = future.get();
+        assertEquals("\nHello World!", msg.getStringContent());
+        
+        // do another request for the same host
+        future = submitRequest("https://localhost:8383/", true, new SessionCloseCounter());
+
+        msg = future.get();
+        assertEquals("\nHello World!", msg.getStringContent());
+        
+        // check that I got zero close at this point
+        assertEquals(0, closeCount.get());
+    }
+    
+    
+    public void testConnectionClose() throws Exception {
+        // reset the count
+        closeCount.set(0);
+        Future<HttpResponseMessage> future = 
+                submitRequest("http://localhost:8282/", false, new SessionCloseCounter());
+
+        HttpResponseMessage msg = future.get();
+        assertEquals("\nHello World!", msg.getStringContent());
+        
+        // do another request for the same host
+        future = submitRequest("http://localhost:8282/params.jsp", false, 
+                new SessionCloseCounter());
+
+        msg = future.get();
+        assertEquals("Test One Test Two", msg.getStringContent());
+        
+        // give it a bit of time to catch up
+        Thread.sleep(500L);
+        
+        // check that I got close count of 2 at this point
+        assertEquals(2, closeCount.get());
+    }
+    
+    private Future<HttpResponseMessage> submitRequest(String url, 
+                                                      boolean reuseConnection,
+                                                      AsyncHttpClientCallback cb) 
+            throws Exception {
+        HttpRequestMessage request = new HttpRequestMessage(new URL(url), cb);
+
+        request.setParameter("TEST1", "Test One");
+        request.setParameter("TEST2", "Test Two");
+        AsyncHttpClient ahc = new AsyncHttpClient();
+        ahc.setReuseConnection(reuseConnection);
+        ahc.setTcpNoDelay(true);
+        return ahc.sendRequest(request);
+    }
+    
+    private class SessionCloseCounter implements AsyncHttpClientCallback {
+        public void onClosed() {
+            System.out.println("onClosed()");
+            // increment the counter on every close
+            closeCount.incrementAndGet();
+        }
+
+        public void onException(Throwable cause) {}
+        public void onResponse(HttpResponseMessage message) {}
+        public void onTimeout() {}
+    }
+}

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ConnectionReuseTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ConnectionReuseTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/ConnectionReuseTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/x-java

Added: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeIoSession.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeIoSession.java?rev=607542&view=auto
==============================================================================
--- geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeIoSession.java (added)
+++ geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeIoSession.java Sun Dec 30 03:36:47 2007
@@ -0,0 +1,342 @@
+/*
+ * 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.ahc;
+
+import java.net.SocketAddress;
+import java.net.InetSocketAddress;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.mina.common.*;
+import org.apache.mina.transport.socket.SocketSessionConfig;
+
+public class FakeIoSession implements IoSession {
+
+    private Map<Object, Object> attributes = new HashMap<Object, Object>();
+    private TransportMetadata META = new DefaultTransportMetadata(
+                    "nio", "socket", false, true,
+                    InetSocketAddress.class,
+                    SocketSessionConfig.class,
+                    IoBuffer.class, FileRegion.class);
+
+    public long getId() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public IoService getService() {
+        return null;
+    }
+
+    public IoHandler getHandler() {
+        return null;
+    }
+
+    public IoSessionConfig getConfig() {
+        return null;
+    }
+
+    public IoFilterChain getFilterChain() {
+        return null;
+    }
+
+    public TransportMetadata getTransportMetadata() {
+        return META;
+    }
+
+    public ReadFuture read() {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public WriteFuture write(Object object) {
+        return null;
+    }
+
+    public WriteFuture write(Object o, SocketAddress socketAddress) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public CloseFuture close() {
+        return null;
+    }
+
+    public CloseFuture closeOnFlush() {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public CloseFuture close(boolean b) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object getAttachment() {
+        return null;
+    }
+
+    public Object setAttachment(Object object) {
+        return null;
+    }
+
+    public Object getAttribute(Object o) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object getAttribute(Object o, Object o1) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object setAttribute(Object o, Object o1) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object setAttribute(Object o) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object setAttributeIfAbsent(Object o, Object o1) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object setAttributeIfAbsent(Object o) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object removeAttribute(Object o) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public boolean removeAttribute(Object o, Object o1) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public boolean replaceAttribute(Object o, Object o1, Object o2) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public boolean containsAttribute(Object o) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object getAttribute(String string) {
+        return attributes.get(string);
+    }
+
+    public Object getAttribute(String key, Object defaultValue) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object setAttribute(String string, Object object) {
+        return attributes.put(string, object);
+    }
+
+    public Object setAttribute(String string) {
+        return attributes.put(string, null);
+    }
+
+    public Object setAttributeIfAbsent(String key, Object value) {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public Object removeAttribute(String string) {
+        return attributes.remove(string);
+    }
+
+    public boolean removeAttribute(String key, Object value) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public boolean replaceAttribute(String key, Object oldValue, Object newValue) {
+        return false;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public boolean containsAttribute(String string) {
+        return attributes.containsKey(string);
+    }
+
+    public Set<Object> getAttributeKeys() {
+        return attributes.keySet();
+    }
+
+    public boolean isConnected() {
+        return false;
+    }
+
+    public boolean isClosing() {
+        return false;
+    }
+
+    public CloseFuture getCloseFuture() {
+        return null;
+    }
+
+    public SocketAddress getRemoteAddress() {
+        return null;
+    }
+
+    public SocketAddress getLocalAddress() {
+        return null;
+    }
+
+    public SocketAddress getServiceAddress() {
+        return null;
+    }
+
+    public int getIdleTime(IdleStatus idleStatus) {
+        return 0;
+    }
+
+    public long getIdleTimeInMillis(IdleStatus idleStatus) {
+        return 0;
+    }
+
+    public void setIdleTime(IdleStatus idleStatus, int i) {
+    }
+
+    public int getWriteTimeout() {
+        return 0;
+    }
+
+    public long getWriteTimeoutInMillis() {
+        return 0;
+    }
+
+    public void setWriteTimeout(int i) {
+    }
+
+    public TrafficMask getTrafficMask() {
+        return null;
+    }
+
+    public void setTrafficMask(TrafficMask trafficMask) {
+    }
+
+    public void suspendRead() {
+    }
+
+    public void suspendWrite() {
+    }
+
+    public void resumeRead() {
+    }
+
+    public void resumeWrite() {
+    }
+
+    public long getReadBytes() {
+        return 0;
+    }
+
+    public long getWrittenBytes() {
+        return 0;
+    }
+
+    public long getReadMessages() {
+        return 0;
+    }
+
+    public long getWrittenMessages() {
+        return 0;
+    }
+
+    public double getReadBytesThroughput() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public double getWrittenBytesThroughput() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public double getReadMessagesThroughput() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public double getWrittenMessagesThroughput() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public int getScheduledWriteMessages() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public long getWrittenWriteRequests() {
+        return 0;
+    }
+
+    public int getScheduledWriteRequests() {
+        return 0;
+    }
+
+    public long getScheduledWriteBytes() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public long getCreationTime() {
+        return 0;
+    }
+
+    public long getLastIoTime() {
+        return 0;
+    }
+
+    public long getLastReadTime() {
+        return 0;
+    }
+
+    public long getLastWriteTime() {
+        return 0;
+    }
+
+    public boolean isIdle(IdleStatus idleStatus) {
+        return false;
+    }
+
+    public int getIdleCount(IdleStatus idleStatus) {
+        return 0;
+    }
+
+    public int getReaderIdleCount() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public int getWriterIdleCount() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public int getBothIdleCount() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public long getLastIdleTime(IdleStatus idleStatus) {
+        return 0;
+    }
+
+    public long getLastReaderIdleTime() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public long getLastWriterIdleTime() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    public long getLastBothIdleTime() {
+        return 0;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+}

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeIoSession.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeIoSession.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeIoSession.java
------------------------------------------------------------------------------
    svn:mime-type = text/x-java

Added: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeProtocolDecoderOutput.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeProtocolDecoderOutput.java?rev=607542&view=auto
==============================================================================
--- geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeProtocolDecoderOutput.java (added)
+++ geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeProtocolDecoderOutput.java Sun Dec 30 03:36:47 2007
@@ -0,0 +1,41 @@
+/*
+ * 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.ahc;
+
+import org.apache.mina.filter.codec.ProtocolDecoderOutput;
+
+public class FakeProtocolDecoderOutput implements ProtocolDecoderOutput {
+    
+    private Object object;
+
+    public void write(Object obj) {
+        this.object = obj;
+    }
+
+    public void flush() {
+    }
+
+
+    public Object getObject() {
+        return object;
+    }
+
+}

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeProtocolDecoderOutput.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeProtocolDecoderOutput.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeProtocolDecoderOutput.java
------------------------------------------------------------------------------
    svn:mime-type = text/x-java

Added: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeRealm.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeRealm.java?rev=607542&view=auto
==============================================================================
--- geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeRealm.java (added)
+++ geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeRealm.java Sun Dec 30 03:36:47 2007
@@ -0,0 +1,57 @@
+/*
+ *  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.ahc;
+
+import java.security.Principal;
+import java.util.ArrayList;
+
+import org.apache.catalina.realm.GenericPrincipal;
+import org.apache.catalina.realm.RealmBase;
+
+public class FakeRealm extends RealmBase {
+    protected String getName() {
+        return "test";
+    }
+
+    protected String getPassword(String string) {
+        return "password";
+    }
+
+    protected Principal getPrincipal(String user) {
+        if (user.equals("test")) {
+            ArrayList roles = new ArrayList();
+            roles.add("test");
+            Principal principal = new GenericPrincipal(this, user, "password", roles);
+            return principal;
+        }
+
+        return null;
+    }
+
+
+    public Principal authenticate(String user, String password) {
+        if (user.equals("test") && password.equals("password")) {
+            return getPrincipal(user);
+        }
+
+        return null;
+    }
+
+}

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeRealm.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeRealm.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/FakeRealm.java
------------------------------------------------------------------------------
    svn:mime-type = text/x-java

Added: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/RetryTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/RetryTest.java?rev=607542&view=auto
==============================================================================
--- geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/RetryTest.java (added)
+++ geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/RetryTest.java Sun Dec 30 03:36:47 2007
@@ -0,0 +1,74 @@
+/*
+ *  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.ahc;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.ahc.codec.HttpRequestMessage;
+import org.apache.ahc.codec.HttpResponseMessage;
+
+public class RetryTest extends AbstractTest {
+
+
+    public void testHtmlConnection() throws Exception {
+        TestCallback callback = new TestCallback();
+        doGetConnection(callback, "http://localhost:8284/");
+        Thread.sleep(5000); 
+        assertTrue(callback.isException());
+    }
+
+    public void testSSLHtmlConnection() throws Exception {
+        TestCallback callback = new TestCallback();
+        doGetConnection(callback, "https://localhost:8385/");
+        
+        Thread.sleep(5000); 
+        assertTrue(callback.isException());
+    }
+
+    private void doGetConnection(TestCallback callback, String url)
+        throws Exception {
+        HttpRequestMessage request = new HttpRequestMessage(new URL(url), callback);
+
+        request.setParameter("TEST1", "Test One");
+        request.setParameter("TEST2", "Test Two");
+        doConnection(request, callback);
+    }
+
+    private void doConnection(HttpRequestMessage request,
+                              TestCallback callback) throws Exception {
+        AsyncHttpClient ahc = new AsyncHttpClient();
+        ahc.setTcpNoDelay(true);
+        ahc.setConnectionRetries(3); 
+        // set a short timeout 
+        request.setTimeOut(200); 
+
+        ahc.sendRequest(request);
+
+        //We are done...Thread would normally end...
+        //So this little wait simulates the thread going back in the pool
+        //5 second timeout due to no response
+        callback.await(5, TimeUnit.SECONDS);
+    }
+}
+

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/RetryTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/RetryTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/RetryTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/x-java

Added: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/TimeoutTest.java
URL: http://svn.apache.org/viewvc/geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/TimeoutTest.java?rev=607542&view=auto
==============================================================================
--- geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/TimeoutTest.java (added)
+++ geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/TimeoutTest.java Sun Dec 30 03:36:47 2007
@@ -0,0 +1,53 @@
+/*
+ * 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.ahc;
+
+import java.net.URL;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.ahc.codec.HttpRequestMessage;
+
+public class TimeoutTest extends AbstractTest {
+
+    public void testTimeout() throws Exception {
+
+        TestCallback callback = new TestCallback();
+
+        AsyncHttpClient ahc = new AsyncHttpClient();
+        ahc.setTcpNoDelay(true);
+
+        HttpRequestMessage request = new HttpRequestMessage(new URL("http://localhost:8282/timeout.jsp"), callback);
+
+        //Create a client with a one second timeout
+        request.setTimeOut(1000);
+
+        ahc.sendRequest(request);
+
+        //We are done...Thread would normally end...
+        //So this little wait simulates the thread going back in the pool
+        //5 second timeout due to no response
+        callback.await(5, TimeUnit.SECONDS);
+
+        assertTrue(callback.isTimeout());
+
+        ahc.destroyAll();
+    }
+}

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/TimeoutTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/TimeoutTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: geronimo/sandbox/async-http-client-mina2/src/test/java/org/apache/ahc/TimeoutTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/x-java