aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-04-05 12:59:23 +0200
committerMartin Polden <mpolden@mpolden.no>2018-04-06 09:32:44 +0200
commitf450bfea2e0187278f9e44a53174a757cff8b267 (patch)
tree925fc2a05786c31eb205fb9802690d7045f0cc21 /controller-server
parent607815525c0b691a209b28c34a20fa3a815d6682 (diff)
Add TenantSerializer
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java62
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java56
2 files changed, 118 insertions, 0 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java
new file mode 100644
index 00000000000..d55dc791462
--- /dev/null
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java
@@ -0,0 +1,62 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.persistence;
+
+
+import com.yahoo.config.provision.TenantName;
+import com.yahoo.slime.Cursor;
+import com.yahoo.slime.Inspector;
+import com.yahoo.slime.Slime;
+import com.yahoo.vespa.athenz.api.AthenzDomain;
+import com.yahoo.vespa.config.SlimeUtils;
+import com.yahoo.vespa.hosted.controller.api.identifiers.Property;
+import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId;
+import com.yahoo.vespa.hosted.controller.tenant.AthenzTenant;
+import com.yahoo.vespa.hosted.controller.tenant.UserTenant;
+
+import java.util.Optional;
+
+/**
+ * Slime serialization of tenants.
+ *
+ * @author mpolden
+ */
+public class TenantSerializer {
+
+ private static final String nameField = "name";
+ private static final String athenzDomainField = "athenzDomain";
+ private static final String propertyField = "property";
+ private static final String propertyIdField = "propertyId";
+
+ public Slime toSlime(AthenzTenant tenant) {
+ Slime slime = new Slime();
+ Cursor root = slime.setObject();
+ root.setString(nameField, tenant.name().value());
+ root.setString(athenzDomainField, tenant.domain().getName());
+ root.setString(propertyField, tenant.property().id());
+ tenant.propertyId().ifPresent(propertyId -> root.setString(propertyIdField, propertyId.id()));
+ return slime;
+ }
+
+ public Slime toSlime(UserTenant tenant) {
+ Slime slime = new Slime();
+ Cursor root = slime.setObject();
+ root.setString(nameField, tenant.name().value());
+ return slime;
+ }
+
+ public AthenzTenant athenzTenantFrom(Slime slime) {
+ Inspector root = slime.get();
+ TenantName name = TenantName.from(root.field(nameField).asString());
+ AthenzDomain domain = new AthenzDomain(root.field(athenzDomainField).asString());
+ Property property = new Property(root.field(propertyField).asString());
+ Optional<PropertyId> propertyId = SlimeUtils.optionalString(root.field(propertyIdField)).map(PropertyId::new);
+ return new AthenzTenant(name, domain, property, propertyId);
+ }
+
+ public UserTenant userTenantFrom(Slime slime) {
+ Inspector root = slime.get();
+ TenantName name = TenantName.from(root.field(nameField).asString());
+ return new UserTenant(name);
+ }
+
+}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java
new file mode 100644
index 00000000000..fd909482072
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java
@@ -0,0 +1,56 @@
+package com.yahoo.vespa.hosted.controller.persistence;// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+import com.yahoo.config.provision.TenantName;
+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.tenant.AthenzTenant;
+import com.yahoo.vespa.hosted.controller.tenant.UserTenant;
+import org.junit.Test;
+
+import java.util.Optional;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author mpolden
+ */
+public class TenantSerializerTest {
+
+ private static final TenantSerializer serializer = new TenantSerializer();
+
+ @Test
+ public void athenz_tenant() {
+ AthenzTenant tenant = AthenzTenant.create(TenantName.from("athenz-tenant"),
+ new AthenzDomain("domain1"),
+ new Property("property1"),
+ Optional.of(new PropertyId("1")));
+ AthenzTenant serialized = serializer.athenzTenantFrom(serializer.toSlime(tenant));
+ assertEquals(tenant.name(), serialized.name());
+ assertEquals(tenant.domain(), serialized.domain());
+ assertEquals(tenant.property(), serialized.property());
+ assertTrue(serialized.propertyId().isPresent());
+ assertEquals(tenant.propertyId(), serialized.propertyId());
+ }
+
+ @Test
+ public void athenz_tenant_without_property_id() {
+ AthenzTenant tenant = AthenzTenant.create(TenantName.from("athenz-tenant"),
+ new AthenzDomain("domain1"),
+ new Property("property1"),
+ Optional.empty());
+ AthenzTenant serialized = serializer.athenzTenantFrom(serializer.toSlime(tenant));
+ assertFalse(serialized.propertyId().isPresent());
+ assertEquals(tenant.propertyId(), serialized.propertyId());
+ }
+
+ @Test
+ public void user_tenant() {
+ UserTenant tenant = UserTenant.create("by-foo");
+ UserTenant serialized = serializer.userTenantFrom(serializer.toSlime(tenant));
+ assertEquals(tenant.name(), serialized.name());
+ }
+
+}