Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion client/trino-cli/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,13 @@

<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
<artifactId>mockwebserver3</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver3-junit5</artifactId>
<scope>test</scope>
</dependency>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
*/
package io.trino.cli;

import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import org.junit.jupiter.api.AfterEach;
import mockwebserver3.MockResponse;
import mockwebserver3.MockWebServer;
import mockwebserver3.junit5.StartStop;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
Expand Down Expand Up @@ -44,44 +44,37 @@
@TestInstance(PER_METHOD)
public class TestInsecureQueryRunner
{
private MockWebServer server;
@StartStop
private final MockWebServer server = new MockWebServer();

@BeforeEach
public void setup()
throws Exception
{
server = new MockWebServer();
SSLContext sslContext = buildTestSslContext();
server.useHttps(sslContext.getSocketFactory(), false);
server.start();
}

@AfterEach
public void teardown()
throws Exception
{
server.close();
server = null;
server.useHttps(sslContext.getSocketFactory());
}

@Test
public void testInsecureConnection()
throws Exception
{
server.enqueue(new MockResponse()
server.enqueue(new MockResponse.Builder()
.addHeader(CONTENT_TYPE, "application/json")
.setBody(createResults(server)));
server.enqueue(new MockResponse()
.body(createResults(server))
.build());
server.enqueue(new MockResponse.Builder()
.addHeader(CONTENT_TYPE, "application/json")
.setBody(createResults(server)));
.body(createResults(server))
.build());

QueryRunner queryRunner = createQueryRunner(createTrinoUri(server, true), createClientSession(server));

try (Query query = queryRunner.startQuery("query with insecure mode")) {
query.renderOutput(getTerminal(), nullPrintStream(), nullPrintStream(), CSV, Optional.of(""), false, false);
}

assertThat(server.takeRequest().getPath()).isEqualTo("/v1/statement");
assertThat(server.takeRequest().getUrl().encodedPath()).isEqualTo("/v1/statement");
}

private SSLContext buildTestSslContext()
Expand Down
49 changes: 18 additions & 31 deletions client/trino-cli/src/test/java/io/trino/cli/TestQueryRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,12 @@
import io.trino.client.TypedQueryData;
import io.trino.client.uri.PropertyName;
import io.trino.client.uri.TrinoUri;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import mockwebserver3.MockResponse;
import mockwebserver3.MockWebServer;
import mockwebserver3.junit5.StartStop;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;

import java.io.IOException;
import java.io.PrintStream;
import java.time.ZoneId;
import java.util.Locale;
Expand All @@ -57,38 +55,27 @@
public class TestQueryRunner
{
private static final TrinoJsonCodec<QueryResults> QUERY_RESULTS_CODEC = jsonCodec(QueryResults.class);
private MockWebServer server;

@BeforeEach
public void setup()
throws IOException
{
server = new MockWebServer();
server.start();
}

@AfterEach
public void teardown()
throws IOException
{
server.close();
server = null;
}
@StartStop
private final MockWebServer server = new MockWebServer();

@Test
public void testCookie()
throws Exception
{
server.enqueue(new MockResponse()
.setResponseCode(307)
server.enqueue(new MockResponse.Builder()
.code(307)
.addHeader(LOCATION, server.url("/v1/statement"))
.addHeader(SET_COOKIE, "a=apple"));
server.enqueue(new MockResponse()
.addHeader(SET_COOKIE, "a=apple")
.build());
server.enqueue(new MockResponse.Builder()
.addHeader(CONTENT_TYPE, "application/json")
.setBody(createResults(server)));
server.enqueue(new MockResponse()
.body(createResults(server))
.build());
server.enqueue(new MockResponse.Builder()
.addHeader(CONTENT_TYPE, "application/json")
.setBody(createResults(server)));
.body(createResults(server))
.build());

QueryRunner queryRunner = createQueryRunner(createTrinoUri(server, false), createClientSession(server));

Expand All @@ -99,9 +86,9 @@ public void testCookie()
query.renderOutput(getTerminal(), nullPrintStream(), nullPrintStream(), CSV, Optional.of(""), false, false);
}

assertThat(server.takeRequest().getHeader("Cookie")).isNull();
assertThat(server.takeRequest().getHeader("Cookie")).isEqualTo("a=apple");
assertThat(server.takeRequest().getHeader("Cookie")).isEqualTo("a=apple");
assertThat(server.takeRequest().getHeaders().get("Cookie")).isNull();
assertThat(server.takeRequest().getHeaders().get("Cookie")).isEqualTo("a=apple");
assertThat(server.takeRequest().getHeaders().get("Cookie")).isEqualTo("a=apple");
}

static TrinoUri createTrinoUri(MockWebServer server, boolean insecureSsl)
Expand Down
8 changes: 7 additions & 1 deletion client/trino-client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,13 @@

<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver</artifactId>
<artifactId>mockwebserver3</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>mockwebserver3-junit5</artifactId>
<scope>test</scope>
</dependency>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@
import com.google.common.collect.ImmutableList;
import io.airlift.json.JsonCodec;
import io.trino.client.uri.TrinoUri;
import mockwebserver3.MockResponse;
import mockwebserver3.MockWebServer;
import mockwebserver3.RecordedRequest;
import mockwebserver3.junit5.StartStop;
import okhttp3.Credentials;
import okhttp3.OkHttpClient;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
import okhttp3.mockwebserver.RecordedRequest;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

Expand All @@ -47,33 +47,25 @@
final class TestClientRedirect
{
private static final JsonCodec<QueryResults> QUERY_RESULTS_CODEC = jsonCodec(QueryResults.class);
private MockWebServer proxyServer;
private MockWebServer trinoServer;

@StartStop
private final MockWebServer proxyServer = new MockWebServer();

@StartStop
private final MockWebServer trinoServer = new MockWebServer();

@BeforeEach
void setup()
throws IOException
{
proxyServer = new MockWebServer();
trinoServer = new MockWebServer();
proxyServer.start();
trinoServer.start();
proxyServer.enqueue(new MockResponse()
.setResponseCode(307)
.addHeader(LOCATION, trinoServer.url("/v1/statement")));
trinoServer.enqueue(new MockResponse()
proxyServer.enqueue(new MockResponse.Builder()
.code(307)
.addHeader(LOCATION, trinoServer.url("/v1/statement"))
.build());
trinoServer.enqueue(new MockResponse.Builder()
.addHeader(CONTENT_TYPE, "application/json")
.setBody(newQueryResults(proxyServer)));
}

@AfterEach
void teardown()
throws IOException
{
proxyServer.close();
trinoServer.close();
proxyServer = null;
trinoServer = null;
.body(newQueryResults(proxyServer))
.build());
}

@Test
Expand All @@ -95,34 +87,36 @@ void testAccessToken()
}

RecordedRequest redirectedRequest = trinoServer.takeRequest();
assertThat(redirectedRequest.getHeader(AUTHORIZATION)).isEqualTo("Bearer " + accessToken);
assertThat(redirectedRequest.getHeaders().get(AUTHORIZATION)).isEqualTo("Bearer " + accessToken);
}

@Test
void testMultipleRedirects()
throws Exception
{
MockWebServer firstProxy = new MockWebServer();
firstProxy.start();
proxyServer.enqueue(new MockResponse()
.setResponseCode(307)
.addHeader(LOCATION, proxyServer.url("/v1/statement")));
String accessToken = "access_t0ken";
TrinoUri trinoUri = TrinoUri.builder()
.setUri(firstProxy.url("/").uri())
.setAccessToken(accessToken)
.setSsl(true)
.build();

try (StatementClient client = createStatementClient(proxyServer, trinoUri)) {
while (client.advance()) {
// consume all client data
try (MockWebServer firstProxy = new MockWebServer()) {
firstProxy.start();
proxyServer.enqueue(new MockResponse.Builder()
.code(307)
.addHeader(LOCATION, proxyServer.url("/v1/statement"))
.build());
String accessToken = "access_t0ken";
TrinoUri trinoUri = TrinoUri.builder()
.setUri(firstProxy.url("/").uri())
.setAccessToken(accessToken)
.setSsl(true)
.build();

try (StatementClient client = createStatementClient(proxyServer, trinoUri)) {
while (client.advance()) {
// consume all client data
}
assertThat(client.isFinished()).isTrue();
}
assertThat(client.isFinished()).isTrue();
}

RecordedRequest redirectedRequest = trinoServer.takeRequest();
assertThat(redirectedRequest.getHeader(AUTHORIZATION)).isEqualTo("Bearer " + accessToken);
RecordedRequest redirectedRequest = trinoServer.takeRequest();
assertThat(redirectedRequest.getHeaders().get(AUTHORIZATION)).isEqualTo("Bearer " + accessToken);
}
}

@Test
Expand All @@ -146,7 +140,7 @@ void testBasicAuth()
}

RecordedRequest redirectedRequest = trinoServer.takeRequest();
assertThat(redirectedRequest.getHeader(AUTHORIZATION)).isEqualTo(Credentials.basic(user, password));
assertThat(redirectedRequest.getHeaders().get(AUTHORIZATION)).isEqualTo(Credentials.basic(user, password));
}

private String newQueryResults(MockWebServer server)
Expand Down
Loading