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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]