From f366966e08d80dec2707e4f9f9d24f8253ebd5cb Mon Sep 17 00:00:00 2001 From: Yuya Ebihara Date: Sat, 6 Jan 2024 09:39:58 +0900 Subject: [PATCH] Replace MockWebServer with dockerized Trino --- gateway-ha/pom.xml | 6 - .../gateway/proxyserver/TestProxyServer.java | 141 +++++------------- pom.xml | 7 - 3 files changed, 37 insertions(+), 117 deletions(-) diff --git a/gateway-ha/pom.xml b/gateway-ha/pom.xml index e1f930471..a11d78fd8 100644 --- a/gateway-ha/pom.xml +++ b/gateway-ha/pom.xml @@ -195,12 +195,6 @@ test - - com.squareup.okhttp - mockwebserver - test - - org.assertj assertj-core diff --git a/gateway-ha/src/test/java/io/trino/gateway/proxyserver/TestProxyServer.java b/gateway-ha/src/test/java/io/trino/gateway/proxyserver/TestProxyServer.java index 4c62d7f81..bccd64eef 100644 --- a/gateway-ha/src/test/java/io/trino/gateway/proxyserver/TestProxyServer.java +++ b/gateway-ha/src/test/java/io/trino/gateway/proxyserver/TestProxyServer.java @@ -13,126 +13,59 @@ */ package io.trino.gateway.proxyserver; -import com.squareup.okhttp.mockwebserver.MockResponse; -import com.squareup.okhttp.mockwebserver.MockWebServer; -import com.squareup.okhttp.mockwebserver.RecordedRequest; -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpUriRequest; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.util.EntityUtils; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.containers.TrinoContainer; -import java.io.IOException; -import java.util.Random; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS; +@TestInstance(PER_CLASS) public class TestProxyServer { - private static int serverPort; - private static MockWebServer backend; - private static ProxyServer proxyServer; + private TrinoContainer trino; + private ProxyServer proxy; + private int proxyPort; - @Test - public void testProxyServer() - throws IOException + @BeforeEach + void setUp() { - String mockResponseText = "Test1234"; - setProxyServer(mockResponseText); - try { - proxyServer.start(); - CloseableHttpClient httpclient = HttpClientBuilder.create().build(); - HttpUriRequest httpUriRequest = new HttpGet("http://localhost:" + serverPort); - HttpResponse response = httpclient.execute(httpUriRequest); - assertEquals(mockResponseText, EntityUtils.toString(response.getEntity())); - } - finally { - proxyServer.close(); - backend.shutdown(); - } + trino = new TrinoContainer("trinodb/trino"); + trino.start(); + + int trinoPort = trino.getMappedPort(8080); + proxyPort = trinoPort + 1; + ProxyServerConfiguration config = new ProxyServerConfiguration(); + config.setName("test_cluster"); + config.setProxyTo("http://localhost:" + trinoPort); + config.setLocalPort(proxyPort); + proxy = new ProxyServer(config, new ProxyHandler()); + proxy.start(); } - @Test - public void testCustomHeader() - throws Exception + @AfterAll + public void cleanup() { - String mockResponseText = "CUSTOM HEADER TEST"; - setProxyServer(mockResponseText); - try { - proxyServer.start(); - CloseableHttpClient httpclient = HttpClientBuilder.create().build(); - HttpUriRequest httpUriRequest = new HttpGet("http://localhost:" + serverPort); - httpUriRequest.setHeader("HEADER1", "FOO"); - httpUriRequest.setHeader("HEADER2", "BAR"); - - HttpResponse response = httpclient.execute(httpUriRequest); - assertEquals(mockResponseText, EntityUtils.toString(response.getEntity())); - RecordedRequest recordedRequest = backend.takeRequest(); - assertEquals("FOO", recordedRequest.getHeader("HEADER1")); - assertEquals("BAR", recordedRequest.getHeader("HEADER2")); - } - finally { - proxyServer.close(); - backend.shutdown(); - } + trino.close(); + proxy.close(); } @Test - public void testLongHeader() + public void testProxyServer() throws Exception { - String mockResponseText = "CUSTOM LONG HEADER TEST"; - setProxyServer(mockResponseText); - String mockLongHeaderKey = "HEADER_LONG"; - // Mockserver has max 8k for HTTP Header values so test with header value larger than default 4k - int headerLength = 5 * 1024; - String mockLongHeaderValue = "x".repeat(headerLength); - try { - proxyServer.start(); - CloseableHttpClient httpclient = HttpClientBuilder.create().build(); - HttpUriRequest httpUriRequest = new HttpGet("http://localhost:" + serverPort); - httpUriRequest.setHeader(mockLongHeaderKey, mockLongHeaderValue); - - HttpResponse response = httpclient.execute(httpUriRequest); - assertEquals(mockResponseText, EntityUtils.toString(response.getEntity())); - RecordedRequest recordedRequest = backend.takeRequest(); - assertEquals(mockLongHeaderValue, recordedRequest.getHeader(mockLongHeaderKey)); - } - finally { - proxyServer.close(); - backend.shutdown(); + try (Connection connection = DriverManager.getConnection("jdbc:trino://localhost:" + proxyPort, "test_user", null); + Statement statement = connection.createStatement()) { + ResultSet result = statement.executeQuery("SELECT 'test'"); + result.next(); + assertThat(result.getString(1)).isEqualTo("test"); } } - - private ProxyServerConfiguration buildConfig(String backendUrl, int localPort) - { - ProxyServerConfiguration config = new ProxyServerConfiguration(); - config.setName("MockBackend"); - config.setPrefix("/"); - config.setPreserveHost("true"); - config.setProxyTo(backendUrl); - config.setLocalPort(localPort); - config.setOutputBufferSize(32 * 1024); - config.setResponseHeaderSize(8 * 1024); - config.setRequestHeaderSize(8 * 1024); - config.setRequestBufferSize(16 * 1024); // default 4 * 1024 - config.setResponseBufferSize(16 * 1024); - return config; - } - - private void setProxyServer(String mockResponseText) - throws IOException - { - int backendPort = 30000 + new Random().nextInt(1000); - - backend = new MockWebServer(); - backend.enqueue(new MockResponse().setBody(mockResponseText)); - backend.play(backendPort); - - serverPort = backendPort + 1; - ProxyServerConfiguration config = buildConfig(backend.getUrl("/").toString(), serverPort); - proxyServer = new ProxyServer(config, new ProxyHandler()); - } } diff --git a/pom.xml b/pom.xml index f82c3b665..531bec407 100644 --- a/pom.xml +++ b/pom.xml @@ -59,7 +59,6 @@ 2.0.0 4.1.0 11.0.15 - 1.2.1 5.8.0 8.0.17 3.9.0 @@ -90,12 +89,6 @@ import - - com.squareup.okhttp - mockwebserver - ${dep.mockwebserver.version} - - org.apache.commons commons-lang3