aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/test/java/com/yahoo/config/model/deploy/DeployStateTest.java
blob: 64870ff8e499eca3ddba7029b59c3fd4000c49c0 (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
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.model.deploy;

import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.model.api.ApplicationClusterEndpoint;
import com.yahoo.config.model.api.ConfigDefinitionRepo;
import com.yahoo.config.model.api.ContainerEndpoint;
import com.yahoo.config.model.api.HostProvisioner;
import com.yahoo.config.model.api.ModelContext;
import com.yahoo.config.model.application.provider.FilesApplicationPackage;
import com.yahoo.config.model.provision.InMemoryProvisioner;
import com.yahoo.config.model.test.MockApplicationPackage;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.vespa.config.ConfigDefinition;
import com.yahoo.vespa.config.ConfigDefinitionKey;
import com.yahoo.vespa.model.VespaModel;
import org.junit.Test;
import org.xml.sax.SAXException;

import java.io.File;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

/**
 * @author Ulf Lilleengen
 */
public class DeployStateTest {

    @Test
    public void testProvisionerIsSet() {
        DeployState.Builder builder = new DeployState.Builder();
        HostProvisioner provisioner = new InMemoryProvisioner(true, false, "foo.yahoo.com");
        builder.modelHostProvisioner(provisioner);
        DeployState state = builder.build();
        assertEquals(provisioner, state.getProvisioner());
    }

    @Test
    public void testBuilder() {
        DeployState.Builder builder = new DeployState.Builder();
        ApplicationPackage app = MockApplicationPackage.createEmpty();
        builder.permanentApplicationPackage(Optional.of(app));
        DeployState state = builder.build();
        assertEquals(app, state.getPermanentApplicationPackage().get());
    }

    @Test
    public void testPreviousModelIsProvided() throws IOException, SAXException {
        VespaModel prevModel = new VespaModel(MockApplicationPackage.createEmpty());
        DeployState.Builder builder = new DeployState.Builder();
        assertEquals(prevModel, builder.previousModel(prevModel).build().getPreviousModel().get());
    }

    @Test
    public void testProperties() {
        DeployState.Builder builder = new DeployState.Builder();
        DeployState state = builder.build();
        assertEquals(ApplicationId.defaultId(), state.getProperties().applicationId());
        ApplicationId customId = new ApplicationId.Builder()
                                 .tenant("bar")
                                 .applicationName("foo").instanceName("quux").build();
        ModelContext.Properties properties = new TestProperties().setApplicationId(customId);
        builder.properties(properties);
        state = builder.build();
        assertEquals(customId, state.getProperties().applicationId());
    }

    @Test
    public void testDefinitionRepoIsUsed() {
        Map<ConfigDefinitionKey, com.yahoo.vespa.config.buildergen.ConfigDefinition> defs = new LinkedHashMap<>();
        defs.put(new ConfigDefinitionKey("foo", "bar"), new com.yahoo.vespa.config.buildergen.ConfigDefinition("foo", new String[]{"namespace=bar", "foo int default=0"}));
        defs.put(new ConfigDefinitionKey("test2", "a.b"),
                 new com.yahoo.vespa.config.buildergen.ConfigDefinition("namespace-in-filename", new String[]{"namespace=a.b", "doubleVal double default=1.0"}));
        ApplicationPackage app = FilesApplicationPackage.fromFile(new File("src/test/cfg//application/app1"));
        DeployState state = createDeployState(app, defs);

        assertNotNull(state.getConfigDefinition(new ConfigDefinitionKey("foo", "bar")));
        ConfigDefinition overridden = state.getConfigDefinition(new ConfigDefinitionKey("namespace-in-filename", "a.b")).get();
        assertNotNull(overridden);
        Double defaultValue = overridden.getDoubleDefs().get("doubleVal").getDefVal();
        assertNotNull(defaultValue);
        assertEquals(0, defaultValue.intValue());
    }

    @Test
    public void testGetConfigDefinition() {
        Map<ConfigDefinitionKey, com.yahoo.vespa.config.buildergen.ConfigDefinition> defs = new LinkedHashMap<>();
        defs.put(new ConfigDefinitionKey("test2", "a.b"), new com.yahoo.vespa.config.buildergen.ConfigDefinition("test2", new String[]{"namespace=a.b", "doubleVal double default=1.0"}));
        //defs.put(new ConfigDefinitionKey("test2", "c.d"), new com.yahoo.vespa.config.buildergen.ConfigDefinition("test2", new String[]{"namespace=c.d", "doubleVal double default=1.0"}));
        defs.put(new ConfigDefinitionKey("test3", "xyzzy"), new com.yahoo.vespa.config.buildergen.ConfigDefinition("test3", new String[]{"namespace=xyzzy", "message string"}));
        ApplicationPackage app = FilesApplicationPackage.fromFile(new File("src/test/cfg//application/app1"));
        DeployState state = createDeployState(app, defs);

        assertNotNull(state.getConfigDefinition(new ConfigDefinitionKey("test2", "a.b")));

        ConfigDefinition test1 = state.getConfigDefinition(new ConfigDefinitionKey("test2", "a.b")).get();
        assertNotNull(test1);
        assertEquals("test2", test1.getName());
        assertEquals("a.b", test1.getNamespace());
    }

    @Test
    public void testContainerEndpoints() {
        assertTrue(new DeployState.Builder().endpoints(Set.of()).build().getEndpoints().isEmpty());
        var endpoints = Set.of(new ContainerEndpoint("c1", ApplicationClusterEndpoint.Scope.global, List.of("c1.example.com", "c1-alias.example.com")));
        assertEquals(endpoints, new DeployState.Builder().endpoints(endpoints).build().getEndpoints());
    }

    private DeployState createDeployState(ApplicationPackage app, Map<ConfigDefinitionKey, com.yahoo.vespa.config.buildergen.ConfigDefinition> defs) {
        DeployState.Builder builder = new DeployState.Builder().applicationPackage(app);
        builder.configDefinitionRepo(new ConfigDefinitionRepo() {
            @Override
            public Map<ConfigDefinitionKey, com.yahoo.vespa.config.buildergen.ConfigDefinition> getConfigDefinitions() {
                return defs;
            }
            @Override
            public com.yahoo.vespa.config.buildergen.ConfigDefinition get(ConfigDefinitionKey key) {
                return null;
            }
        });
        return builder.build();
    }

}