Add external tls info to bpgenerator and component spec schema
[dcaegen2/platform.git] / mod / bpgenerator / src / test / java / org / onap / blueprintgenerator / core / TlsInfoTest.java
1 /**============LICENSE_START=======================================================
2  org.onap.dcae
3  ================================================================================
4  Copyright (c) 2020 Nokia. All rights reserved.
5  ================================================================================
6  Licensed under the Apache License, Version 2.0 (the "License");
7  you may not use this file except in compliance with the License.
8  You may obtain a copy of the License at
9
10  http://www.apache.org/licenses/LICENSE-2.0
11
12  Unless required by applicable law or agreed to in writing, software
13  distributed under the License is distributed on an "AS IS" BASIS,
14  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  See the License for the specific language governing permissions and
16  limitations under the License.
17  ============LICENSE_END=========================================================
18  */
19
20 package org.onap.blueprintgenerator.core;
21
22 import org.junit.Test;
23 import org.junit.runner.RunWith;
24 import org.junit.runners.Parameterized;
25 import org.onap.blueprintgenerator.models.blueprint.Blueprint;
26 import org.onap.blueprintgenerator.models.blueprint.ExternalTlsInfo;
27 import org.onap.blueprintgenerator.models.blueprint.Node;
28 import org.onap.blueprintgenerator.models.blueprint.TlsInfo;
29 import org.onap.blueprintgenerator.models.componentspec.ComponentSpec;
30
31 import java.util.Arrays;
32 import java.util.LinkedHashMap;
33 import java.util.List;
34
35 import static org.junit.Assert.assertEquals;
36 import static org.junit.Assert.assertFalse;
37 import static org.junit.Assert.assertNotNull;
38 import static org.junit.Assert.assertNull;
39
40 @RunWith(Parameterized.class)
41 public class TlsInfoTest {
42
43         @Parameterized.Parameter
44         public char bpType;
45
46         @Parameterized.Parameters(name = "Blueprint type: {0}")
47         public static List<Character> data() {
48                 return Arrays.asList('o', 'd');
49         }
50
51         @Test
52         public void useTlsTrueAndUseExternalTlsTrueTest(){
53                 Blueprint bp = createBlueprintFromFile("TestCases/TlsInfo/testComponentSpec_withTlsTrueAndExternalTlsTrue.json");
54
55                 assertBlueprintContainsExternalTlsInfoWithUseFlagDefault(bp, true);
56                 assertBlueprintContainsTlsInfoWithUseFlagDefault(bp, true);
57         }
58
59         @Test
60         public void useTlsFalseAndUseExternalTlsFalseTest(){
61                 Blueprint bp = createBlueprintFromFile("TestCases/TlsInfo/testComponentSpec_withTlsFalseAndExternalTlsFalse.json");
62
63                 assertBlueprintContainsExternalTlsInfoWithUseFlagDefault(bp, false);
64                 assertBlueprintContainsTlsInfoWithUseFlagDefault(bp, false);
65         }
66
67         @Test
68         public void useTlsTrueAndNoExternalTlsFlagTest(){
69                 Blueprint bp = createBlueprintFromFile("TestCases/TlsInfo/testComponentSpec_withTlsTrueAndNoExternalTls.json");
70
71                 assertBlueprintContainsTlsInfoWithUseFlagDefault(bp, true);
72                 assertBlueprintHasNoExternalTlsInfo(bp);
73         }
74
75         @Test
76         public void noTlsInfo(){
77                 Blueprint bp = createBlueprintFromFile("TestCases/TlsInfo/testComponentSpec_withoutTlsInfo.json");
78
79                 assertBlueprintHasNoTlsInfo(bp);
80                 assertBlueprintHasNoExternalTlsInfo(bp);
81         }
82
83         private void assertBlueprintContainsExternalTlsInfoWithUseFlagDefault(Blueprint bp, boolean useFlagDefault) {
84                 //should create proper inputs
85                 assertContainsInputWithDefault(bp, "external_cert_use_external_tls", useFlagDefault);
86                 assertContainsInputWithDefault(bp, "external_cert_ca_name", "\"RA\"");
87                 assertContainsInputWithDefault(bp, "external_cert_cert_type", "\"P12\"");
88                 assertContainsInputWithDefault(bp, "external_cert_common_name", "\"sample.onap.org\"");
89                 assertContainsInputWithDefault(bp, "external_cert_sans",
90                                 "\"sample.onap.org:component.sample.onap.org\"");
91
92                 Node node = bp.getNode_templates().get("test.component.spec");
93
94                 //should create proper externalTlsInfo object in node properties
95                 ExternalTlsInfo externalTlsInfo = node.getProperties().getExternal_cert();
96                 assertNotNull(externalTlsInfo);
97
98                 assertEquals("external_cert_ca_name", externalTlsInfo.getCaName().getGet_input());
99                 assertEquals("external_cert_cert_type", externalTlsInfo.getCertType().getGet_input());
100                 assertEquals("external_cert_use_external_tls", externalTlsInfo.getUseExternalTls().getGet_input());
101                 assertEquals("/opt/app/dcae-certificate/", externalTlsInfo.getExternalCertDirectory());
102
103                 ExternalTlsInfo.ExternalCertificateParameters extCertParams = externalTlsInfo.getExternalCertificateParameters();
104                 assertNotNull(extCertParams);
105
106                 assertEquals("external_cert_common_name", extCertParams.getCommonName().getGet_input());
107                 assertEquals("external_cert_sans", extCertParams.getSans().getGet_input());
108         }
109
110         private void assertBlueprintContainsTlsInfoWithUseFlagDefault(Blueprint bp, boolean useFlagDefault) {
111                 //shold create proper inputs
112                 assertContainsInputWithDefault(bp, "use_tls", useFlagDefault);
113
114                 Node node = bp.getNode_templates().get("test.component.spec");
115
116                 //should create proper tlsInfo object in node properties
117                 TlsInfo tlsInfo = node.getProperties().getTls_info();
118                 assertEquals("use_tls", tlsInfo.getUseTls().getGet_input());
119                 assertEquals("/opt/app/dcae-certificate/", tlsInfo.getCertDirectory());
120
121         }
122
123         private void assertBlueprintHasNoExternalTlsInfo(Blueprint bp) {
124                 //should not create inputs for external tls
125                 assertFalse(bp.getInputs().containsKey("external_cert_use_external_tls"));
126                 assertFalse(bp.getInputs().containsKey("external_cert_common_name"));
127                 assertFalse(bp.getInputs().containsKey("external_cert_ca_name"));
128                 assertFalse(bp.getInputs().containsKey("external_cert_sans"));
129
130                 Node node = bp.getNode_templates().get("test.component.spec");
131
132                 //should not create externalTlsInfo object in node properties
133                 ExternalTlsInfo externalTlsInfo = node.getProperties().getExternal_cert();
134                 assertNull(externalTlsInfo);
135         }
136
137
138         private void assertBlueprintHasNoTlsInfo(Blueprint bp) {
139                 //should not create inputs for tls
140                 assertFalse(bp.getInputs().containsKey("use_tls"));
141
142                 Node node = bp.getNode_templates().get("test.component.spec");
143
144                 //should not create tlsInfo object in node properties
145                 assertNull(node.getProperties().getTls_info());
146         }
147
148         private void assertContainsInputWithDefault(Blueprint bp, String inputName, Object defaultValue) {
149                 LinkedHashMap<String, Object> input = bp.getInputs().get(inputName);
150                 assertNotNull(input);
151                 assertEquals(defaultValue, input.get("default"));
152         }
153
154         private Blueprint createBlueprintFromFile(String path) {
155                 ComponentSpec cs = new ComponentSpec();
156                 cs.createComponentSpecFromFile(path);
157
158                 Blueprint bp = new Blueprint();
159                 bp = bp.createBlueprint(cs, "", this.bpType, "", "");
160                 return bp;
161         }
162 }