aboutsummaryrefslogtreecommitdiffstats
path: root/config-provisioning/src/test/java/com/yahoo/config/provision/CloudAccountTest.java
blob: c9230feaa6d2be24e86b778bb1a1287926768b0a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;

import org.junit.jupiter.api.Test;

import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;

/**
 * @author freva
 */
class CloudAccountTest {

    @Test
    void aws_accounts() {
        CloudAccount oldFormat = CloudAccount.from("123456789012");
        CloudAccount newFormat = CloudAccount.from("aws:123456789012");
        assertEquals(oldFormat, newFormat);

        for (CloudAccount account : List.of(oldFormat, newFormat)) {
            assertFalse(account.isUnspecified());
            assertEquals(account, CloudAccount.from(account.value()));
            assertEquals("123456789012", account.account());
            assertEquals(CloudName.AWS, account.cloudName());
            assertEquals("aws:123456789012", account.value());
        }
    }

    @Test
    void gcp_accounts() {
        CloudAccount oldFormat = CloudAccount.from("my-project");
        CloudAccount newFormat = CloudAccount.from("gcp:my-project");
        assertEquals(oldFormat, newFormat);

        for (CloudAccount account : List.of(oldFormat, newFormat)) {
            assertFalse(account.isUnspecified());
            assertEquals(account, CloudAccount.from(account.value()));
            assertEquals("my-project", account.account());
            assertEquals(CloudName.GCP, account.cloudName());
            assertEquals("gcp:my-project", account.value());
        }
    }

    @Test
    void default_accounts() {
        CloudAccount variant1 = CloudAccount.from("");
        CloudAccount variant2 = CloudAccount.from("default");
        assertEquals(variant1, variant2);

        for (CloudAccount account : List.of(variant1, variant2)) {
            assertTrue(account.isUnspecified());
            assertEquals(account, CloudAccount.from(account.value()));
            assertEquals("", account.account());
            assertEquals(CloudName.DEFAULT, account.cloudName());
            assertEquals("", account.value());
        }
    }

    @Test
    void invalid_accounts() {
        assertInvalidAccount("aws:123", "Invalid cloud account 'aws:123': Account ID must match '[0-9]{12}'");
        assertInvalidAccount("gcp:123", "Invalid cloud account 'gcp:123': Project ID must match '[a-z][a-z0-9-]{4,28}[a-z0-9]'");
        assertInvalidAccount("$something", "Invalid cloud account '$something': Must be on format '<cloud-name>:<account>' or 'default'");
        assertInvalidAccount("unknown:account", "Invalid cloud account 'unknown:account': Cloud name must be one of: aws, gcp");
    }

    private static void assertInvalidAccount(String account, String message) {
        IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> CloudAccount.from(account));
        assertEquals(message, exception.getMessage());
    }
}