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

import com.yahoo.vespa.model.VespaModel;
import com.yahoo.vespa.model.container.docproc.DocprocChain;
import com.yahoo.vespa.model.container.processing.ProcessingChain;
import com.yahoo.vespa.model.container.search.searchchain.SearchChain;
import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithFilePkg;
import org.junit.jupiter.api.Test;

import java.util.HashMap;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.*;

/**
 * @author Einar M R Rosenvinge
 * @since 5.1.13
 */
public class ContainerIncludeTest {

    @Test
    void include() {
        VespaModelCreatorWithFilePkg creator = new VespaModelCreatorWithFilePkg("src/test/cfg/container/data/containerinclude/");
        VespaModel model = creator.create();

        assertEquals(1, model.getContainerClusters().size());
        ContainerCluster cluster = model.getContainerClusters().values().iterator().next();

        assertNotNull(cluster.getSearchChains());

        Map<String, SearchChain> searchChainMap = new HashMap<>();
        for (SearchChain searchChain : cluster.getSearchChains().allChains().allComponents()) {
            searchChainMap.put(searchChain.getId().stringValue(), searchChain);
        }
        assertNotNull(searchChainMap.get("searchchain1"));
        assertEquals(1, searchChainMap.get("searchchain1").getInnerComponents().size());
        assertEquals("com.yahoo.Searcher1", searchChainMap.get("searchchain1").getInnerComponents().iterator().next().getComponentId().stringValue());

        assertNotNull(searchChainMap.get("searchchain2"));
        assertEquals(1, searchChainMap.get("searchchain2").getInnerComponents().size());
        assertEquals("com.yahoo.Searcher2", searchChainMap.get("searchchain2").getInnerComponents().iterator().next().getComponentId().stringValue());

        assertNotNull(searchChainMap.get("searchchain3"));
        assertEquals(1, searchChainMap.get("searchchain3").getInnerComponents().size());
        assertEquals("com.yahoo.Searcher3", searchChainMap.get("searchchain3").getInnerComponents().iterator().next().getComponentId().stringValue());

        assertNotNull(searchChainMap.get("searchchain4"));
        assertEquals(1, searchChainMap.get("searchchain4").getInnerComponents().size());
        assertEquals("com.yahoo.Searcher4", searchChainMap.get("searchchain4").getInnerComponents().iterator().next().getComponentId().stringValue());


        assertNotNull(cluster.getDocprocChains());

        Map<String, DocprocChain> docprocChainMap = new HashMap<>();
        for (DocprocChain docprocChain : cluster.getDocprocChains().allChains().allComponents()) {
            docprocChainMap.put(docprocChain.getId().stringValue(), docprocChain);
        }

        assertNotNull(docprocChainMap.get("docprocchain1"));
        assertEquals(1, docprocChainMap.get("docprocchain1").getInnerComponents().size());
        assertEquals("com.yahoo.DocumentProcessor1", docprocChainMap.get("docprocchain1").getInnerComponents().iterator().next().getComponentId().stringValue());

        assertNotNull(docprocChainMap.get("docprocchain2"));
        assertEquals(1, docprocChainMap.get("docprocchain2").getInnerComponents().size());
        assertEquals("com.yahoo.DocumentProcessor2", docprocChainMap.get("docprocchain2").getInnerComponents().iterator().next().getComponentId().stringValue());


        assertNotNull(cluster.getProcessingChains());

        Map<String, ProcessingChain> processingChainMap = new HashMap<>();
        for (ProcessingChain processingChain : cluster.getProcessingChains().allChains().allComponents()) {
            processingChainMap.put(processingChain.getId().stringValue(), processingChain);
        }

        assertNotNull(processingChainMap.get("processingchain1"));
        assertEquals(1, processingChainMap.get("processingchain1").getInnerComponents().size());
        assertEquals("com.yahoo.Processor1", processingChainMap.get("processingchain1").getInnerComponents().iterator().next().getComponentId().stringValue());

        assertNotNull(processingChainMap.get("processingchain2"));
        assertEquals(1, processingChainMap.get("processingchain2").getInnerComponents().size());
        assertEquals("com.yahoo.Processor2", processingChainMap.get("processingchain2").getInnerComponents().iterator().next().getComponentId().stringValue());
    }

    @Test
    void includeNonExistent() {
        assertThrows(IllegalArgumentException.class, () -> {
            VespaModelCreatorWithFilePkg creator = new VespaModelCreatorWithFilePkg("src/test/cfg/container/data/containerinclude2/");
            creator.create();
        });
    }

    @Test
    void includeAbsolutePath() {
        assertThrows(IllegalArgumentException.class, () -> {
            VespaModelCreatorWithFilePkg creator = new VespaModelCreatorWithFilePkg("src/test/cfg/container/data/containerinclude3/");
            creator.create();
        });
    }

    @Test
    void includeNonDirectory() {
        assertThrows(IllegalArgumentException.class, () -> {
            VespaModelCreatorWithFilePkg creator = new VespaModelCreatorWithFilePkg("src/test/cfg/container/data/containerinclude4/");
            creator.create();
        });
    }

    @Test
    void include_file_with_wrong_root_element_name() {
        assertThrows(IllegalArgumentException.class, () -> {
            VespaModelCreatorWithFilePkg creator = new VespaModelCreatorWithFilePkg("src/test/cfg/container/data/containerinclude5/");
            creator.create();
        });
    }

    @Test
    void include_empty_directory() {
        VespaModelCreatorWithFilePkg creator = new VespaModelCreatorWithFilePkg("src/test/cfg/container/data/containerinclude6/");
        creator.create();
    }

    @Test
    void included_file_with_xml_schema_violation() {
        try {
            VespaModelCreatorWithFilePkg creator = new VespaModelCreatorWithFilePkg("src/test/cfg/container/data/include_xml_error/");
            creator.create(true);
            fail("Expected exception due to xml schema violation ('zearcer')");
        } catch (IllegalArgumentException e) {
            assertTrue(e.getMessage().contains("Invalid XML according to XML schema"));
            assertTrue(e.getMessage().contains("zearcer"));
        }
    }

}