improved close incomplete handling
This commit is contained in:
parent
5aac176fbd
commit
a89dc67ba2
|
@ -348,6 +348,18 @@ public abstract class AbstractHttpConnection extends AbstractConnection implemen
|
|||
if (exchange!=null)
|
||||
exchange.setStatus(HttpExchange.STATUS_COMPLETED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void earlyEOF()
|
||||
{
|
||||
HttpExchange exchange = _exchange;
|
||||
if (exchange!=null)
|
||||
{
|
||||
exchange.setStatus(HttpExchange.STATUS_EXCEPTED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -339,6 +339,12 @@ public class HttpExchange
|
|||
case STATUS_START:
|
||||
set = _status.compareAndSet(oldStatus,newStatus);
|
||||
break;
|
||||
|
||||
case STATUS_COMPLETED:
|
||||
set = true;
|
||||
done();
|
||||
break;
|
||||
|
||||
default:
|
||||
set = true;
|
||||
break;
|
||||
|
|
|
@ -18,6 +18,7 @@ import static org.junit.Assert.assertEquals;
|
|||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
|
@ -41,6 +42,14 @@ public abstract class AbstractConnectionTest
|
|||
return httpClient;
|
||||
}
|
||||
|
||||
|
||||
protected ServerSocket newServerSocket() throws IOException
|
||||
{
|
||||
ServerSocket serverSocket=new ServerSocket();
|
||||
serverSocket.bind(null);
|
||||
return serverSocket;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testServerClosedConnection() throws Exception
|
||||
{
|
||||
|
@ -119,11 +128,15 @@ public abstract class AbstractConnectionTest
|
|||
}
|
||||
}
|
||||
|
||||
protected String getScheme()
|
||||
{
|
||||
return "http";
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testServerClosedIncomplete() throws Exception
|
||||
{
|
||||
ServerSocket serverSocket = new ServerSocket();
|
||||
serverSocket.bind(null);
|
||||
ServerSocket serverSocket = newServerSocket();
|
||||
int port=serverSocket.getLocalPort();
|
||||
|
||||
HttpClient httpClient = newHttpClient();
|
||||
|
@ -133,6 +146,7 @@ public abstract class AbstractConnectionTest
|
|||
{
|
||||
CountDownLatch latch = new CountDownLatch(1);
|
||||
HttpExchange exchange = new ConnectionExchange(latch);
|
||||
exchange.setScheme(getScheme());
|
||||
exchange.setAddress(new Address("localhost", port));
|
||||
exchange.setRequestURI("/");
|
||||
httpClient.send(exchange);
|
||||
|
@ -159,7 +173,9 @@ public abstract class AbstractConnectionTest
|
|||
|
||||
remote.close();
|
||||
|
||||
assertEquals(HttpExchange.STATUS_EXCEPTED, exchange.waitForDone());
|
||||
int status = exchange.waitForDone();
|
||||
|
||||
assertEquals(HttpExchange.STATUS_EXCEPTED, status);
|
||||
|
||||
}
|
||||
finally
|
||||
|
|
|
@ -13,6 +13,13 @@
|
|||
|
||||
package org.eclipse.jetty.client;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.ServerSocket;
|
||||
|
||||
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
|
||||
import org.eclipse.jetty.util.ssl.SslContextFactory;
|
||||
import org.junit.BeforeClass;
|
||||
|
||||
public class AsyncSelectConnectionTest extends AbstractConnectionTest
|
||||
{
|
||||
protected HttpClient newHttpClient()
|
||||
|
@ -23,10 +30,38 @@ public class AsyncSelectConnectionTest extends AbstractConnectionTest
|
|||
return httpClient;
|
||||
}
|
||||
|
||||
static SslContextFactory ctx = new SslContextFactory(MavenTestingUtils.getTestResourceFile("keystore").getAbsolutePath());
|
||||
|
||||
@BeforeClass
|
||||
public static void initKS() throws Exception
|
||||
{
|
||||
ctx.setKeyStorePassword("storepwd");
|
||||
ctx.setKeyManagerPassword("keypwd");
|
||||
ctx.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getScheme()
|
||||
{
|
||||
return "https";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServerSocket newServerSocket() throws IOException
|
||||
{
|
||||
return ctx.newSslServerSocket(null,0,100);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void testServerHalfClosedIncomplete() throws Exception
|
||||
{
|
||||
super.testServerHalfClosedIncomplete();
|
||||
// SSL doesn't do half closes
|
||||
}
|
||||
|
||||
@Override
|
||||
public void testServerClosedIncomplete() throws Exception
|
||||
{
|
||||
super.testServerClosedIncomplete();
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue