diff --git a/jetty-load-generator-client/src/main/java/org/mortbay/jetty/load/generator/LoadGenerator.java b/jetty-load-generator-client/src/main/java/org/mortbay/jetty/load/generator/LoadGenerator.java index 3fdcff90..4ce3b7df 100644 --- a/jetty-load-generator-client/src/main/java/org/mortbay/jetty/load/generator/LoadGenerator.java +++ b/jetty-load-generator-client/src/main/java/org/mortbay/jetty/load/generator/LoadGenerator.java @@ -388,6 +388,7 @@ private void stopHttpClient(HttpClient client) { protected Request newRequest(HttpClient client, Config config, Resource resource) { Request request = client.newRequest(config.getHost(), config.getPort()) .scheme(config.getScheme()) + .attribute(Resource.class.getName(), resource) .method(resource.getMethod()) .path(resource.getPath()); request.getHeaders().addAll(resource.getRequestHeaders()); diff --git a/jetty-load-generator-client/src/test/java/org/mortbay/jetty/load/generator/LoadGeneratorTest.java b/jetty-load-generator-client/src/test/java/org/mortbay/jetty/load/generator/LoadGeneratorTest.java index 97c078cf..3fbd1354 100644 --- a/jetty-load-generator-client/src/test/java/org/mortbay/jetty/load/generator/LoadGeneratorTest.java +++ b/jetty-load-generator-client/src/test/java/org/mortbay/jetty/load/generator/LoadGeneratorTest.java @@ -34,6 +34,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.client.api.Request; +import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http2.server.HTTP2CServerConnectionFactory; import org.eclipse.jetty.jmx.MBeanContainer; import org.eclipse.jetty.server.ConnectionFactory; @@ -526,6 +527,42 @@ public void testReadyEventWithoutWarmup() throws Exception { Assert.assertTrue(readyLatch.await(5, TimeUnit.SECONDS)); } + @Test + public void testResourceFromRequestAttribute() throws Exception { + Resource resource = new Resource("/original"); + String extraPath = "/" + Integer.toHexString(resource.hashCode()); + startServer(new AbstractHandler() { + @Override + public void handle(String target, org.eclipse.jetty.server.Request jettyRequest, HttpServletRequest request, HttpServletResponse response) { + jettyRequest.setHandled(true); + response.setStatus(target.endsWith(extraPath) ? HttpStatus.OK_200 : HttpStatus.INTERNAL_SERVER_ERROR_500); + } + }); + + CountDownLatch latch = new CountDownLatch(1); + LoadGenerator loadGenerator = LoadGenerator.builder() + .port(connector.getLocalPort()) + .httpClientTransportBuilder(clientTransportBuilder) + .resource(resource) + .requestListener(new Request.Listener() { + @Override + public void onBegin(Request request) { + Resource resource = (Resource)request.getAttributes().get(Resource.class.getName()); + request.path(resource.getPath() + extraPath); + } + }) + .resourceListener((Resource.NodeListener)info -> { + if (info.getStatus() == HttpStatus.OK_200) { + latch.countDown(); + } + }) + .build(); + + loadGenerator.begin().get(); + + Assert.assertTrue(latch.await(5, TimeUnit.SECONDS)); + } + private enum TransportType { H1C, H2C }