This is an automated email from the ASF dual-hosted git repository.
zhouyao2023 pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new 9d161d24ea [Fix] Fix http e2e case (#7356)
9d161d24ea is described below
commit 9d161d24ea2fed6ed7392deda6342fd068df3b6a
Author: lizhenglei <[email protected]>
AuthorDate: Mon Aug 12 14:03:21 2024 +0800
[Fix] Fix http e2e case (#7356)
* 1
* fix
* fix
* fix
* fix
* fix
---------
Co-authored-by: lizhenglei <[email protected]>
---
.../connector-http-e2e/pom.xml | 7 ++
.../seatunnel/e2e/connector/http/HttpIT.java | 115 ++++++++++++++++++++-
2 files changed, 119 insertions(+), 3 deletions(-)
diff --git
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/pom.xml
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/pom.xml
index 84b73a5998..69b776da5f 100644
--- a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/pom.xml
+++ b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/pom.xml
@@ -98,6 +98,13 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.mock-server</groupId>
+ <artifactId>mockserver-netty-no-dependencies</artifactId>
+ <version>5.14.0</version>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
</project>
diff --git
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpIT.java
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpIT.java
index f53d8c1d45..af1d7125ea 100644
---
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpIT.java
+++
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-http-e2e/src/test/java/org/apache/seatunnel/e2e/connector/http/HttpIT.java
@@ -17,6 +17,10 @@
package org.apache.seatunnel.e2e.connector.http;
+import
org.apache.seatunnel.shade.com.fasterxml.jackson.core.type.TypeReference;
+import
org.apache.seatunnel.shade.com.fasterxml.jackson.databind.DeserializationFeature;
+import org.apache.seatunnel.shade.com.fasterxml.jackson.databind.ObjectMapper;
+
import org.apache.seatunnel.e2e.common.TestResource;
import org.apache.seatunnel.e2e.common.TestSuiteBase;
import org.apache.seatunnel.e2e.common.container.EngineType;
@@ -27,6 +31,8 @@ import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.TestTemplate;
+import org.mockserver.client.MockServerClient;
+import org.mockserver.model.Format;
import org.testcontainers.containers.Container;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.output.Slf4jLogConsumer;
@@ -36,22 +42,35 @@ import org.testcontainers.utility.DockerImageName;
import org.testcontainers.utility.DockerLoggerFactory;
import org.testcontainers.utility.MountableFile;
+import com.google.common.collect.Lists;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+
import java.io.File;
import java.io.IOException;
+import java.math.BigDecimal;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Optional;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
+import static org.mockserver.model.HttpRequest.request;
+
public class HttpIT extends TestSuiteBase implements TestResource {
private static final String TMP_DIR = "/tmp";
- private static final String successCount = "Total Write Count :
2";
-
private static final String IMAGE = "mockserver/mockserver:5.14.0";
private GenericContainer<?> mockserverContainer;
+ private static final List<Record> records = new ArrayList<>();
+
+ private MockServerClient mockServerClient;
+
@BeforeAll
@Override
public void startUp() {
@@ -78,7 +97,48 @@ public class HttpIT extends TestSuiteBase implements
TestResource {
.withEnv("MOCKSERVER_LOG_LEVEL", "WARN")
.withLogConsumer(new
Slf4jLogConsumer(DockerLoggerFactory.getLogger(IMAGE)))
.waitingFor(new
HttpWaitStrategy().forPath("/").forStatusCode(404));
+
mockserverContainer.setPortBindings(Lists.newArrayList(String.format("%s:%s",
1080, 1080)));
Startables.deepStart(Stream.of(mockserverContainer)).join();
+ mockServerClient = new MockServerClient("127.0.0.1", 1080);
+ fillMockRecords();
+ }
+
+ private static void fillMockRecords() {
+ Record recordFirst = new Record();
+ RequestBody requestBodyFirst = new RequestBody();
+ JsonBody jsonBodyFirst = new JsonBody();
+ jsonBodyFirst.setId(1);
+ jsonBodyFirst.setVal_bool(true);
+ jsonBodyFirst.setVal_int8(new Byte("1"));
+ jsonBodyFirst.setVal_int16((short) 2);
+ jsonBodyFirst.setVal_int32(3);
+ jsonBodyFirst.setVal_int64(4);
+ jsonBodyFirst.setVal_float(4.3F);
+ jsonBodyFirst.setVal_double(5.3);
+ jsonBodyFirst.setVal_decimal(BigDecimal.valueOf(6.3));
+ jsonBodyFirst.setVal_string("NEW");
+ jsonBodyFirst.setVal_unixtime_micros("2020-02-02T02:02:02");
+ requestBodyFirst.setJson(jsonBodyFirst);
+ recordFirst.setBody(requestBodyFirst);
+
+ Record recordSec = new Record();
+ RequestBody requestBodySec = new RequestBody();
+ JsonBody jsonBodySec = new JsonBody();
+ jsonBodySec.setId(2);
+ jsonBodySec.setVal_bool(true);
+ jsonBodySec.setVal_int8(new Byte("1"));
+ jsonBodySec.setVal_int16((short) 2);
+ jsonBodySec.setVal_int32(3);
+ jsonBodySec.setVal_int64(4);
+ jsonBodySec.setVal_float(4.3F);
+ jsonBodySec.setVal_double(5.3);
+ jsonBodySec.setVal_decimal(BigDecimal.valueOf(6.3));
+ jsonBodySec.setVal_string("NEW");
+ jsonBodySec.setVal_unixtime_micros("2020-02-02T02:02:02");
+ requestBodySec.setJson(jsonBodySec);
+ recordSec.setBody(requestBodySec);
+ records.add(recordFirst);
+ records.add(recordSec);
}
@AfterAll
@@ -87,6 +147,9 @@ public class HttpIT extends TestSuiteBase implements
TestResource {
if (mockserverContainer != null) {
mockserverContainer.stop();
}
+ if (mockServerClient != null) {
+ mockServerClient.close();
+ }
}
@TestTemplate
@@ -176,7 +239,53 @@ public class HttpIT extends TestSuiteBase implements
TestResource {
throws IOException, InterruptedException {
Container.ExecResult execResult =
container.executeJob("/fake_to_multitable.conf");
Assertions.assertEquals(0, execResult.getExitCode());
- Assertions.assertTrue(execResult.getStdout().contains(successCount));
+ ObjectMapper objectMapper = new ObjectMapper();
+
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
false);
+ String mockResponse =
+ mockServerClient.retrieveRecordedRequests(
+
request().withPath("/example/httpMultiTableContentSink").withMethod("POST"),
+ Format.JSON);
+ List<Record> recordResponse =
+ objectMapper.readValue(mockResponse, new
TypeReference<List<Record>>() {});
+ recordResponse =
+ recordResponse.stream()
+ .sorted(
+ (r1, r2) ->
+ r1.getBody().getJson().getId()
+ -
r2.getBody().getJson().getId())
+ .collect(Collectors.toList());
+ Assertions.assertIterableEquals(records, recordResponse);
+ }
+
+ @Getter
+ @Setter
+ @EqualsAndHashCode
+ static class Record {
+ private RequestBody body;
+ }
+
+ @Getter
+ @Setter
+ @EqualsAndHashCode
+ static class RequestBody {
+ private JsonBody json;
+ }
+
+ @Getter
+ @Setter
+ @EqualsAndHashCode
+ static class JsonBody {
+ private int id;
+ private boolean val_bool;
+ private byte val_int8;
+ private short val_int16;
+ private int val_int32;
+ private long val_int64;
+ private float val_float;
+ private double val_double;
+ private BigDecimal val_decimal;
+ private String val_string;
+ private String val_unixtime_micros;
}
public String getMockServerConfig() {