aboutsummaryrefslogtreecommitdiffstats
path: root/config-provisioning/src/test/java/com/yahoo/config/provision/ApplicationIdTest.java
blob: c4896a8d78bff7ffb34c10ab238484965c18c722 (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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;

import com.yahoo.cloud.config.ApplicationIdConfig;
import com.yahoo.test.TotalOrderTester;
import org.junit.jupiter.api.Test;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static com.yahoo.config.provision.ApplicationId.from;
import static com.yahoo.config.provision.ApplicationId.global;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;

/**
 * @author Ulf Lilleengen
 * @author vegard
 */
public class ApplicationIdTest {

    @Test
    void require_that_application_id_is_set() {
        ApplicationId app = applicationId("application");
        assertEquals("application", app.application().value());
        app = from("tenant", "application", "instance");
        assertEquals("tenant", app.tenant().value());
        assertEquals("application", app.application().value());
        assertEquals("instance", app.instance().value());
    }

    @Test
    void require_that_equals_and_hashcode_behaves_correctly() {
        assertEquals(Set.of(from("tenant1", "name1", "instance1"),
                                                      from("tenant2", "name1", "instance1"),
                                                      from("tenant1", "name2", "instance1"),
                                                      from("tenant1", "name1", "instance2"),
                                                      applicationId("name1"),
                                                      applicationId("name2")),
                               new HashSet<>(List.of(from("tenant1", "name1", "instance1"),
                                                      from("tenant2", "name1", "instance1"),
                                                      from("tenant1", "name2", "instance1"),
                                                      from("tenant1", "name1", "instance2"),
                                                      applicationId("name1"),
                                                      applicationId("name2"))));
    }

    @Test
    void require_that_value_format_is_correct() {
        ApplicationId id1 = applicationId("foo");
        ApplicationId id2 = applicationId("bar");
        ApplicationId id3 = from("tenant", "baz", "bim");
        assertEquals("default:foo:default", id1.serializedForm());
        assertEquals("default:bar:default", id2.serializedForm());
        assertEquals("tenant:baz:bim", id3.serializedForm());
    }

    @Test
    void require_string_formats_are_correct() {
        ApplicationId id1 = applicationId("foo");
        ApplicationId id2 = from("bar", "baz", "default");
        ApplicationId id3 = from("tenant", "baz", "bim");
        assertEquals("default.foo", id1.toShortString());
        assertEquals("default.foo.default", id1.toFullString());
        assertEquals("bar.baz", id2.toShortString());
        assertEquals("bar.baz.default", id2.toFullString());
        assertEquals("tenant.baz.bim", id3.toShortString());
        assertEquals("tenant.baz.bim", id3.toFullString());
    }

    @Test
    void require_that_idstring_can_be_parsed() {
        ApplicationId id = ApplicationId.fromSerializedForm("ten:foo:bim");
        assertEquals("ten", id.tenant().value());
        assertEquals("foo", id.application().value());
        assertEquals("bim", id.instance().value());
    }

    @Test
    void require_that_invalid_idstring_throws_exception() {
        var e = assertThrows(IllegalArgumentException.class, () -> ApplicationId.fromSerializedForm("foo:baz"));
        assertEquals("Application ids must be on the form tenant:application:instance, but was foo:baz", e.getMessage());

        e = assertThrows(IllegalArgumentException.class, () -> ApplicationId.fromFullString("foo.baz"));
        assertEquals("Application ids must be on the form tenant.application.instance, but was foo.baz", e.getMessage());

        e = assertThrows(IllegalArgumentException.class, () -> ApplicationId.fromSerializedForm("foo:baz:bar:xyzzy"));
        assertEquals("Application ids must be on the form tenant:application:instance, but was foo:baz:bar:xyzzy", e.getMessage());

        e = assertThrows(IllegalArgumentException.class, () -> ApplicationId.fromFullString("foo.baz.bar.xyzzy"));
        assertEquals("Application ids must be on the form tenant.application.instance, but was foo.baz.bar.xyzzy", e.getMessage());
    }

    @Test
    void require_that_defaults_are_given() {
        ApplicationId id1 = applicationId("foo");
        assertEquals("default", id1.tenant().value());
        assertEquals("default", id1.instance().value());
    }

    @Test
    void require_that_compare_to_is_correct() {
        new TotalOrderTester<ApplicationId>()
                               .theseObjects(from("tenant1", "name1", "instance1"),
                                                      from("tenant1", "name1", "instance1"))
                               .areLessThan(from("tenant2", "name1", "instance1"))
                               .areLessThan(from("tenant2", "name2", "instance1"))
                               .areLessThan(from("tenant2", "name2", "instance2"))
                               .testOrdering();
    }

    @Test
    void require_that_instance_from_config_is_correct() {
        ApplicationIdConfig.Builder builder = new ApplicationIdConfig.Builder();
        builder.tenant("a");
        builder.application("b");
        builder.instance("c");
        ApplicationId applicationId = from(new ApplicationIdConfig(builder));
        assertEquals("a", applicationId.tenant().value());
        assertEquals("b", applicationId.application().value());
        assertEquals("c", applicationId.instance().value());
    }

    @Test
    void require_that_global_is_special() {
        assertEquals(global(), global());
        assertNotEquals(global(), from("hosted-vespa", "routing", "default"));
        assertEquals(global().serializedForm(), from("hosted-vespa", "routing", "default").serializedForm());
    }

    private ApplicationId applicationId(String applicationName) {
        return from(TenantName.defaultName(), ApplicationName.from(applicationName), InstanceName.defaultName());
    }

}