This is an automated email from the ASF dual-hosted git repository. zrlw pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/dubbo-samples.git
The following commit(s) were added to refs/heads/master by this push: new 35eff2301 Add server Http2 connection preface test case (#1234) 35eff2301 is described below commit 35eff230158247dbe063235d7a8ba0bbbf5cd0a5 Author: zrlw <z...@sina.com> AuthorDate: Fri Jul 18 19:15:39 2025 +0800 Add server Http2 connection preface test case (#1234) --- .../dubbo-samples-triple-rest-basic/pom.xml | 22 +++++++++++ .../org/apache/dubbo/rest/demo/DemoService.java | 3 ++ .../apache/dubbo/rest/demo/DemoServiceImpl.java | 29 ++++++++++++++ .../apache/dubbo/rest/demo/DelayConsumerIT.java | 46 ++++++++++++++++++++++ 4 files changed, 100 insertions(+) diff --git a/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/pom.xml b/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/pom.xml index 24c51a6eb..42404115f 100644 --- a/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/pom.xml +++ b/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/pom.xml @@ -26,6 +26,10 @@ <artifactId>dubbo-samples-triple-rest-basic</artifactId> + <properties> + <jetty.version>12.0.6</jetty.version> + </properties> + <dependencies> <dependency> <groupId>org.springframework.boot</groupId> @@ -51,6 +55,24 @@ <version>6.1.5</version> <scope>test</scope> </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-client</artifactId> + <version>${jetty.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.eclipse.jetty.http2</groupId> + <artifactId>jetty-http2-client-transport</artifactId> + <version>${jetty.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-util</artifactId> + <version>${jetty.version}</version> + <scope>test</scope> + </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> diff --git a/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/src/main/java/org/apache/dubbo/rest/demo/DemoService.java b/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/src/main/java/org/apache/dubbo/rest/demo/DemoService.java index 65feeb192..f8c740bd1 100644 --- a/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/src/main/java/org/apache/dubbo/rest/demo/DemoService.java +++ b/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/src/main/java/org/apache/dubbo/rest/demo/DemoService.java @@ -18,6 +18,7 @@ package org.apache.dubbo.rest.demo; import org.apache.dubbo.remoting.http12.HttpMethods; +import org.apache.dubbo.remoting.http12.HttpResult; import org.apache.dubbo.remoting.http12.rest.Mapping; import org.apache.dubbo.remoting.http12.rest.Param; import org.apache.dubbo.remoting.http12.rest.ParamType; @@ -32,4 +33,6 @@ public interface DemoService { @Mapping String helloUser(User user); + @Mapping(method = HttpMethods.GET) + HttpResult<String> helloH2cWithExceededLargeSizeHeaderResp(); } diff --git a/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/src/main/java/org/apache/dubbo/rest/demo/DemoServiceImpl.java b/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/src/main/java/org/apache/dubbo/rest/demo/DemoServiceImpl.java index b6083a9dd..0464419c6 100644 --- a/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/src/main/java/org/apache/dubbo/rest/demo/DemoServiceImpl.java +++ b/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/src/main/java/org/apache/dubbo/rest/demo/DemoServiceImpl.java @@ -18,7 +18,12 @@ package org.apache.dubbo.rest.demo; import org.apache.dubbo.config.annotation.DubboService; +import org.apache.dubbo.remoting.http12.HttpResult; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.stream.IntStream; @DubboService @@ -26,8 +31,11 @@ public class DemoServiceImpl implements DemoService { private static final StringBuffer finalString = new StringBuffer(); + private static final Map<String, List<String>> finalMap = new LinkedHashMap<>(); + static { IntStream.range(0, 20000).forEach(i -> finalString.append(i).append("Hello")); + finalMap.put("large-size-response-header", Collections.singletonList(finalString.toString())); } @Override @@ -44,4 +52,25 @@ public class DemoServiceImpl implements DemoService { public String helloUser(User user) { return finalString + "Hello " + user.getTitle() + ". " + user.getName(); } + + @Override + public HttpResult<String> helloH2cWithExceededLargeSizeHeaderResp() { + return new HttpResult<>() { + + @Override + public int getStatus() { + return 200; + } + + @Override + public Map<String, List<String>> getHeaders() { + return finalMap; + } + + @Override + public String getBody() { + return "Client should not get this because response header size exceeds limitation!"; + } + }; + } } diff --git a/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/src/test/java/org/apache/dubbo/rest/demo/DelayConsumerIT.java b/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/src/test/java/org/apache/dubbo/rest/demo/DelayConsumerIT.java index dd3d58571..9fbad9dfc 100644 --- a/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/src/test/java/org/apache/dubbo/rest/demo/DelayConsumerIT.java +++ b/2-advanced/dubbo-samples-triple-rest/dubbo-samples-triple-rest-basic/src/test/java/org/apache/dubbo/rest/demo/DelayConsumerIT.java @@ -19,8 +19,19 @@ package org.apache.dubbo.rest.demo; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; +import java.util.concurrent.TimeUnit; import java.util.stream.IntStream; +import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.HttpClientTransport; +import org.eclipse.jetty.client.transport.HttpClientConnectionFactory; +import org.eclipse.jetty.client.transport.HttpClientTransportDynamic; +import org.eclipse.jetty.http.HttpHeader; +import org.eclipse.jetty.http2.client.HTTP2Client; +import org.eclipse.jetty.http2.client.transport.ClientConnectionFactoryOverHTTP2; +import org.eclipse.jetty.io.ClientConnectionFactory; +import org.eclipse.jetty.io.ClientConnector; +import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -70,4 +81,39 @@ public class DelayConsumerIT { .body(String.class); Assertions.assertEquals("\"" + finalString + "Hello Mr. Yang\"", result); } + + /** + * The MAX_HEADER_LIST_SIZE value of jetty HTTP/2 client is 8192, which is smaller than the default value of + * Triple server, Triple server should wait client connection preface before sending back response with large + * size header, otherwise the client will encounter IOException with invalid_continuation_stream. + */ + @Test + public void helloH2cWithExceededLargeSizeHeaderResp() throws Exception { + ClientConnector clientConnector = new ClientConnector(); + HTTP2Client http2Client = new HTTP2Client(clientConnector); + ClientConnectionFactory.Info h2 = new ClientConnectionFactoryOverHTTP2.HTTP2(http2Client); + clientConnector.setSelectors(1); + QueuedThreadPool clientThreads = new QueuedThreadPool(); + clientThreads.setName("client"); + clientConnector.setExecutor(clientThreads); + HttpClientTransport httpClientTransport + = new HttpClientTransportDynamic(clientConnector, HttpClientConnectionFactory.HTTP11, h2); + HttpClient httpClient = new HttpClient(httpClientTransport); + httpClient.start(); + + try { + httpClient.newRequest(toUri("/helloH2cWithExceededLargeSizeHeaderResp")) + .headers(headers -> headers + .put(HttpHeader.UPGRADE, "h2c") + .put(HttpHeader.HTTP2_SETTINGS, "") + .put(HttpHeader.CONNECTION, "Upgrade, HTTP2-Settings")) + .timeout(5, TimeUnit.SECONDS) + .send(); + Assertions.fail("Expected exception not occurred!"); + } catch (Exception ex) { + Assertions.assertEquals("java.io.IOException: cancel_stream_error", ex.getMessage()); + } finally { + httpClient.stop(); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@dubbo.apache.org For additional commands, e-mail: notifications-h...@dubbo.apache.org