Skip to content

Commit

Permalink
add a failing test
Browse files Browse the repository at this point in the history
  • Loading branch information
jrhee17 committed Nov 7, 2021
1 parent fbd4e8a commit 8018da1
Showing 1 changed file with 56 additions and 0 deletions.
Expand Up @@ -18,10 +18,12 @@

import static com.linecorp.armeria.common.HttpStatus.OK;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.awaitility.Awaitility.await;

import java.net.InetSocketAddress;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.atomic.AtomicInteger;

import org.hamcrest.Matchers;
Expand All @@ -35,6 +37,8 @@
import com.linecorp.armeria.common.SessionProtocol;
import com.linecorp.armeria.common.metric.MoreMeters;
import com.linecorp.armeria.server.ServerBuilder;
import com.linecorp.armeria.server.annotation.Get;
import com.linecorp.armeria.server.annotation.Param;
import com.linecorp.armeria.testing.junit5.server.ServerExtension;

import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
Expand All @@ -54,6 +58,14 @@ protected void configure(ServerBuilder sb) {
sb.idleTimeoutMillis(0);
sb.requestTimeoutMillis(0);
sb.service("/", (ctx, req) -> HttpResponse.of(OK));
sb.annotatedService("/delayed", new Object() {

@Get
public HttpResponse delayed(@Param("seconds") String seconds) {
return HttpResponse.delayed(
HttpResponse.of(200), Duration.of(Long.valueOf(seconds), ChronoUnit.SECONDS));
}
});
}

@Override
Expand Down Expand Up @@ -160,4 +172,48 @@ void shouldCloseIdleConnectionByMaxConnectionAge(SessionProtocol protocol) {
await().untilAtomic(closed, Matchers.is(1));
}
}

@EnumSource(value = SessionProtocol.class, names = "PROXY", mode = Mode.EXCLUDE)
@ParameterizedTest
void shouldCloseLongRequestsByMaxConnectionAge(SessionProtocol protocol) throws Exception {
try (ClientFactory factory = ClientFactory.builder()
.connectionPoolListener(connectionPoolListener)
.idleTimeoutMillis(0)
.maxConnectionAgeMillis(MAX_CONNECTION_AGE)
.tlsNoVerify()
.build()) {
final WebClient client = WebClient.builder(server.uri(protocol))
.factory(factory)
.responseTimeoutMillis(0)
.build();

assertThat(client.get("/delayed?seconds=4").aggregate().join().status()).isEqualTo(OK);

await().untilAtomic(opened, Matchers.is(1));
await().untilAtomic(closed, Matchers.is(1));
}
}

@EnumSource(value = SessionProtocol.class, names = "PROXY", mode = Mode.EXCLUDE)
@ParameterizedTest
void shouldCloseTimeoutLongRequestsByMaxConnectionAge(SessionProtocol protocol) throws Exception {
try (ClientFactory factory = ClientFactory.builder()
.connectionPoolListener(connectionPoolListener)
.idleTimeoutMillis(0)
.maxConnectionAgeMillis(MAX_CONNECTION_AGE)
.tlsNoVerify()
.build()) {
final long responseTimeoutMillis = MAX_CONNECTION_AGE + 1000;
final WebClient client = WebClient.builder(server.uri(protocol))
.factory(factory)
.responseTimeoutMillis(responseTimeoutMillis)
.build();

assertThatThrownBy(() -> client.get("/delayed?seconds=10").aggregate().join().status())
.hasRootCauseInstanceOf(ResponseTimeoutException.class);

await().untilAtomic(opened, Matchers.is(1));
await().untilAtomic(closed, Matchers.is(1));
}
}
}

0 comments on commit 8018da1

Please sign in to comment.