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.invocation.InvocationOnMock;
40 import org.mockito.runners.MockitoJUnitRunner;
41 import org.mockito.stubbing.Answer;
42 import org.onap.ccsdk.apps.ms.neng.core.persistence.NamePersister;
43 import org.onap.ccsdk.apps.ms.neng.core.policy.FilePolicyReader;
44 import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyFinder;
45 import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyParameters;
46 import org.onap.ccsdk.apps.ms.neng.core.seq.SequenceGenerator;
47 import org.onap.ccsdk.apps.ms.neng.core.validator.AaiNameValidator;
48 import org.onap.ccsdk.apps.ms.neng.core.validator.DbNameValidator;
49 import org.onap.ccsdk.apps.ms.neng.persistence.entity.GeneratedName;
51 @RunWith(MockitoJUnitRunner.class)
52 public class NameGeneratorSeqGenErrorsTest {
54 private PolicyParameters policyParams = mock(PolicyParameters.class);
56 private PolicyFinder policyFinder = mock(PolicyFinder.class);
58 private SequenceGenerator sequenceGenerator = mock(SequenceGenerator.class);
60 private DbNameValidator dbValidator = mock(DbNameValidator.class);
62 private AaiNameValidator aaiValidator = mock(AaiNameValidator.class);
64 private NamePersister namePresister = mock(NamePersister.class);
65 private Map<String, Map<String, String>> earlierNames = new HashMap<>();
66 private Map<String, Map<String, ?>> policyCache = new HashMap<>();
68 protected Map<String, String> makeVmRequest(String policy) {
69 Map<String, String> requestElement = new HashMap<>();
70 requestElement.put("external-key", "923456");
71 requestElement.put("policy-instance-name", policy);
72 requestElement.put("naming-type", "VM");
73 requestElement.put("resource-name", "vm-name");
74 requestElement.put("complex", "abcdeasdf");
75 return requestElement;
78 protected Map<String, String> makeVnfRequest(String policy) {
79 Map<String, String> requestElement = new HashMap<>();
80 requestElement.put("external-key", "123456");
81 requestElement.put("policy-instance-name", policy);
82 requestElement.put("naming-type", "VNF");
83 requestElement.put("resource-name", "vnf-name");
84 requestElement.put("complex", "abcdeasdf");
85 return requestElement;
89 * Setup policy params.
92 public void setupPolicyParams() throws Exception {
93 when(policyParams.mapFunction("substr")).thenReturn("substring");
94 when(policyParams.mapFunction("to_lower_case")).thenReturn("toLowerCase");
95 when(policyParams.mapFunction("to_upper_case")).thenReturn("toUpperCase");
99 public void someNamesRejectedByAai() throws Exception {
100 String policyName = "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy";
101 Map<String, String> requestElement2 = makeVmRequest(policyName);
102 List<Map<String, String>> allElements = new ArrayList<>();
103 allElements.add(requestElement2);
105 Map<String, Object> policy = new FilePolicyReader("vnf_and_vm_policy.json").getPolicy();
106 when(policyParams.getMaxGenAttempt()).thenReturn(100);
107 when(policyFinder.findPolicy(policyName)).thenReturn(policy);
109 when(aaiValidator.validate(anyObject(), anyObject())).thenReturn(true);
110 when(aaiValidator.validate(eq("VNF"), anyObject())).thenReturn(true);
111 when(aaiValidator.validate(eq("VNF"), eq("abcde001ve1"))).thenReturn(false);
113 when(dbValidator.validate(anyObject(), anyObject())).thenReturn(true);
114 when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(1))).thenReturn(1L);
115 when(sequenceGenerator.generate(eq("abcde"), anyObject(), anyObject(), anyObject(), eq(2))).thenReturn(2L);
117 final List<Object> savedNames = new ArrayList<>();
118 doAnswer(new Answer<Void>() {
120 public Void answer(InvocationOnMock invocation) throws Throwable {
121 savedNames.add(invocation.getArguments()[0]);
124 }).when(namePresister).persist(anyObject());
126 NameGenerator gen2 = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator,
127 namePresister, requestElement2, allElements, earlierNames, policyCache, new ArrayList<>());
129 Map<String, String> resp2 = gen2.generate();
130 assertEquals("vm-name", resp2.get("resource-name"));
131 assertEquals("923456", resp2.get("external-key"));
132 assertEquals("abcde002ve1mts001", resp2.get("resource-value"));
134 assertEquals(3, savedNames.size());
137 GeneratedName genName = (GeneratedName) savedNames.get(0);
138 assertEquals("abcde001ve1", genName.getName());
139 assertEquals("AAI-BACKPOPULATE", genName.getExternalId());
140 assertEquals("VNF", genName.getElementType());
141 assertEquals("abcde", genName.getPrefix());
142 assertEquals(1, genName.getSequenceNumber().longValue());
143 assertEquals("001", genName.getSequenceNumberEnc());
144 assertEquals("ve1", genName.getSuffix());
147 GeneratedName genName = (GeneratedName) savedNames.get(1);
148 assertEquals("abcde002ve1", genName.getName());
149 assertEquals(null, genName.getExternalId());
150 assertEquals("VNF", genName.getElementType());
151 assertEquals("abcde", genName.getPrefix());
152 assertEquals(2, genName.getSequenceNumber().longValue());
153 assertEquals("002", genName.getSequenceNumberEnc());
154 assertEquals("ve1", genName.getSuffix());
158 GeneratedName genName = (GeneratedName) savedNames.get(2);
159 assertEquals("abcde002ve1mts001", genName.getName());
160 assertEquals("923456", genName.getExternalId());
161 assertEquals("VM", genName.getElementType());
162 assertEquals("abcde002ve1mts", genName.getPrefix());
163 assertEquals(1, genName.getSequenceNumber().longValue());
164 assertEquals("001", genName.getSequenceNumberEnc());
165 assertEquals(null, genName.getSuffix());
171 public void allRejected() throws Exception {
172 String policyName = "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy";
173 Map<String, String> requestElement2 = makeVmRequest(policyName);
174 List<Map<String, String>> allElements = new ArrayList<>();
175 allElements.add(requestElement2);
177 Map<String, Object> policy = new FilePolicyReader("vnf_and_vm_policy.json").getPolicy();
178 when(policyParams.getMaxGenAttempt()).thenReturn(3);
179 when(policyFinder.findPolicy(policyName)).thenReturn(policy);
180 when(dbValidator.validate(anyObject(), anyObject())).thenReturn(false);
181 when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(1))).thenReturn(1L);
182 when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(2))).thenReturn(2L);
183 when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(3))).thenReturn(3L);
185 NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator,
186 namePresister, requestElement2, allElements, earlierNames, policyCache, new ArrayList<>());
190 fail("Expecting exception");
191 } catch (Exception e) {
192 assertEquals("Could not generate a name successfully for policy "
193 + "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy and naming-type VNF "
194 + "even after 3 attempts.", e.getMessage());
197 fail("Expecting exception");
201 public void allRejectedSequenceLess() throws Exception {
202 String policyName = "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy";
203 Map<String, String> requestElement2 = makeVnfRequest(policyName);
204 List<Map<String, String>> allElements = new ArrayList<>();
205 allElements.add(requestElement2);
207 Map<String, Object> policy = new FilePolicyReader("vnf_policy_no_seq.json").getPolicy();
208 when(policyParams.getMaxGenAttempt()).thenReturn(3);
209 when(policyFinder.findPolicy(policyName)).thenReturn(policy);
210 when(dbValidator.validate(anyObject(), anyObject())).thenReturn(false);
212 NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator,
213 namePresister, requestElement2, allElements, earlierNames, policyCache, new ArrayList<>());
217 fail("Expecting exception");
218 } catch (Exception e) {
219 assertEquals("Could not generate a valid name successfully for policy "
220 + "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy "
221 + "and naming-type VNF. DB Name validation failed", e.getMessage());
224 fail("Expecting exception");