2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.ccsdk.apps.ms.neng.core.gen;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.fail;
25 import static org.mockito.Matchers.anyObject;
26 import static org.mockito.Mockito.doAnswer;
27 import static org.mockito.Mockito.eq;
28 import static org.mockito.Mockito.mock;
29 import static org.mockito.Mockito.when;
31 import java.util.ArrayList;
32 import java.util.HashMap;
33 import java.util.List;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.junit.runner.RunWith;
38 import org.mockito.Mock;
39 import org.mockito.Mockito;
40 import org.mockito.invocation.InvocationOnMock;
41 import org.mockito.runners.MockitoJUnitRunner;
42 import org.mockito.stubbing.Answer;
43 import org.onap.ccsdk.apps.ms.neng.core.persistence.NamePersister;
44 import org.onap.ccsdk.apps.ms.neng.core.policy.FilePolicyReader;
45 import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyFinder;
46 import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyParameters;
47 import org.onap.ccsdk.apps.ms.neng.core.seq.SequenceGenerator;
48 import org.onap.ccsdk.apps.ms.neng.core.validator.AaiNameValidator;
49 import org.onap.ccsdk.apps.ms.neng.core.validator.DbNameValidator;
50 import org.onap.ccsdk.apps.ms.neng.persistence.entity.GeneratedName;
52 @RunWith(MockitoJUnitRunner.class)
53 public class NameGeneratorSeqGenErrorsTest {
55 private PolicyParameters policyParams = mock(PolicyParameters.class);
57 private PolicyFinder policyFinder = mock(PolicyFinder.class);
59 private SequenceGenerator sequenceGenerator = mock(SequenceGenerator.class);
61 private DbNameValidator dbValidator = mock(DbNameValidator.class);
63 private AaiNameValidator aaiValidator = mock(AaiNameValidator.class);
65 private NamePersister namePresister = mock(NamePersister.class);
66 private Map<String, Map<String, String>> earlierNames = new HashMap<>();
67 private Map<String, Map<String, ?>> policyCache = new HashMap<>();
69 protected Map<String, String> makeVmRequest(String policy) {
70 Map<String, String> requestElement = new HashMap<>();
71 requestElement.put("external-key", "923456");
72 requestElement.put("policy-instance-name", policy);
73 requestElement.put("naming-type", "VM");
74 requestElement.put("resource-name", "vm-name");
75 requestElement.put("complex", "abcdeasdf");
76 return requestElement;
79 protected Map<String, String> makeVnfRequest(String policy) {
80 Map<String, String> requestElement = new HashMap<>();
81 requestElement.put("external-key", "123456");
82 requestElement.put("policy-instance-name", policy);
83 requestElement.put("naming-type", "VNF");
84 requestElement.put("resource-name", "vnf-name");
85 requestElement.put("complex", "abcdeasdf");
86 return requestElement;
90 * Setup policy params.
93 public void setupPolicyParams() throws Exception {
94 Mockito.lenient().when(policyParams.mapFunction("substr")).thenReturn("substring");
95 Mockito.lenient().when(policyParams.mapFunction("to_lower_case")).thenReturn("toLowerCase");
96 Mockito.lenient().when(policyParams.mapFunction("to_upper_case")).thenReturn("toUpperCase");
101 public void someNamesRejectedByAai() throws Exception {
102 String policyName = "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy";
103 Map<String, String> requestElement2 = makeVmRequest(policyName);
104 List<Map<String, String>> allElements = new ArrayList<>();
105 allElements.add(requestElement2);
107 Map<String, Object> policy = new FilePolicyReader("vnf_and_vm_policy.json").getPolicy();
108 Mockito.lenient().when(policyParams.getMaxGenAttempt()).thenReturn(100);
109 Mockito.lenient().when(policyFinder.findPolicy(policyName)).thenReturn(policy);
111 Mockito.lenient().when(aaiValidator.validate(anyObject(), anyObject())).thenReturn(true);
112 Mockito.lenient().when(aaiValidator.validate(eq("VNF"), anyObject())).thenReturn(true);
113 Mockito.lenient().when(aaiValidator.validate(eq("VNF"), eq("abcde001ve1"))).thenReturn(false);
115 Mockito.lenient().when(dbValidator.validate(anyObject(), anyObject())).thenReturn(true);
116 Mockito.lenient().when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(1))).thenReturn(1L);
117 Mockito.lenient().when(sequenceGenerator.generate(eq("abcde"), anyObject(), anyObject(), anyObject(), eq(2))).thenReturn(2L);
119 final List<Object> savedNames = new ArrayList<>();
120 doAnswer(new Answer<Void>() {
122 public Void answer(InvocationOnMock invocation) throws Throwable {
123 savedNames.add(invocation.getArguments()[0]);
126 }).when(namePresister).persist(anyObject());
128 NameGenerator gen2 = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator,
129 namePresister, requestElement2, allElements, earlierNames, policyCache, new ArrayList<>());
131 Map<String, String> resp2 = gen2.generate();
132 assertEquals("vm-name", resp2.get("resource-name"));
133 assertEquals("923456", resp2.get("external-key"));
134 assertEquals("abcde002ve1mts001", resp2.get("resource-value"));
136 assertEquals(3, savedNames.size());
139 GeneratedName genName = (GeneratedName) savedNames.get(0);
140 assertEquals("abcde001ve1", genName.getName());
141 assertEquals("AAI-BACKPOPULATE", genName.getExternalId());
142 assertEquals("VNF", genName.getElementType());
143 assertEquals("abcde", genName.getPrefix());
144 assertEquals(1, genName.getSequenceNumber().longValue());
145 assertEquals("001", genName.getSequenceNumberEnc());
146 assertEquals("ve1", genName.getSuffix());
149 GeneratedName genName = (GeneratedName) savedNames.get(1);
150 assertEquals("abcde002ve1", genName.getName());
151 assertEquals(null, genName.getExternalId());
152 assertEquals("VNF", genName.getElementType());
153 assertEquals("abcde", genName.getPrefix());
154 assertEquals(2, genName.getSequenceNumber().longValue());
155 assertEquals("002", genName.getSequenceNumberEnc());
156 assertEquals("ve1", genName.getSuffix());
160 GeneratedName genName = (GeneratedName) savedNames.get(2);
161 assertEquals("abcde002ve1mts001", genName.getName());
162 assertEquals("923456", genName.getExternalId());
163 assertEquals("VM", genName.getElementType());
164 assertEquals("abcde002ve1mts", genName.getPrefix());
165 assertEquals(1, genName.getSequenceNumber().longValue());
166 assertEquals("001", genName.getSequenceNumberEnc());
167 assertEquals(null, genName.getSuffix());
174 public void allRejected() throws Exception {
175 String policyName = "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy";
176 Map<String, String> requestElement2 = makeVmRequest(policyName);
177 List<Map<String, String>> allElements = new ArrayList<>();
178 allElements.add(requestElement2);
180 Map<String, Object> policy = new FilePolicyReader("vnf_and_vm_policy.json").getPolicy();
181 Mockito.lenient().when(policyParams.getMaxGenAttempt()).thenReturn(3);
182 Mockito.lenient().when(policyFinder.findPolicy(policyName)).thenReturn(policy);
183 Mockito.lenient().when(dbValidator.validate(anyObject(), anyObject())).thenReturn(false);
184 Mockito.lenient().when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(1))).thenReturn(1L);
185 Mockito.lenient().when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(2))).thenReturn(2L);
186 Mockito.lenient().when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(3))).thenReturn(3L);
188 NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator,
189 namePresister, requestElement2, allElements, earlierNames, policyCache, new ArrayList<>());
193 fail("Expecting exception");
194 } catch (Exception e) {
195 assertEquals("Could not generate a name successfully for policy "
196 + "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy and naming-type VNF "
197 + "even after 3 attempts.", e.getMessage());
200 fail("Expecting exception");
204 public void allRejectedSequenceLess() throws Exception {
205 String policyName = "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy";
206 Map<String, String> requestElement2 = makeVnfRequest(policyName);
207 List<Map<String, String>> allElements = new ArrayList<>();
208 allElements.add(requestElement2);
210 Map<String, Object> policy = new FilePolicyReader("vnf_policy_no_seq.json").getPolicy();
211 Mockito.lenient().when(policyParams.getMaxGenAttempt()).thenReturn(3);
212 Mockito.lenient().when(policyFinder.findPolicy(policyName)).thenReturn(policy);
213 Mockito.lenient().when(dbValidator.validate(anyObject(), anyObject())).thenReturn(false);
215 NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator,
216 namePresister, requestElement2, allElements, earlierNames, policyCache, new ArrayList<>());
220 fail("Expecting exception");
221 } catch (Exception e) {
222 assertEquals("Could not generate a valid name successfully for policy "
223 + "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy "
224 + "and naming-type VNF. DB Name validation failed", e.getMessage());
227 fail("Expecting exception");