From fa035263c887e1f7420662d59b42c670c82bfc42 Mon Sep 17 00:00:00 2001 From: Jon Marius Venstad Date: Wed, 27 Mar 2019 15:45:38 +0100 Subject: Move OpsDB property listing to athenz API (I know, I know ...) --- .../yahoo/vespa/hosted/controller/Controller.java | 20 ++--------- .../restapi/application/ApplicationApiHandler.java | 17 +-------- .../restapi/athenz/AthenzApiHandler.java | 21 ++++++++++- .../vespa/hosted/controller/role/PathGroup.java | 8 ++--- .../vespa/hosted/controller/ControllerTester.java | 15 +++----- .../restapi/application/ApplicationApiTest.java | 3 -- .../restapi/application/AthenzApiTest.java | 34 ------------------ .../application/responses/athensDomain-list.json | 5 --- .../application/responses/property-list.json | 6 ---- .../restapi/application/responses/root.json | 3 -- .../controller/restapi/athenz/AthenzApiTest.java | 41 ++++++++++++++++++++++ .../athenz/responses/athensDomain-list.json | 5 +++ .../restapi/athenz/responses/property-list.json | 6 ++++ 13 files changed, 84 insertions(+), 100 deletions(-) delete mode 100644 controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/AthenzApiTest.java delete mode 100644 controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/athensDomain-list.json delete mode 100644 controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/property-list.json create mode 100644 controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiTest.java create mode 100644 controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/athensDomain-list.json create mode 100644 controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/property-list.json (limited to 'controller-server/src') diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java index e81c4d165f1..6e59c384485 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java @@ -20,7 +20,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationS import com.yahoo.vespa.hosted.controller.api.integration.deployment.ArtifactRepository; import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterCloud; import com.yahoo.vespa.hosted.controller.api.integration.dns.NameService; -import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService; import com.yahoo.vespa.hosted.controller.api.integration.github.GitHub; import com.yahoo.vespa.hosted.controller.api.integration.organization.Mailer; import com.yahoo.vespa.hosted.controller.api.integration.routing.RoutingGenerator; @@ -71,7 +70,6 @@ public class Controller extends AbstractComponent { private final JobController jobController; private final Clock clock; private final GitHub gitHub; - private final EntityService entityService; private final ZoneRegistry zoneRegistry; private final ConfigServer configServer; private final MetricsService metricsService; @@ -85,21 +83,19 @@ public class Controller extends AbstractComponent { * @param curator the curator instance storing the persistent state of the controller. */ @Inject - public Controller(CuratorDb curator, RotationsConfig rotationsConfig, GitHub gitHub, EntityService entityService, + public Controller(CuratorDb curator, RotationsConfig rotationsConfig, GitHub gitHub, ZoneRegistry zoneRegistry, ConfigServer configServer, MetricsService metricsService, NameService nameService, RoutingGenerator routingGenerator, Chef chef, AccessControl accessControl, ArtifactRepository artifactRepository, ApplicationStore applicationStore, TesterCloud testerCloud, BuildService buildService, RunDataStore runDataStore, Mailer mailer) { - this(curator, rotationsConfig, - gitHub, entityService, zoneRegistry, + this(curator, rotationsConfig, gitHub, zoneRegistry, configServer, metricsService, nameService, routingGenerator, chef, Clock.systemUTC(), accessControl, artifactRepository, applicationStore, testerCloud, buildService, runDataStore, com.yahoo.net.HostName::getLocalhost, mailer); } - public Controller(CuratorDb curator, RotationsConfig rotationsConfig, - GitHub gitHub, EntityService entityService, + public Controller(CuratorDb curator, RotationsConfig rotationsConfig, GitHub gitHub, ZoneRegistry zoneRegistry, ConfigServer configServer, MetricsService metricsService, NameService nameService, RoutingGenerator routingGenerator, Chef chef, Clock clock, @@ -111,7 +107,6 @@ public class Controller extends AbstractComponent { this.hostnameSupplier = Objects.requireNonNull(hostnameSupplier, "HostnameSupplier cannot be null"); this.curator = Objects.requireNonNull(curator, "Curator cannot be null"); this.gitHub = Objects.requireNonNull(gitHub, "GitHub cannot be null"); - this.entityService = Objects.requireNonNull(entityService, "EntityService cannot be null"); this.zoneRegistry = Objects.requireNonNull(zoneRegistry, "ZoneRegistry cannot be null"); this.configServer = Objects.requireNonNull(configServer, "ConfigServer cannot be null"); this.metricsService = Objects.requireNonNull(metricsService, "MetricsService cannot be null"); @@ -151,15 +146,6 @@ public class Controller extends AbstractComponent { return mailer; } - /** - * Fetch list of all active OpsDB properties. - * - * @return Hashed map with the property ID as key and property name as value - */ - public Map fetchPropertyList() { - return entityService.listProperties(); - } - public Clock clock() { return clock; } public ZoneRegistry zoneRegistry() { return zoneRegistry; } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index d4ef127348a..69a4216d221 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -40,8 +40,6 @@ import com.yahoo.vespa.hosted.controller.api.application.v4.model.configserverbi import com.yahoo.vespa.hosted.controller.api.application.v4.model.configserverbindings.ServiceInfo; import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.api.identifiers.Hostname; -import com.yahoo.vespa.hosted.controller.api.identifiers.Property; -import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId; import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServerException; import com.yahoo.vespa.hosted.controller.api.integration.configserver.Log; @@ -168,7 +166,6 @@ public class ApplicationApiHandler extends LoggingRequestHandler { if (path.matches("/application/v4/")) return root(request); if (path.matches("/application/v4/user")) return authenticatedUser(request); if (path.matches("/application/v4/tenant")) return tenants(request); - if (path.matches("/application/v4/property")) return properties(); if (path.matches("/application/v4/tenant/{tenant}")) return tenant(path.get("tenant"), request); if (path.matches("/application/v4/tenant/{tenant}/application")) return applications(path.get("tenant"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}")) return application(path.get("tenant"), path.get("application"), request); @@ -255,7 +252,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler { private HttpResponse root(HttpRequest request) { return recurseOverTenants(request) ? recursiveRoot(request) - : new ResourceResponse(request, "user", "tenant", "property"); + : new ResourceResponse(request, "user", "tenant"); } private HttpResponse authenticatedUser(HttpRequest request) { @@ -285,18 +282,6 @@ public class ApplicationApiHandler extends LoggingRequestHandler { return new SlimeJsonResponse(slime); } - private HttpResponse properties() { - Slime slime = new Slime(); - Cursor response = slime.setObject(); - Cursor array = response.setArray("properties"); - for (Map.Entry entry : controller.fetchPropertyList().entrySet()) { - Cursor propertyObject = array.addObject(); - propertyObject.setString("propertyid", entry.getKey().id()); - propertyObject.setString("property", entry.getValue().id()); - } - return new SlimeJsonResponse(slime); - } - private HttpResponse tenant(String tenantName, HttpRequest request) { return controller.tenants().get(TenantName.from(tenantName)) .map(tenant -> tenant(tenant, request)) diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiHandler.java index 937594bd905..40619ca85c2 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiHandler.java @@ -9,11 +9,15 @@ import com.yahoo.restapi.Path; import com.yahoo.slime.Cursor; import com.yahoo.slime.Slime; import com.yahoo.vespa.athenz.api.AthenzDomain; +import com.yahoo.vespa.hosted.controller.api.identifiers.Property; +import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId; +import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService; import com.yahoo.vespa.hosted.controller.athenz.impl.AthenzFacade; import com.yahoo.vespa.hosted.controller.restapi.ErrorResponse; import com.yahoo.vespa.hosted.controller.restapi.SlimeJsonResponse; import com.yahoo.yolean.Exceptions; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -28,10 +32,12 @@ public class AthenzApiHandler extends LoggingRequestHandler { private final static Logger log = Logger.getLogger(AthenzApiHandler.class.getName()); private final AthenzFacade athenz; + private final EntityService properties; - public AthenzApiHandler(Context parentCtx, AthenzFacade athenz) { + public AthenzApiHandler(Context parentCtx, AthenzFacade athenz, EntityService properties) { super(parentCtx); this.athenz = athenz; + this.properties = properties; } @Override @@ -55,11 +61,24 @@ public class AthenzApiHandler extends LoggingRequestHandler { private HttpResponse get(HttpRequest request) { Path path = new Path(request.getUri().getPath()); if (path.matches("/athenz/v1/domains")) return domainList(request); + if (path.matches("/athenz/v1/properties")) return properties(); return ErrorResponse.notFoundError(String.format("No '%s' handler at '%s'", request.getMethod(), request.getUri().getPath())); } + private HttpResponse properties() { + Slime slime = new Slime(); + Cursor response = slime.setObject(); + Cursor array = response.setArray("properties"); + for (Map.Entry entry : properties.listProperties().entrySet()) { + Cursor propertyObject = array.addObject(); + propertyObject.setString("propertyid", entry.getKey().id()); + propertyObject.setString("property", entry.getValue().id()); + } + return new SlimeJsonResponse(slime); + } + private HttpResponse domainList(HttpRequest request) { Slime slime = new Slime(); Cursor array = slime.setObject().setArray("data"); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/role/PathGroup.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/role/PathGroup.java index be77c7ed337..3776b1d2a13 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/role/PathGroup.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/role/PathGroup.java @@ -36,15 +36,15 @@ public enum PathGroup { /** Read-only paths used when onboarding tenants */ onboardingInfo("/athenz/v1/", - "/athenz/v1/domains"), + "/athenz/v1/domains", + "/athenz/v1/properties"), /** Paths used for user management */ userManagement("/user/v1/{*}"), // TODO probably add tenant and application levels. /** Paths used by tenant administrators */ - tenantInfo("/application/v4/", - "/application/v4/property/", - "/application/v4/tenant/"), + tenantInfo("/application/v4/", // TODO move + "/application/v4/tenant/"), // TODO move /** Paths used by tenant administrators */ tenant(Matcher.tenant, diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java index 2c4043c369c..d7845e4bfa1 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java @@ -22,7 +22,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationS import com.yahoo.vespa.hosted.controller.api.integration.deployment.ArtifactRepository; import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType; import com.yahoo.vespa.hosted.controller.api.integration.dns.MemoryNameService; -import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService; import com.yahoo.vespa.hosted.controller.api.integration.entity.MemoryEntityService; import com.yahoo.vespa.hosted.controller.api.integration.github.GitHubMock; import com.yahoo.vespa.hosted.controller.api.integration.organization.Contact; @@ -85,7 +84,6 @@ public final class ControllerTester { private final RotationsConfig rotationsConfig; private final ArtifactRepositoryMock artifactRepository; private final ApplicationStoreMock applicationStore; - private final EntityService entityService; private final MockBuildService buildService; private final MetricsServiceMock metricsService; private final RoutingGeneratorMock routingGenerator; @@ -97,8 +95,7 @@ public final class ControllerTester { MetricsServiceMock metricsService) { this(new AthenzDbMock(), clock, new ConfigServerMock(new ZoneRegistryMock()), new ZoneRegistryMock(), new GitHubMock(), curatorDb, rotationsConfig, - new MemoryNameService(), new ArtifactRepositoryMock(), new ApplicationStoreMock(), - new MemoryEntityService(), new MockBuildService(), + new MemoryNameService(), new ArtifactRepositoryMock(), new ApplicationStoreMock(), new MockBuildService(), metricsService, new RoutingGeneratorMock(), new MockContactRetriever(), new MockIssueHandler(clock)); } @@ -122,8 +119,7 @@ public final class ControllerTester { ConfigServerMock configServer, ZoneRegistryMock zoneRegistry, GitHubMock gitHub, CuratorDb curator, RotationsConfig rotationsConfig, MemoryNameService nameService, ArtifactRepositoryMock artifactRepository, - ApplicationStoreMock appStoreMock, - EntityService entityService, MockBuildService buildService, + ApplicationStoreMock appStoreMock, MockBuildService buildService, MetricsServiceMock metricsService, RoutingGeneratorMock routingGenerator, MockContactRetriever contactRetriever, MockIssueHandler issueHandler) { this.athenzDb = athenzDb; @@ -136,13 +132,12 @@ public final class ControllerTester { this.rotationsConfig = rotationsConfig; this.artifactRepository = artifactRepository; this.applicationStore = appStoreMock; - this.entityService = entityService; this.buildService = buildService; this.metricsService = metricsService; this.routingGenerator = routingGenerator; this.contactRetriever = contactRetriever; this.controller = createController(curator, rotationsConfig, configServer, clock, gitHub, zoneRegistry, - athenzDb, nameService, artifactRepository, appStoreMock, entityService, buildService, + athenzDb, nameService, artifactRepository, appStoreMock, buildService, metricsService, routingGenerator); // Make root logger use time from manual clock @@ -196,7 +191,7 @@ public final class ControllerTester { /** Create a new controller instance. Useful to verify that controller state is rebuilt from persistence */ public final void createNewController() { controller = createController(curator, rotationsConfig, configServer, clock, gitHub, zoneRegistry, athenzDb, - nameService, artifactRepository, applicationStore, entityService, buildService, metricsService, + nameService, artifactRepository, applicationStore, buildService, metricsService, routingGenerator); } @@ -331,13 +326,11 @@ public final class ControllerTester { GitHubMock gitHub, ZoneRegistryMock zoneRegistryMock, AthenzDbMock athensDb, MemoryNameService nameService, ArtifactRepository artifactRepository, ApplicationStore applicationStore, - EntityService entityService, BuildService buildService, MetricsServiceMock metricsService, RoutingGenerator routingGenerator) { Controller controller = new Controller(curator, rotationsConfig, gitHub, - entityService, zoneRegistryMock, configServer, metricsService, diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index 57a05e602cc..26cf9c3127e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -139,9 +139,6 @@ public class ApplicationApiTest extends ControllerContainerTest { // GET API root tester.assertResponse(request("/application/v4/", GET).userIdentity(USER_ID), new File("root.json")); - // GET OpsDB properties - tester.assertResponse(request("/application/v4/property/", GET).userIdentity(USER_ID), - new File("property-list.json")); // POST (add) a tenant without property ID tester.assertResponse(request("/application/v4/tenant/tenant1", POST) .userIdentity(USER_ID) diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/AthenzApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/AthenzApiTest.java deleted file mode 100644 index fc73590e448..00000000000 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/AthenzApiTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.yahoo.vespa.hosted.controller.restapi.application; - -import com.yahoo.vespa.athenz.api.AthenzDomain; -import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzClientFactoryMock; -import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzDbMock; -import com.yahoo.vespa.hosted.controller.restapi.ContainerControllerTester; -import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; -import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; -import org.junit.Test; - -import java.io.File; - -/** - * @author jonmv - */ -public class AthenzApiTest extends ControllerContainerTest { - - private static final String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/"; - - @Test - public void testAthenzApi() { - ContainerTester tester = new ContainerControllerTester(container, responseFiles).containerTester(); - ((AthenzClientFactoryMock) tester.container().components().getComponent(AthenzClientFactoryMock.class.getName())) - .getSetup().addDomain(new AthenzDbMock.Domain(new AthenzDomain("domain1"))); - - tester.assertResponse(authenticatedRequest("http://localhost:8080/athenz/v1/domains"), - new File("athensDomain-list.json")); - tester.assertResponse(authenticatedRequest("http://localhost:8080/athenz/v1/"), - "{\"error-code\":\"NOT_FOUND\",\"message\":\"No 'GET' handler at '/athenz/v1/'\"}", - 404); - } - -} - diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/athensDomain-list.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/athensDomain-list.json deleted file mode 100644 index 3a1cc9c6582..00000000000 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/athensDomain-list.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "data": [ - "domain1" - ] -} \ No newline at end of file diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/property-list.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/property-list.json deleted file mode 100644 index 596dea037bd..00000000000 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/property-list.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "properties": [ - {"propertyid": "1234", "property": "foo"}, - {"propertyid": "4321", "property": "bar"} - ] -} diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/root.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/root.json index 38b54dd9efa..986245decca 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/root.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/root.json @@ -5,9 +5,6 @@ }, { "url":"http://localhost:8080/application/v4/tenant/" - }, - { - "url":"http://localhost:8080/application/v4/property/" } ] } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiTest.java new file mode 100644 index 00000000000..61bcafbf126 --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiTest.java @@ -0,0 +1,41 @@ +package com.yahoo.vespa.hosted.controller.restapi.athenz; + +import com.yahoo.vespa.athenz.api.AthenzDomain; +import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzClientFactoryMock; +import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzDbMock; +import com.yahoo.vespa.hosted.controller.restapi.ContainerControllerTester; +import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; +import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; +import org.junit.Test; + +import java.io.File; + +/** + * @author jonmv + */ +public class AthenzApiTest extends ControllerContainerTest { + + private static final String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/"; + + @Test + public void testAthenzApi() { + ContainerTester tester = new ContainerControllerTester(container, responseFiles).containerTester(); + ((AthenzClientFactoryMock) tester.container().components().getComponent(AthenzClientFactoryMock.class.getName())) + .getSetup().addDomain(new AthenzDbMock.Domain(new AthenzDomain("domain1"))); + + // GET Athenz domains + tester.assertResponse(authenticatedRequest("http://localhost:8080/athenz/v1/domains"), + new File("athensDomain-list.json")); + + // GET root — nothing set up there + tester.assertResponse(authenticatedRequest("http://localhost:8080/athenz/v1/"), + "{\"error-code\":\"NOT_FOUND\",\"message\":\"No 'GET' handler at '/athenz/v1/'\"}", + 404); + + // GET OpsDB properties + tester.assertResponse(authenticatedRequest("http://localhost:8080/athenz/v1/properties/"), + new File("property-list.json")); + } + +} + diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/athensDomain-list.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/athensDomain-list.json new file mode 100644 index 00000000000..3a1cc9c6582 --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/athensDomain-list.json @@ -0,0 +1,5 @@ +{ + "data": [ + "domain1" + ] +} \ No newline at end of file diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/property-list.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/property-list.json new file mode 100644 index 00000000000..596dea037bd --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/property-list.json @@ -0,0 +1,6 @@ +{ + "properties": [ + {"propertyid": "1234", "property": "foo"}, + {"propertyid": "4321", "property": "bar"} + ] +} -- cgit v1.2.3