diff options
author | Martin Polden <mpolden@mpolden.no> | 2018-04-05 12:59:23 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2018-04-06 09:32:44 +0200 |
commit | f450bfea2e0187278f9e44a53174a757cff8b267 (patch) | |
tree | 925fc2a05786c31eb205fb9802690d7045f0cc21 /controller-server | |
parent | 607815525c0b691a209b28c34a20fa3a815d6682 (diff) |
Add TenantSerializer
Diffstat (limited to 'controller-server')
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()); + } + +} |