diff --git a/src/main/java/no/fintlabs/operator/NameFactory.java b/src/main/java/no/fintlabs/operator/NameFactory.java index 2ead677..26255fc 100644 --- a/src/main/java/no/fintlabs/operator/NameFactory.java +++ b/src/main/java/no/fintlabs/operator/NameFactory.java @@ -2,13 +2,28 @@ import io.fabric8.kubernetes.api.model.HasMetadata; +import java.util.UUID; + public class NameFactory { - public static String nameFromMetadata(HasMetadata metadata) { + public static String legacyNameFromMetadata(HasMetadata metadata) { return String.format("%s_%s_%s", metadata.getMetadata().getLabels().get("fintlabs.no/org-id").replace(".", "-"), metadata.getMetadata().getLabels().get("fintlabs.no/team"), metadata.getMetadata().getName() ); } + + public static String guidNameFromMetadata() { + return UUID.randomUUID().toString(); + } + + public static String nameFromMetadata(HasMetadata metadata) { + String useGuid = metadata.getMetadata().getLabels().get("fintlabs.no/use-guid"); + if ("true".equalsIgnoreCase(useGuid)) { + return guidNameFromMetadata(); + } else { + return legacyNameFromMetadata(metadata); + } + } } diff --git a/src/test/groovy/no/fintlabs/operator/NameFactorySpec.groovy b/src/test/groovy/no/fintlabs/operator/NameFactorySpec.groovy index d03f872..bef988d 100644 --- a/src/test/groovy/no/fintlabs/operator/NameFactorySpec.groovy +++ b/src/test/groovy/no/fintlabs/operator/NameFactorySpec.groovy @@ -4,17 +4,53 @@ import spock.lang.Specification class NameFactorySpec extends Specification { - def "Name should contain orgId and team"() { + def "Legacy should include orgId, team and name"() { given: def crd = new KafkaUserAndAclCrd() - crd.getMetadata().getLabels().put("fintlabs.no/team", "flais") + crd.getMetadata().getLabels().put("fintlabs.no/team", "test-team") crd.getMetadata().getLabels().put("fintlabs.no/org-id", "flais.io") crd.getMetadata().setName("fint-data-service") + when: + def name = NameFactory.legacyNameFromMetadata(crd) + + then: + name.equals("flais-io_test-team_fint-data-service") + } + + def "guidNameFromMetadata should return valid UUID format"() { + when: + def guid = NameFactory.guidNameFromMetadata() + + then: + guid.matches(/[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/) + guid.length() <= 64 + } + + def "nameFromMetadata should return GUID name is use-guid is set to true"() { + given: + def crd = new KafkaUserAndAclCrd() + crd.getMetadata().getLabels().put("fintlabs.no/use-guid", "true") + + when: + def name = NameFactory.nameFromMetadata(crd) + + then: + name.matches(/[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/) + } + + def "nameFromMetadata should return legacy name if use-guid is not true"() { + given: + def crd = new KafkaUserAndAclCrd() + crd.getMetadata().getLabels().put("fintlabs.no/team", "test-team") + crd.getMetadata().getLabels().put("fintlabs.no/org-id", "flais.io") + crd.getMetadata().getLabels().put("fintlabs.no/use-guid", "false") + crd.getMetadata().setName("fint-data-service") + when: def name = NameFactory.nameFromMetadata(crd) then: - name == "flais-io_flais_fint-data-service" + name.equals("flais-io_test-team_fint-data-service") } }