From 1e74107ce3a0781c6250473a4874c2d19123d23e Mon Sep 17 00:00:00 2001 From: Jon Marius Venstad Date: Thu, 13 Jun 2019 14:39:53 +0200 Subject: Implement HttpDeployment, allowing the most basic of testing to commence --- .../src/main/java/ai/vespa/hosted/cd/Endpoint.java | 4 ++++ .../main/java/ai/vespa/hosted/cd/TestRuntime.java | 6 +++-- .../ai/vespa/hosted/cd/http/HttpDeployment.java | 28 +++++++++++++++------- .../java/ai/vespa/hosted/cd/http/HttpEndpoint.java | 5 ++++ 4 files changed, 32 insertions(+), 11 deletions(-) (limited to 'tenant-cd/src') diff --git a/tenant-cd/src/main/java/ai/vespa/hosted/cd/Endpoint.java b/tenant-cd/src/main/java/ai/vespa/hosted/cd/Endpoint.java index 348fc329682..efeb4214ebd 100644 --- a/tenant-cd/src/main/java/ai/vespa/hosted/cd/Endpoint.java +++ b/tenant-cd/src/main/java/ai/vespa/hosted/cd/Endpoint.java @@ -2,6 +2,8 @@ package ai.vespa.hosted.cd; import ai.vespa.hosted.cd.metric.Metrics; +import java.net.URI; + /** * An endpoint in a Vespa application {@link Deployment}, which allows document and metrics retrieval. * @@ -12,6 +14,8 @@ import ai.vespa.hosted.cd.metric.Metrics; */ public interface Endpoint { + URI uri(); + Search search(Query query); Visit visit(Selection selection); diff --git a/tenant-cd/src/main/java/ai/vespa/hosted/cd/TestRuntime.java b/tenant-cd/src/main/java/ai/vespa/hosted/cd/TestRuntime.java index c6560e10665..4ae1c0b7a5e 100644 --- a/tenant-cd/src/main/java/ai/vespa/hosted/cd/TestRuntime.java +++ b/tenant-cd/src/main/java/ai/vespa/hosted/cd/TestRuntime.java @@ -34,8 +34,10 @@ public class TestRuntime { this.productionDeployments = config.deployments().entrySet().stream() .filter(zoneDeployment -> zoneDeployment.getKey().environment() == Environment.prod) .collect(toUnmodifiableMap(zoneDeployment -> zoneDeployment.getKey().region().value(), - zoneDeployment -> new HttpDeployment(zoneDeployment.getValue(), authenticator))); - this.deploymentToTest = new HttpDeployment(config.deployments().get(config.zone()), authenticator); + zoneDeployment -> new HttpDeployment(zoneDeployment.getValue(), + config.zone(), + authenticator))); + this.deploymentToTest = new HttpDeployment(config.deployments().get(config.zone()), config.zone(), authenticator); } /** diff --git a/tenant-cd/src/main/java/ai/vespa/hosted/cd/http/HttpDeployment.java b/tenant-cd/src/main/java/ai/vespa/hosted/cd/http/HttpDeployment.java index d53e08863f7..22c622effae 100644 --- a/tenant-cd/src/main/java/ai/vespa/hosted/cd/http/HttpDeployment.java +++ b/tenant-cd/src/main/java/ai/vespa/hosted/cd/http/HttpDeployment.java @@ -1,12 +1,14 @@ package ai.vespa.hosted.cd.http; import ai.vespa.hosted.api.EndpointAuthenticator; -import ai.vespa.hosted.cd.Deployment; -import ai.vespa.hosted.cd.Endpoint; import ai.vespa.hosted.cd.TestDeployment; +import ai.vespa.hosted.cd.TestEndpoint; +import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.zone.ZoneId; import java.net.URI; import java.util.Map; +import java.util.NoSuchElementException; import java.util.stream.Collectors; /** @@ -14,30 +16,38 @@ import java.util.stream.Collectors; * * @author jonmv */ -public class HttpDeployment implements Deployment { +public class HttpDeployment implements TestDeployment { + private final ZoneId zone; private final Map endpoints; /** Creates a representation of the given deployment endpoints, using the authenticator for data plane access. */ - public HttpDeployment(Map endpoints, EndpointAuthenticator authenticator) { + public HttpDeployment(Map endpoints, ZoneId zone, EndpointAuthenticator authenticator) { + this.zone = zone; this.endpoints = endpoints.entrySet().stream() .collect(Collectors.toUnmodifiableMap(entry -> entry.getKey(), entry -> new HttpEndpoint(entry.getValue(), authenticator))); } @Override - public Endpoint endpoint() { - return null; + public TestEndpoint endpoint() { + return endpoint("default"); } @Override - public Endpoint endpoint(String id) { - return null; + public TestEndpoint endpoint(String id) { + if ( ! endpoints.containsKey(id)) + throw new NoSuchElementException("No cluster with id '" + id + "'"); + + return endpoints.get(id); } @Override public TestDeployment asTestDeployment() { - return null; + if (zone.environment() == Environment.prod) + throw new IllegalArgumentException("Won't return a mutable view of a production deployment"); + + return this; } } diff --git a/tenant-cd/src/main/java/ai/vespa/hosted/cd/http/HttpEndpoint.java b/tenant-cd/src/main/java/ai/vespa/hosted/cd/http/HttpEndpoint.java index 7a61c06c738..d2bf153b86a 100644 --- a/tenant-cd/src/main/java/ai/vespa/hosted/cd/http/HttpEndpoint.java +++ b/tenant-cd/src/main/java/ai/vespa/hosted/cd/http/HttpEndpoint.java @@ -51,6 +51,11 @@ public class HttpEndpoint implements TestEndpoint { return null; } + @Override + public URI uri() { + return endpoint; + } + @Override public Search search(Query query) { try { -- cgit v1.2.3