From e1c84b011b03e30a43f141d8da8b1107a66d8a1a Mon Sep 17 00:00:00 2001 From: Jon Marius Venstad Date: Tue, 23 Apr 2019 13:18:24 +0200 Subject: Stash first part of HttpEndpoint --- .../main/java/com/yahoo/vespa/tenant/cd/Query.java | 6 ++ .../java/com/yahoo/vespa/tenant/cd/TestConfig.java | 1 + .../yahoo/vespa/tenant/cd/http/HttpEndpoint.java | 79 +++++++++++++++++++++- 3 files changed, 84 insertions(+), 2 deletions(-) diff --git a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/Query.java b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/Query.java index 80dbfe4385a..e8b950c1fe8 100644 --- a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/Query.java +++ b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/Query.java @@ -51,4 +51,10 @@ public class Query { .collect(toUnmodifiableMap(Map.Entry::getKey, Map.Entry::getValue))); } + /** Returns the raw string representation of this query. */ + public String rawQuery() { return rawQuery; } + + /** Returns the parameters of this query. */ + public Map parameters() { return parameters; } + } diff --git a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/TestConfig.java b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/TestConfig.java index 9edb76cfe35..12b48600fbf 100644 --- a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/TestConfig.java +++ b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/TestConfig.java @@ -16,6 +16,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.IntStream; /** * The place to obtain environment-dependent configuration for the current test run. diff --git a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/http/HttpEndpoint.java b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/http/HttpEndpoint.java index c736244e7a8..45b698e3808 100644 --- a/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/http/HttpEndpoint.java +++ b/tenant-cd/src/main/java/com/yahoo/vespa/tenant/cd/http/HttpEndpoint.java @@ -1,9 +1,84 @@ package com.yahoo.vespa.tenant.cd.http; +import com.yahoo.slime.Inspector; +import com.yahoo.slime.JsonDecoder; +import com.yahoo.slime.Slime; +import com.yahoo.vespa.tenant.cd.Digest; +import com.yahoo.vespa.tenant.cd.Feed; +import com.yahoo.vespa.tenant.cd.Query; +import com.yahoo.vespa.tenant.cd.Search; +import com.yahoo.vespa.tenant.cd.Selection; +import com.yahoo.vespa.tenant.cd.TestEndpoint; +import com.yahoo.vespa.tenant.cd.Visit; +import com.yahoo.vespa.tenant.cd.metrics.Metrics; + +import java.io.IOException; +import java.net.URI; import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.Duration; +import java.util.Objects; + +import static java.util.Objects.requireNonNull; + +public class HttpEndpoint implements TestEndpoint { + + static final String metricsPath = "/state/v1/metrics"; + static final String documentApiPath = "/document/v1"; + static final String searchApiPath = "/search"; + + private final URI endpoint; + private final HttpClient client; + + public HttpEndpoint(URI endpoint) { + this.endpoint = requireNonNull(endpoint); + this.client = HttpClient.newBuilder() + .sslContext(Security.sslContext()) + .connectTimeout(Duration.ofSeconds(5)) + .version(HttpClient.Version.HTTP_1_1) + .build(); + } + + @Override + public Digest digest(Feed feed) { + return null; + } + + @Override + public Search search(Query query) { + try { + URI target = endpoint.resolve(searchApiPath).resolve("?" + query.rawQuery()); + HttpRequest request = HttpRequest.newBuilder() + .timeout(Duration.ofSeconds(5)) + .uri(target) + .build(); + HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofByteArray()); + if (response.statusCode() / 100 != 2) + throw new RuntimeException("Non-OK status code " + response.statusCode() + " at " + target + + ", with response \n" + new String(response.body())); + + return toSearch(response.body()); + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + + static Search toSearch(byte[] body) { + Inspector rootObject = new JsonDecoder().decode(new Slime(), body).get(); + // TODO jvenstad + return new Search(); + } -public class HttpEndpoint { + @Override + public Visit visit(Selection selection) { + return null; + } - HttpClient client = HttpClient.newBuilder().build(); + @Override + public Metrics metrics() { + return null; + } } -- cgit v1.2.3