diff options
17 files changed, 1684 insertions, 1 deletions
diff --git a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/policy/PolicyReader.java b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/policy/PolicyReader.java index de034f04..778c4781 100644 --- a/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/policy/PolicyReader.java +++ b/ms/neng/src/main/java/org/onap/ccsdk/apps/ms/neng/core/policy/PolicyReader.java @@ -285,7 +285,7 @@ public abstract class PolicyReader implements PolicyFinder { if (policy != null) { @SuppressWarnings("unchecked") List<Map<String, ?>> listObj = (List<Map<String, ?>>) policy.get(name); - if (list instanceof List<?>) { + if (listObj instanceof List<?>) { list = listObj; } } diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorDependencyEarlierTest.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorDependencyEarlierTest.java new file mode 100644 index 00000000..ccbd4913 --- /dev/null +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorDependencyEarlierTest.java @@ -0,0 +1,126 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK.apps + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.apps.ms.neng.core.gen; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.ccsdk.apps.ms.neng.core.persistence.NamePersister; +import org.onap.ccsdk.apps.ms.neng.core.policy.FilePolicyReader; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyFinder; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyParameters; +import org.onap.ccsdk.apps.ms.neng.core.seq.SequenceGenerator; +import org.onap.ccsdk.apps.ms.neng.core.validator.AaiNameValidator; +import org.onap.ccsdk.apps.ms.neng.core.validator.DbNameValidator; + +@RunWith(MockitoJUnitRunner.class) +public class NameGeneratorDependencyEarlierTest { + @Mock + private PolicyParameters policyParams = mock(PolicyParameters.class); + @Mock + private PolicyFinder policyFinder = mock(PolicyFinder.class); + @Mock + private SequenceGenerator sequenceGenerator = mock(SequenceGenerator.class); + @Mock + private DbNameValidator dbValidator = mock(DbNameValidator.class); + @Mock + private AaiNameValidator aaiValidator = mock(AaiNameValidator.class); + @Mock + private NamePersister namePresister = mock(NamePersister.class); + private Map<String, Map<String, String>> earlierNames = new HashMap<>(); + private Map<String, Map<String, ?>> policyCache = new HashMap<>(); + + + protected Map<String, String> makeVnfRequest(String policy) { + Map<String, String> requestElement = new HashMap<>(); + requestElement.put("external-key", "123456"); + requestElement.put("policy-instance-name", policy); + requestElement.put("complex", "abcdeasdf"); + requestElement.put("naming-type", "VNF"); + requestElement.put("nf-naming-code", "ve1"); + requestElement.put("resource-name", "vnf-name"); + return requestElement; + } + + protected Map<String, String> makeVmRequest(String policy) { + Map<String, String> requestElement = new HashMap<>(); + requestElement.put("external-key", "923456"); + requestElement.put("policy-instance-name", policy); + requestElement.put("naming-type", "VM"); + requestElement.put("resource-name", "vm-name"); + return requestElement; + } + + /** + * Setup params related data. + */ + @Before + public void setupPolicyParams() throws Exception { + when(policyParams.mapFunction("substr")).thenReturn("substring"); + when(policyParams.mapFunction("to_lower_case")).thenReturn("toLowerCase"); + when(policyParams.mapFunction("to_upper_case")).thenReturn("toUpperCase"); + } + + @Test + public void generate() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy"; + Map<String, String> requestElement1 = makeVnfRequest(policyName); + Map<String, String> requestElement2 = makeVmRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement1); + allElements.add(requestElement2); + + Map<String, Object> policy = new FilePolicyReader("vnf_and_vm_policy.json").getPolicy(); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + when(aaiValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(dbValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), anyInt())).thenReturn(1L); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement1, allElements, earlierNames, policyCache); + + Map<String, String> resp = gen.generate(); + assertEquals("vnf-name", resp.get("resource-name")); + assertEquals("123456", resp.get("external-key")); + assertEquals("abcde001ve1", resp.get("resource-value")); + + NameGenerator gen2 = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement2, allElements, earlierNames, policyCache); + + Map<String, String> resp2 = gen2.generate(); + assertEquals("vm-name", resp2.get("resource-name")); + assertEquals("923456", resp2.get("external-key")); + assertEquals("abcde001ve1mts001", resp2.get("resource-value")); + } +} + diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorDependencyLaterTest.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorDependencyLaterTest.java new file mode 100644 index 00000000..009db5da --- /dev/null +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorDependencyLaterTest.java @@ -0,0 +1,125 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK.apps + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.apps.ms.neng.core.gen; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.ccsdk.apps.ms.neng.core.persistence.NamePersister; +import org.onap.ccsdk.apps.ms.neng.core.policy.FilePolicyReader; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyFinder; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyParameters; +import org.onap.ccsdk.apps.ms.neng.core.seq.SequenceGenerator; +import org.onap.ccsdk.apps.ms.neng.core.validator.AaiNameValidator; +import org.onap.ccsdk.apps.ms.neng.core.validator.DbNameValidator; + +@RunWith(MockitoJUnitRunner.class) +public class NameGeneratorDependencyLaterTest { + @Mock + private PolicyParameters policyParams = mock(PolicyParameters.class); + @Mock + private PolicyFinder policyFinder = mock(PolicyFinder.class); + @Mock + private SequenceGenerator sequenceGenerator = mock(SequenceGenerator.class); + @Mock + private DbNameValidator dbValidator = mock(DbNameValidator.class); + @Mock + private AaiNameValidator aaiValidator = mock(AaiNameValidator.class); + @Mock + private NamePersister namePresister = mock(NamePersister.class); + private Map<String, Map<String, String>> earlierNames = new HashMap<>(); + private Map<String, Map<String, ?>> policyCache = new HashMap<>(); + + protected Map<String, String> makeVnfRequest(String policy) { + Map<String, String> requestElement = new HashMap<>(); + requestElement.put("external-key", "123456"); + requestElement.put("policy-instance-name", policy); + requestElement.put("complex", "abcdeasdf"); + requestElement.put("naming-type", "VNF"); + requestElement.put("nf-naming-code", "ve1"); + requestElement.put("resource-name", "vnf-name"); + return requestElement; + } + + protected Map<String, String> makeVmRequest(String policy) { + Map<String, String> requestElement = new HashMap<>(); + requestElement.put("external-key", "923456"); + requestElement.put("policy-instance-name", policy); + requestElement.put("naming-type", "VM"); + requestElement.put("resource-name", "vm-name"); + return requestElement; + } + + /** + * Setup params related data. + */ + @Before + public void setupPolicyParams() throws Exception { + when(policyParams.mapFunction("substr")).thenReturn("substring"); + when(policyParams.mapFunction("to_lower_case")).thenReturn("toLowerCase"); + when(policyParams.mapFunction("to_upper_case")).thenReturn("toUpperCase"); + } + + @Test + public void generate() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy"; + Map<String, String> requestElement1 = makeVmRequest(policyName); + Map<String, String> requestElement2 = makeVnfRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement1); + allElements.add(requestElement2); + + Map<String, Object> policy = new FilePolicyReader("vnf_and_vm_policy.json").getPolicy(); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + when(aaiValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(dbValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), anyInt())).thenReturn(1L); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement1, allElements, earlierNames, policyCache); + + Map<String, String> resp = gen.generate(); + assertEquals("vm-name", resp.get("resource-name")); + assertEquals("923456", resp.get("external-key")); + assertEquals("abcde001ve1mts001", resp.get("resource-value")); + + NameGenerator gen2 = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement2, allElements, earlierNames, policyCache); + + Map<String, String> resp2 = gen2.generate(); + assertEquals("vnf-name", resp2.get("resource-name")); + assertEquals("123456", resp2.get("external-key")); + assertEquals("abcde001ve1", resp2.get("resource-value")); + } +} + diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorDependencyOnUnnamedTest.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorDependencyOnUnnamedTest.java new file mode 100644 index 00000000..e4f3ddc2 --- /dev/null +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorDependencyOnUnnamedTest.java @@ -0,0 +1,136 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK.apps + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.apps.ms.neng.core.gen; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.stubbing.Answer; +import org.onap.ccsdk.apps.ms.neng.core.persistence.NamePersister; +import org.onap.ccsdk.apps.ms.neng.core.policy.FilePolicyReader; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyFinder; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyParameters; +import org.onap.ccsdk.apps.ms.neng.core.seq.SequenceGenerator; +import org.onap.ccsdk.apps.ms.neng.core.validator.AaiNameValidator; +import org.onap.ccsdk.apps.ms.neng.core.validator.DbNameValidator; +import org.onap.ccsdk.apps.ms.neng.persistence.entity.GeneratedName; + +@RunWith(MockitoJUnitRunner.class) +public class NameGeneratorDependencyOnUnnamedTest { + @Mock + private PolicyParameters policyParams = mock(PolicyParameters.class); + @Mock + private PolicyFinder policyFinder = mock(PolicyFinder.class); + @Mock + private SequenceGenerator sequenceGenerator = mock(SequenceGenerator.class); + @Mock + private DbNameValidator dbValidator = mock(DbNameValidator.class); + @Mock + private AaiNameValidator aaiValidator = mock(AaiNameValidator.class); + @Mock + private NamePersister namePresister = mock(NamePersister.class); + private Map<String, Map<String, String>> earlierNames = new HashMap<>(); + private Map<String, Map<String, ?>> policyCache = new HashMap<>(); + + /** + * Setup policy params. + */ + @Before + public void setupPolicyParams() throws Exception { + when(policyParams.mapFunction("substr")).thenReturn("substring"); + when(policyParams.mapFunction("to_lower_case")).thenReturn("toLowerCase"); + when(policyParams.mapFunction("to_upper_case")).thenReturn("toUpperCase"); + } + + protected Map<String, String> makeVmRequest(String policy) { + Map<String, String> requestElement = new HashMap<>(); + requestElement.put("external-key", "923456"); + requestElement.put("policy-instance-name", policy); + requestElement.put("naming-type", "VM"); + requestElement.put("resource-name", "vm-name"); + requestElement.put("complex", "abcdeasdf"); + return requestElement; + } + + @Test + public void generate() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy"; + Map<String, String> requestElement2 = makeVmRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement2); + + Map<String, Object> policy = new FilePolicyReader("vnf_and_vm_policy.json").getPolicy(); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + when(aaiValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(dbValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), anyInt())).thenReturn(1L); + + final List<Object> savedNames = new ArrayList<>(); + doAnswer(new Answer<Void>() { + @Override + public Void answer(InvocationOnMock invocation) throws Throwable { + savedNames.add(invocation.getArguments()[0]); + return null; + } + }).when(namePresister).persist(anyObject()); + + NameGenerator gen2 = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement2, allElements, earlierNames, policyCache); + + Map<String, String> resp2 = gen2.generate(); + assertEquals("vm-name", resp2.get("resource-name")); + assertEquals("923456", resp2.get("external-key")); + assertEquals("abcde001ve1mts001", resp2.get("resource-value")); + + assertEquals(2, savedNames.size()); + + assertEquals("abcde001ve1", ((GeneratedName) savedNames.get(0)).getName()); + assertEquals(null, ((GeneratedName) savedNames.get(0)).getExternalId()); + assertEquals("VNF", ((GeneratedName) savedNames.get(0)).getElementType()); + assertEquals("abcde", ((GeneratedName) savedNames.get(0)).getPrefix()); + assertEquals(1, ((GeneratedName) savedNames.get(0)).getSequenceNumber().longValue()); + assertEquals("001", ((GeneratedName) savedNames.get(0)).getSequenceNumberEnc()); + assertEquals("ve1", ((GeneratedName) savedNames.get(0)).getSuffix()); + + assertEquals("abcde001ve1mts001", ((GeneratedName) savedNames.get(1)).getName()); + assertEquals("923456", ((GeneratedName) savedNames.get(1)).getExternalId()); + assertEquals("VM", ((GeneratedName) savedNames.get(1)).getElementType()); + assertEquals("abcde001ve1mts", ((GeneratedName) savedNames.get(1)).getPrefix()); + assertEquals(1, ((GeneratedName) savedNames.get(1)).getSequenceNumber().longValue()); + assertEquals("001", ((GeneratedName) savedNames.get(1)).getSequenceNumberEnc()); + assertEquals(null, ((GeneratedName) savedNames.get(1)).getSuffix()); + } +} + diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorExcMissingData.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorExcMissingData.java new file mode 100644 index 00000000..4b1d1eac --- /dev/null +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorExcMissingData.java @@ -0,0 +1,268 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK.apps + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.apps.ms.neng.core.gen; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.ccsdk.apps.ms.neng.core.persistence.NamePersister; +import org.onap.ccsdk.apps.ms.neng.core.policy.FilePolicyReader; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyFinder; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyParameters; +import org.onap.ccsdk.apps.ms.neng.core.seq.SequenceGenerator; +import org.onap.ccsdk.apps.ms.neng.core.validator.AaiNameValidator; +import org.onap.ccsdk.apps.ms.neng.core.validator.DbNameValidator; + +@RunWith(MockitoJUnitRunner.class) +public class NameGeneratorExcMissingData { + @Mock + private PolicyParameters policyParams = mock(PolicyParameters.class); + @Mock + private PolicyFinder policyFinder = mock(PolicyFinder.class); + @Mock + private SequenceGenerator sequenceGenerator = mock(SequenceGenerator.class); + @Mock + private DbNameValidator dbValidator = mock(DbNameValidator.class); + @Mock + private AaiNameValidator aaiValidator = mock(AaiNameValidator.class); + @Mock + private NamePersister namePresister = mock(NamePersister.class); + private Map<String, Map<String, String>> earlierNames = new HashMap<>(); + private Map<String, Map<String, ?>> policyCache = new HashMap<>(); + + protected Map<String, String> makeOneRequest(String policy) { + Map<String, String> requestElement = new HashMap<>(); + requestElement.put("external-key", "123456"); + requestElement.put("policy-instance-name", policy); + requestElement.put("complex", "dlstxasdf"); + requestElement.put("naming-type", "VNF"); + requestElement.put("nf-naming-code", "ve1"); + requestElement.put("resource-name", "vnf-name"); + return requestElement; + } + + @Test + public void missingPolicy() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq"; + Map<String, String> requestElement = makeOneRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement); + + when(policyFinder.findPolicy(policyName)).thenReturn(null); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement, allElements, earlierNames, policyCache); + + try { + gen.generate(); + fail("Expecting exception"); + } catch (Exception e) { + assertEquals("Could not find the policy data for SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq", + e.getMessage()); + return; + } + fail("Expecting exception"); + } + + @Test + public void missingPolicyData() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq"; + Map<String, String> requestElement = makeOneRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement, allElements, earlierNames, policyCache); + + try { + gen.generate(); + fail("Expecting exception"); + } catch (Exception e) { + assertEquals("Could not find the policy data for SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq " + + "and naming-type VNF", + e.getMessage()); + return; + } + fail("Expecting exception"); + } + + @Test + public void missingPolicyName() throws Exception { + String policyName = null; + Map<String, String> requestElement = makeOneRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement, allElements, earlierNames, policyCache); + + try { + gen.generate(); + fail("Expecting exception"); + } catch (Exception e) { + assertEquals("Could not find policy name in the request", e.getMessage()); + return; + } + fail("Expecting exception"); + } + + @Test + public void missingNamingType() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq"; + Map<String, String> requestElement = makeOneRequest(policyName); + requestElement.remove("naming-type"); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement, allElements, earlierNames, policyCache); + + try { + gen.generate(); + fail("Expecting exception"); + } catch (Exception e) { + assertEquals("Could not find naming type in the request for policy " + + "SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq", + e.getMessage()); + return; + } + fail("Expecting exception"); + } + + @Test + public void missingRecipe() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq"; + Map<String, String> requestElement = makeOneRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement); + + Map<String, Object> policy = new FilePolicyReader("bad_policy_missing_recipe.json").getPolicy(); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + when(aaiValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(dbValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), anyInt())).thenReturn(1L); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement, allElements, earlierNames, policyCache); + + try { + gen.generate(); + fail("Expecting exception"); + } catch (Exception e) { + assertEquals("Could not find the recipe for SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq " + + "and naming-type VNF", + e.getMessage()); + return; + } + fail("Expecting exception"); + } + + @Test + public void missingRecipeOneField() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq"; + Map<String, String> requestElement = makeOneRequest(policyName); + requestElement.remove("complex"); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement); + + Map<String, Object> policy = new FilePolicyReader("vnf_policy_seq.json").getPolicy(); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement, allElements, earlierNames, policyCache); + + try { + gen.generate(); + fail("Expecting exception"); + } catch (Exception e) { + assertEquals("Could not find data for recipe item COMPLEX in policy " + + "SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq " + + "and naming-type VNF", e.getMessage()); + return; + } + fail("Expecting exception"); + } + + @Test + public void missingRecipeMultipleFields() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq"; + Map<String, String> requestElement = makeOneRequest(policyName); + requestElement.remove("complex"); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement); + + Map<String, Object> policy = new FilePolicyReader("long_policy.json").getPolicy(); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement, allElements, earlierNames, policyCache); + + try { + gen.generate(); + fail("Expecting exception"); + } catch (Exception e) { + assertEquals("Could not find data for recipe items COMPLEX, Field2, Field3 and Field4 in policy " + + "SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq " + + "and naming-type VNF", e.getMessage()); + return; + } + fail("Expecting exception"); + } + + @Test + public void missingRecipeTwoFields() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq"; + Map<String, String> requestElement = makeOneRequest(policyName); + requestElement.put("Field2", "f2"); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement); + + Map<String, Object> policy = new FilePolicyReader("long_policy.json").getPolicy(); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement, allElements, earlierNames, policyCache); + + try { + gen.generate(); + fail("Expecting exception"); + } catch (Exception e) { + assertEquals("Could not find data for recipe items Field3 and Field4 in policy " + + "SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq " + + "and naming-type VNF", e.getMessage()); + return; + } + fail("Expecting exception"); + } +} + diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorNoSequenceTest.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorNoSequenceTest.java new file mode 100644 index 00000000..e46ab083 --- /dev/null +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorNoSequenceTest.java @@ -0,0 +1,93 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK.apps + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.apps.ms.neng.core.gen; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.ccsdk.apps.ms.neng.core.persistence.NamePersister; +import org.onap.ccsdk.apps.ms.neng.core.policy.FilePolicyReader; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyFinder; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyParameters; +import org.onap.ccsdk.apps.ms.neng.core.seq.SequenceGenerator; +import org.onap.ccsdk.apps.ms.neng.core.validator.AaiNameValidator; +import org.onap.ccsdk.apps.ms.neng.core.validator.DbNameValidator; + +@RunWith(MockitoJUnitRunner.class) +public class NameGeneratorNoSequenceTest { + @Mock + private PolicyParameters policyParams = mock(PolicyParameters.class); + @Mock + private PolicyFinder policyFinder = mock(PolicyFinder.class); + @Mock + private SequenceGenerator sequenceGenerator = mock(SequenceGenerator.class); + @Mock + private DbNameValidator dbValidator = mock(DbNameValidator.class); + @Mock + private AaiNameValidator aaiValidator = mock(AaiNameValidator.class); + @Mock + private NamePersister namePresister = mock(NamePersister.class); + private Map<String, Map<String, String>> earlierNames = new HashMap<>(); + private Map<String, Map<String, ?>> policyCache = new HashMap<>(); + + protected Map<String, String> makeOneRequest(String policy) { + Map<String, String> requestElement = new HashMap<>(); + requestElement.put("external-key", "123456"); + requestElement.put("policy-instance-name", policy); + requestElement.put("complex", "dlstx"); + requestElement.put("naming-type", "VNF"); + requestElement.put("nf-naming-code", "ve1"); + requestElement.put("resource-name", "vnf-name"); + return requestElement; + } + + @Test + public void generate() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNFCNamingPolicy_no_seq"; + Map<String, String> requestElement = makeOneRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement); + + Map<String, Object> policy = new FilePolicyReader("vnf_policy_no_seq.json").getPolicy(); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + when(aaiValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(dbValidator.validate(anyObject(), anyObject())).thenReturn(true); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement, allElements, earlierNames, policyCache); + + Map<String, String> resp = gen.generate(); + assertEquals("vnf-name", resp.get("resource-name")); + assertEquals("123456", resp.get("external-key")); + assertEquals("dlstxxyz", resp.get("resource-value")); + } +} + diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorSeqGenErrorsTest.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorSeqGenErrorsTest.java new file mode 100644 index 00000000..46f1e942 --- /dev/null +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorSeqGenErrorsTest.java @@ -0,0 +1,227 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK.apps + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.apps.ms.neng.core.gen; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.stubbing.Answer; +import org.onap.ccsdk.apps.ms.neng.core.persistence.NamePersister; +import org.onap.ccsdk.apps.ms.neng.core.policy.FilePolicyReader; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyFinder; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyParameters; +import org.onap.ccsdk.apps.ms.neng.core.seq.SequenceGenerator; +import org.onap.ccsdk.apps.ms.neng.core.validator.AaiNameValidator; +import org.onap.ccsdk.apps.ms.neng.core.validator.DbNameValidator; +import org.onap.ccsdk.apps.ms.neng.persistence.entity.GeneratedName; + +@RunWith(MockitoJUnitRunner.class) +public class NameGeneratorSeqGenErrorsTest { + @Mock + private PolicyParameters policyParams = mock(PolicyParameters.class); + @Mock + private PolicyFinder policyFinder = mock(PolicyFinder.class); + @Mock + private SequenceGenerator sequenceGenerator = mock(SequenceGenerator.class); + @Mock + private DbNameValidator dbValidator = mock(DbNameValidator.class); + @Mock + private AaiNameValidator aaiValidator = mock(AaiNameValidator.class); + @Mock + private NamePersister namePresister = mock(NamePersister.class); + private Map<String, Map<String, String>> earlierNames = new HashMap<>(); + private Map<String, Map<String, ?>> policyCache = new HashMap<>(); + + protected Map<String, String> makeVmRequest(String policy) { + Map<String, String> requestElement = new HashMap<>(); + requestElement.put("external-key", "923456"); + requestElement.put("policy-instance-name", policy); + requestElement.put("naming-type", "VM"); + requestElement.put("resource-name", "vm-name"); + requestElement.put("complex", "abcdeasdf"); + return requestElement; + } + + protected Map<String, String> makeVnfRequest(String policy) { + Map<String, String> requestElement = new HashMap<>(); + requestElement.put("external-key", "123456"); + requestElement.put("policy-instance-name", policy); + requestElement.put("naming-type", "VNF"); + requestElement.put("resource-name", "vnf-name"); + requestElement.put("complex", "abcdeasdf"); + return requestElement; + } + + /** + * Setup policy params. + */ + @Before + public void setupPolicyParams() throws Exception { + when(policyParams.mapFunction("substr")).thenReturn("substring"); + when(policyParams.mapFunction("to_lower_case")).thenReturn("toLowerCase"); + when(policyParams.mapFunction("to_upper_case")).thenReturn("toUpperCase"); + } + + @Test + public void someNamesRejectedByAai() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy"; + Map<String, String> requestElement2 = makeVmRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement2); + + Map<String, Object> policy = new FilePolicyReader("vnf_and_vm_policy.json").getPolicy(); + when(policyParams.getMaxGenAttempt()).thenReturn(100); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + + when(aaiValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(aaiValidator.validate(eq("VNF"), anyObject())).thenReturn(true); + when(aaiValidator.validate(eq("VNF"), eq("abcde001ve1"))).thenReturn(false); + + when(dbValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(1))).thenReturn(1L); + when(sequenceGenerator.generate(eq("abcde"), anyObject(), anyObject(), anyObject(), eq(2))).thenReturn(2L); + + final List<Object> savedNames = new ArrayList<>(); + doAnswer(new Answer<Void>() { + @Override + public Void answer(InvocationOnMock invocation) throws Throwable { + savedNames.add(invocation.getArguments()[0]); + return null; + } + }).when(namePresister).persist(anyObject()); + + NameGenerator gen2 = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement2, allElements, earlierNames, policyCache); + + Map<String, String> resp2 = gen2.generate(); + assertEquals("vm-name", resp2.get("resource-name")); + assertEquals("923456", resp2.get("external-key")); + assertEquals("abcde002ve1mts001", resp2.get("resource-value")); + + assertEquals(3, savedNames.size()); + + { + GeneratedName genName = (GeneratedName) savedNames.get(0); + assertEquals("abcde001ve1", genName.getName()); + assertEquals("AAI-BACKPOPULATE", genName.getExternalId()); + assertEquals("VNF", genName.getElementType()); + assertEquals("abcde", genName.getPrefix()); + assertEquals(1, genName.getSequenceNumber().longValue()); + assertEquals("001", genName.getSequenceNumberEnc()); + assertEquals("ve1", genName.getSuffix()); + } + { + GeneratedName genName = (GeneratedName) savedNames.get(1); + assertEquals("abcde002ve1", genName.getName()); + assertEquals(null, genName.getExternalId()); + assertEquals("VNF", genName.getElementType()); + assertEquals("abcde", genName.getPrefix()); + assertEquals(2, genName.getSequenceNumber().longValue()); + assertEquals("002", genName.getSequenceNumberEnc()); + assertEquals("ve1", genName.getSuffix()); + + } + { + GeneratedName genName = (GeneratedName) savedNames.get(2); + assertEquals("abcde002ve1mts001", genName.getName()); + assertEquals("923456", genName.getExternalId()); + assertEquals("VM", genName.getElementType()); + assertEquals("abcde002ve1mts", genName.getPrefix()); + assertEquals(1, genName.getSequenceNumber().longValue()); + assertEquals("001", genName.getSequenceNumberEnc()); + assertEquals(null, genName.getSuffix()); + + } + } + + @Test + public void allRejected() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy"; + Map<String, String> requestElement2 = makeVmRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement2); + + Map<String, Object> policy = new FilePolicyReader("vnf_and_vm_policy.json").getPolicy(); + when(policyParams.getMaxGenAttempt()).thenReturn(3); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + when(dbValidator.validate(anyObject(), anyObject())).thenReturn(false); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(1))).thenReturn(1L); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(2))).thenReturn(2L); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(3))).thenReturn(3L); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement2, allElements, earlierNames, policyCache); + + try { + gen.generate(); + fail("Expecting exception"); + } catch (Exception e) { + assertEquals("Could not generate a name successfully for policy " + + "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy and naming-type VNF " + + "even after 3 attempts.", e.getMessage()); + return; + } + fail("Expecting exception"); + } + + @Test + public void allRejectedSequenceLess() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy"; + Map<String, String> requestElement2 = makeVnfRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement2); + + Map<String, Object> policy = new FilePolicyReader("vnf_policy_no_seq.json").getPolicy(); + when(policyParams.getMaxGenAttempt()).thenReturn(3); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + when(dbValidator.validate(anyObject(), anyObject())).thenReturn(false); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement2, allElements, earlierNames, policyCache); + + try { + gen.generate(); + fail("Expecting exception"); + } catch (Exception e) { + assertEquals("Could not generate a valid name successfully for policy " + + "SDNC_Policy.Config_MS_VNF_VM_NamingPolicy " + + "and naming-type VNF. DB Name validation failed", e.getMessage()); + return; + } + fail("Expecting exception"); + } +} + diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorSequenceMultiTest.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorSequenceMultiTest.java new file mode 100644 index 00000000..41f0531a --- /dev/null +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorSequenceMultiTest.java @@ -0,0 +1,114 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK.apps + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.apps.ms.neng.core.gen; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.ccsdk.apps.ms.neng.core.persistence.NamePersister; +import org.onap.ccsdk.apps.ms.neng.core.policy.FilePolicyReader; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyFinder; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyParameters; +import org.onap.ccsdk.apps.ms.neng.core.seq.SequenceGenerator; +import org.onap.ccsdk.apps.ms.neng.core.validator.AaiNameValidator; +import org.onap.ccsdk.apps.ms.neng.core.validator.DbNameValidator; + +@RunWith(MockitoJUnitRunner.class) +public class NameGeneratorSequenceMultiTest { + @Mock + private PolicyParameters policyParams = mock(PolicyParameters.class); + @Mock + private PolicyFinder policyFinder = mock(PolicyFinder.class); + @Mock + private SequenceGenerator sequenceGenerator = mock(SequenceGenerator.class); + @Mock + private DbNameValidator dbValidator = mock(DbNameValidator.class); + @Mock + private AaiNameValidator aaiValidator = mock(AaiNameValidator.class); + @Mock + private NamePersister namePresister = mock(NamePersister.class); + private Map<String, Map<String, String>> earlierNames = new HashMap<>(); + private Map<String, Map<String, ?>> policyCache = new HashMap<>(); + + protected Map<String, String> makeOneRequest(String policy) { + Map<String, String> requestElement = new HashMap<>(); + requestElement.put("external-key", "123456"); + requestElement.put("policy-instance-name", policy); + requestElement.put("complex", "abcdeasdf"); + requestElement.put("naming-type", "VNF"); + requestElement.put("nf-naming-code", "ve1"); + requestElement.put("resource-name", "vnf-name"); + return requestElement; + } + + /** + * Setup for policy params. + */ + @Before + public void setupPolicyParams() throws Exception { + when(policyParams.mapFunction("substr")).thenReturn("substring"); + when(policyParams.mapFunction("to_lower_case")).thenReturn("toLowerCase"); + when(policyParams.mapFunction("to_upper_case")).thenReturn("toUpperCase"); + } + + @Test + public void generate() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNFCNamingPolicy_no_seq"; + Map<String, String> requestElement = makeOneRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement); + + Map<String, Object> policy = new FilePolicyReader("vnf_policy_seq.json").getPolicy(); + when(policyParams.getMaxGenAttempt()).thenReturn(100); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + when(aaiValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(dbValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(dbValidator.validate(anyObject(), eq("abcde001ve1"))).thenReturn(false); + when(dbValidator.validate(anyObject(), eq("abcde002ve1"))).thenReturn(false); + when(dbValidator.validate(anyObject(), eq("abcde003ve1"))).thenReturn(false); + when(dbValidator.validate(anyObject(), eq("abcde004ve1"))).thenReturn(true); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(1))).thenReturn(1L); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(2))).thenReturn(2L); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(3))).thenReturn(3L); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), eq(4))).thenReturn(4L); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement, allElements, earlierNames, policyCache); + + Map<String, String> resp = gen.generate(); + assertEquals("vnf-name", resp.get("resource-name")); + assertEquals("123456", resp.get("external-key")); + assertEquals("abcde004ve1", resp.get("resource-value")); + } +} + diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorSequenceTest.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorSequenceTest.java new file mode 100644 index 00000000..9501522d --- /dev/null +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/NameGeneratorSequenceTest.java @@ -0,0 +1,106 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK.apps + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.apps.ms.neng.core.gen; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.ccsdk.apps.ms.neng.core.persistence.NamePersister; +import org.onap.ccsdk.apps.ms.neng.core.policy.FilePolicyReader; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyFinder; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicyParameters; +import org.onap.ccsdk.apps.ms.neng.core.seq.SequenceGenerator; +import org.onap.ccsdk.apps.ms.neng.core.validator.AaiNameValidator; +import org.onap.ccsdk.apps.ms.neng.core.validator.DbNameValidator; + +@RunWith(MockitoJUnitRunner.class) +public class NameGeneratorSequenceTest { + @Mock + private PolicyParameters policyParams = mock(PolicyParameters.class); + @Mock + private PolicyFinder policyFinder = mock(PolicyFinder.class); + @Mock + private SequenceGenerator sequenceGenerator = mock(SequenceGenerator.class); + @Mock + private DbNameValidator dbValidator = mock(DbNameValidator.class); + @Mock + private AaiNameValidator aaiValidator = mock(AaiNameValidator.class); + @Mock + private NamePersister namePresister = mock(NamePersister.class); + private Map<String, Map<String, String>> earlierNames = new HashMap<>(); + private Map<String, Map<String, ?>> policyCache = new HashMap<>(); + + protected Map<String, String> makeOneRequest(String policy) { + Map<String, String> requestElement = new HashMap<>(); + requestElement.put("external-key", "123456"); + requestElement.put("policy-instance-name", policy); + requestElement.put("complex", "abcdeasdf"); + requestElement.put("naming-type", "VNF"); + requestElement.put("nf-naming-code", "ve1"); + requestElement.put("resource-name", "vnf-name"); + return requestElement; + } + + /** + * Setup for policy params. + */ + @Before + public void setupPolicyParams() throws Exception { + when(policyParams.mapFunction("substr")).thenReturn("substring"); + when(policyParams.mapFunction("to_lower_case")).thenReturn("toLowerCase"); + when(policyParams.mapFunction("to_upper_case")).thenReturn("toUpperCase"); + } + + @Test + public void generate() throws Exception { + String policyName = "SDNC_Policy.Config_MS_VNFNamingPolicy_no_seq"; + Map<String, String> requestElement = makeOneRequest(policyName); + List<Map<String, String>> allElements = new ArrayList<>(); + allElements.add(requestElement); + + Map<String, Object> policy = new FilePolicyReader("vnf_policy_seq.json").getPolicy(); + when(policyFinder.findPolicy(policyName)).thenReturn(policy); + when(aaiValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(dbValidator.validate(anyObject(), anyObject())).thenReturn(true); + when(sequenceGenerator.generate(anyObject(), anyObject(), anyObject(), anyObject(), anyInt())).thenReturn(1L); + + NameGenerator gen = new NameGenerator(policyFinder, policyParams, sequenceGenerator, dbValidator, aaiValidator, + namePresister, requestElement, allElements, earlierNames, policyCache); + + Map<String, String> resp = gen.generate(); + assertEquals("vnf-name", resp.get("resource-name")); + assertEquals("123456", resp.get("external-key")); + assertEquals("abcde001ve1", resp.get("resource-value")); + } +} + diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/SequenceFormatterTest.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/SequenceFormatterTest.java new file mode 100644 index 00000000..df28ccce --- /dev/null +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/gen/SequenceFormatterTest.java @@ -0,0 +1,51 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK.apps + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.apps.ms.neng.core.gen; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.onap.ccsdk.apps.ms.neng.core.policy.PolicySequence; + +public class SequenceFormatterTest { + @Test + public void formatSequence() throws Exception { + PolicySequence poly = new PolicySequence(); + poly.setLength(3);; + assertEquals("001", SequenceFormatter.formatSequence(1, poly)); + poly.setLength(2);; + assertEquals("01", SequenceFormatter.formatSequence(1, poly)); + poly.setLength(4);; + assertEquals("0999", SequenceFormatter.formatSequence(999, poly)); + } + + @Test + public void formatSequenceAlpha() throws Exception { + PolicySequence poly = new PolicySequence(); + poly.setLength(3);; + poly.setType(PolicySequence.Type.ALPHA); + assertEquals("001", SequenceFormatter.formatSequence(1, poly)); + poly.setLength(2);; + assertEquals("01", SequenceFormatter.formatSequence(1, poly)); + poly.setLength(4);; + assertEquals("000b", SequenceFormatter.formatSequence(11, poly)); + } +} diff --git a/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/policy/FilePolicyReader.java b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/policy/FilePolicyReader.java new file mode 100644 index 00000000..4056d0e1 --- /dev/null +++ b/ms/neng/src/test/java/org/onap/ccsdk/apps/ms/neng/core/policy/FilePolicyReader.java @@ -0,0 +1,50 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP : CCSDK.apps + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.ccsdk.apps.ms.neng.core.policy; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Map; + +/** + * Reads policy from a file. + */ +public class FilePolicyReader extends PolicyReader { + private String file; + + public FilePolicyReader(String file) { + this.file = file; + } + + public Map<String, Object> findPolicy(String name) throws Exception { + return getPolicy(); + } + + public Map<String, Object> getPolicy() throws Exception { + return getPolicy(readFromFile(file)); + } + + protected String readFromFile(String name) throws Exception { + String path = "src/test/resources/" + name; + String value = new String(Files.readAllBytes(Paths.get(path))); + return value; + } +} diff --git a/ms/neng/src/test/resources/bad_policy_missing_recipe.json b/ms/neng/src/test/resources/bad_policy_missing_recipe.json new file mode 100644 index 00000000..a4de9bb2 --- /dev/null +++ b/ms/neng/src/test/resources/bad_policy_missing_recipe.json @@ -0,0 +1,23 @@ +{ + "input":{ + "naming-model":{ + "policy-instance-name":"SDNC_Policy.Config_MS_VNFCNamingPolicy_no_seq", + "naming-models":[ + { + "nf-role":"vPE", + "naming-type":"VNF", + "name-operation":"", + "naming-properties":[ + { + "property-name":"COMPLEX" + }, + { + "property-name":"NF-NAMING-CODE", + "property-value":"xyz" + } + ] + } + ] + } + } +}
\ No newline at end of file diff --git a/ms/neng/src/test/resources/long_policy.json b/ms/neng/src/test/resources/long_policy.json new file mode 100644 index 00000000..168ca413 --- /dev/null +++ b/ms/neng/src/test/resources/long_policy.json @@ -0,0 +1,24 @@ +{ + "input":{ + "naming-model":{ + "policy-instance-name":"SDNC_Policy.Config_MS_VNFCNamingPolicy_no_seq", + "naming-models":[ + { + "nf-role":"vPE", + "naming-type":"VNF", + "naming-recipe":"COMPLEX|NF-NAMING-CODE|Field2|Field3|Field4", + "name-operation":"", + "naming-properties":[ + { + "property-name":"COMPLEX" + }, + { + "property-name":"NF-NAMING-CODE", + "property-value":"xyz" + } + ] + } + ] + } + } +}
\ No newline at end of file diff --git a/ms/neng/src/test/resources/sample_policy.json b/ms/neng/src/test/resources/sample_policy.json new file mode 100644 index 00000000..2bb63122 --- /dev/null +++ b/ms/neng/src/test/resources/sample_policy.json @@ -0,0 +1,217 @@ +{ + "input":{ + "naming-model":{ + "policy-instance-name":"1806NameGenerationPolicyForSRIOV", + "naming-models":[ + { + "nf-role":"vPE", + "naming-type":"VNF", + "naming-recipe":"COMPLEX|SEQUENCE|NF_NAMING_CODE", + "name-operation":"", + "naming-properties":[ + { + "property-name":"COMPLEX", + "property-operation":"substr(0,4)" + }, + { + "property-name":"SEQUENCE", + "increment-sequence":{ + "scope":"ENTIRETY", + "start-value":"001", + "max":"zzz", + "increment":"1", + "sequence-type":"alpha-numeric", + "length":"3" + } + }, + { + "property-name":"NF_NAMING_CODE" + } + ] + }, + { + "nf-role":"vPE", + "naming-type":"VM", + "naming-recipe":"VNF_NAME|SEQUENCE|NFC_NAMING_CODE", + "name-operation":"", + "naming-properties":[ + { + "property-name":"VNF_NAME" + }, + { + "property-name":"SEQUENCE", + "increment-sequence":{ + "scope":"ENTIRETY", + "start-value":"001", + "max":"999", + "increment":"1", + "sequence-type":"numeric", + "length":"3" + } + }, + { + "property-name":"NFC_NAMING_CODE", + "property-operation":"substr(1,3)" + } + ] + }, + { + "nf-role":"vPE", + "naming-type":"VNFC", + "naming-recipe":"VNF_NAME|SEQUENCE|NFC_NAMING_CODE", + "name-operation":"", + "naming-properties":[ + { + "property-name":"VNF_NAME" + }, + { + "property-name":"SEQUENCE", + "increment-sequence":{ + "scope":"ENTIRETY", + "start-value":"001", + "max":"999", + "increment":"1", + "sequence-type":"numeric", + "length":"3" + } + }, + { + "property-name":"NFC_NAMING_CODE", + "property-operation":"substr(1,3)" + } + ] + }, + { + "nf-role":"vPE", + "naming-type":"VF-MODULE", + "naming-recipe":"VNF_NAME|DELIMITER|VF_MODUEL_LABLE|DELIMITER|VF_MODULE_TYPE|DELIMITER|SEQUENCE", + "name-operation":"", + "naming-properties":[ + { + "property-name":"VNF_NAME" + }, + { + "property-name":"DELIMITER", + "property-value":"_" + }, + { + "property-name":"VF_MODUEL_LABLE" + }, + { + "property-name":"VF_MODUEL_TYPE" + }, + { + "property-name":"SEQUENCE", + "increment-sequence":{ + "scope":"PRECEEDING", + "start-value":"01", + "max":"99", + "increment":"1", + "sequence-type":"numeric", + "length":"2" + } + } + ] + }, + { + "nf-role":"vPE", + "naming-type":"VOLUME_GROUP", + "naming-recipe":"VF-MODULE_NAME|DELIMITER|CONSTANT", + "name-operation":"", + "naming-properties":[ + { + "property-name":"VF-MODULE_NAME" + }, + { + "property-name":"DELIMITER", + "property-value":"_" + }, + { + "property-name":"CONSTANT", + "property-value":"volumegroup" + } + ] + }, + { + "nf-role":"vPE", + "naming-type":"VOLUME", + "naming-recipe":"VOLUME_GROUP_NAME|DELIMITER|CONSTANT|DELIMITER|SEQUENCE", + "name-operation":"", + "naming-properties":[ + { + "property-name":"VOLUME_GROUP_NAME" + }, + { + "property-name":"DELIMITER", + "property-value":"_" + }, + { + "property-name":"CONSTANT", + "property-value":"volume" + }, + { + "property-name":"SEQUENCE", + "increment-sequence":{ + "scope":"PRECEEDING", + "start-value":"01", + "max":"99", + "increment":"1", + "sequence-type":"numeric", + "length":"2" + } + } + ] + }, + { + "nf-role":"vPE", + "naming-type":"AFFINITY", + "naming-recipe":"VNF_NAME|DELIMITER|CONSTANT", + "name-operation":"", + "naming-properties":[ + { + "property-name":"VNF_NAME" + }, + { + "property-name":"DELIMITER", + "property-value":"_" + }, + { + "property-name":"CONSTANT", + "property-value":"affinity" + } + ] + }, + { + "nf-role":"vPE", + "naming-type":"INTERNAL_NETWORK", + "naming-recipe":"VNF_NAME|DELIMITER|CONSTANT|SEQUENCE", + "name-operation":"", + "naming-properties":[ + { + "property-name":"VNF_NAME" + }, + { + "property-name":"DELIMITER", + "property-value":"_" + }, + { + "property-name":"CONSTANT", + "property-value":"INT" + }, + { + "property-name":"SEQUENCE", + "increment-sequence":{ + "scope":"PRECEEDING", + "start-value":"01", + "max":"99", + "increment":"1", + "sequence-type":"numeric", + "length":"2" + } + } + ] + } + ] + } + } +}
\ No newline at end of file diff --git a/ms/neng/src/test/resources/vnf_and_vm_policy.json b/ms/neng/src/test/resources/vnf_and_vm_policy.json new file mode 100644 index 00000000..720a2c3f --- /dev/null +++ b/ms/neng/src/test/resources/vnf_and_vm_policy.json @@ -0,0 +1,63 @@ +{ + "input":{ + "naming-model":{ + "policy-instance-name":"SDNC_Policy.Config_MS_VNF_VM_NamingPolicy", + "naming-models":[ + { + "nf-role":"vPE", + "naming-type":"VNF", + "naming-recipe":"COMPLEX|SEQUENCE|NF-NAMING-CODE", + "name-operation":"", + "naming-properties":[ + { + "property-name":"COMPLEX", + "property-operation":"substr(0,5)" + }, + { + "property-name":"SEQUENCE", + "increment-sequence":{ + "scope":"ENTIRETY", + "start-value":"001", + "max":"zzz", + "increment":"1", + "sequence-type":"alpha-numeric", + "length":"3" + } + }, + { + "property-name":"NF-NAMING-CODE", + "property-value":"ve1" + } + ] + }, + { + "nf-role":"vPE", + "naming-type":"VM", + "naming-recipe":"VNF_NAME|NFC_NAMING_CODE|SEQUENCE", + "name-operation":"", + "naming-properties":[ + { + "property-name":"VNF_NAME" + }, + { + "property-name":"SEQUENCE", + "increment-sequence":{ + "scope":"ENTIRETY", + "start-value":"001", + "max":"999", + "increment":"1", + "sequence-type":"numeric", + "length":"3" + } + }, + { + "property-name":"NFC_NAMING_CODE", + "property-value":"mts", + "property-operation":"substr(0,3)" + } + ] + } + ] + } + } +} diff --git a/ms/neng/src/test/resources/vnf_policy_no_seq.json b/ms/neng/src/test/resources/vnf_policy_no_seq.json new file mode 100644 index 00000000..806471b8 --- /dev/null +++ b/ms/neng/src/test/resources/vnf_policy_no_seq.json @@ -0,0 +1,24 @@ +{ + "input":{ + "naming-model":{ + "policy-instance-name":"SDNC_Policy.Config_MS_VNFCNamingPolicy_no_seq", + "naming-models":[ + { + "nf-role":"vPE", + "naming-type":"VNF", + "naming-recipe":"COMPLEX|NF-NAMING-CODE", + "name-operation":"", + "naming-properties":[ + { + "property-name":"COMPLEX" + }, + { + "property-name":"NF-NAMING-CODE", + "property-value":"xyz" + } + ] + } + ] + } + } +}
\ No newline at end of file diff --git a/ms/neng/src/test/resources/vnf_policy_seq.json b/ms/neng/src/test/resources/vnf_policy_seq.json new file mode 100644 index 00000000..4d7d26ec --- /dev/null +++ b/ms/neng/src/test/resources/vnf_policy_seq.json @@ -0,0 +1,36 @@ +{ + "input":{ + "naming-model":{ + "policy-instance-name":"SDNC_Policy.Config_MS_VNFNamingPolicy_seq", + "naming-models":[ + { + "nf-role":"vPE", + "naming-type":"VNF", + "naming-recipe":"COMPLEX|SEQUENCE|NF-NAMING-CODE", + "name-operation":"", + "naming-properties":[ + { + "property-name":"COMPLEX", + "property-operation":"substr(0,5)" + }, + { + "property-name":"SEQUENCE", + "increment-sequence":{ + "scope":"ENTIRETY", + "start-value":"001", + "max":"zzz", + "increment":"1", + "sequence-type":"alpha-numeric", + "length":"3" + } + }, + { + "property-name":"NF-NAMING-CODE", + "property-value":"ve1" + } + ] + } + ] + } + } +}
\ No newline at end of file |