}
/**
- * invalid VIM type results in failure
- */
- @Test
- public void testInstantiationWithInvalidVimType() throws Exception {
- //given
- VnfInstantiateRequest instantiationRequest = prepareInstantiationRequest(VimInfo.VimInfoTypeEnum.OTHER_VIM_INFO, false);
- when(vnfApi.vnfsPost(createRequest.capture(), eq(NOKIA_LCM_API_VERSION))).thenReturn(buildObservable(vnfInfo));
- when(logger.isInfoEnabled()).thenReturn(false);
- //when
- try {
- lifecycleManager.createAndInstantiate(VNFM_ID, instantiationRequest, restResponse);
- //verify
- fail();
- } catch (Exception e) {
- assertEquals("Only OPENSTACK_V2_INFO, OPENSTACK_V3_INFO and VMWARE_VCLOUD_INFO is the supported VIM types", e.getMessage());
- }
- verify(vnfApi, never()).vnfsPost(Mockito.any(), Mockito.any());
- verify(logger, never()).info(eq("Starting {} operation on VNF with {} identifier with {} parameter"), eq("creation"), eq("not yet specified"), anyString());
- verify(logger, never()).info(eq("Starting {} operation on VNF with {} identifier with {} parameter"), eq("instantiation"), eq(VNF_ID), anyString());
- verify(logger).error("Only OPENSTACK_V2_INFO, OPENSTACK_V3_INFO and VMWARE_VCLOUD_INFO is the supported VIM types");
- }
-
- /**
- * test instantiation with KeyStone V2 based with SSL
+ * test instantiation with KeyStone V2TOSCA based with SSL
*/
@Test
public void testInstantiationV2WithSsl() throws Exception {
assertTrue(actualVim.getInterfaceInfo().isSkipCertificateHostnameCheck());
}
- /**
- * verify backward compatibility with Amsterdam release
- */
- @Test
- public void testInstantiationV3WithNoDomain() throws Exception {
- additionalParam.setInstantiationLevel(INSTANTIATION_LEVEL);
- additionalParam.setDomain("myDomain");
- VnfInstantiateRequest instantiationRequest = prepareInstantiationRequest(VimInfo.VimInfoTypeEnum.OPENSTACK_V3_INFO, false);
- vimInfo.setDomain(null);
- when(vnfApi.vnfsPost(createRequest.capture(), eq(NOKIA_LCM_API_VERSION))).thenReturn(buildObservable(vnfInfo));
- when(vfcGrantManager.requestGrantForInstantiate(VNFM_ID, VNF_ID, VIM_ID, ONAP_CSAR_ID, INSTANTIATION_LEVEL, cbamVnfdContent, JOB_ID)).thenReturn(grantResponse);
- grantResponse.setVimId(VIM_ID);
- GrantVNFResponseVimAccessInfo accessInfo = new GrantVNFResponseVimAccessInfo();
- accessInfo.setTenant(TENANT);
- vimInfo.setSslInsecure(null);
- grantResponse.setAccessInfo(accessInfo);
- ArgumentCaptor<InstantiateVnfRequest> actualInstantiationRequest = ArgumentCaptor.forClass(InstantiateVnfRequest.class);
- when(vnfApi.vnfsVnfInstanceIdInstantiatePost(eq(VNF_ID), actualInstantiationRequest.capture(), eq(NOKIA_LCM_API_VERSION))).thenReturn(buildObservable(instantiationOperationExecution));
- //when
- VnfInstantiateResponse response = lifecycleManager.createAndInstantiate(VNFM_ID, instantiationRequest, restResponse);
- waitForJobToFinishInJobManager(finished);
- assertEquals(1, actualInstantiationRequest.getValue().getVims().size());
- //verify
- OPENSTACKV3INFO actualVim = (OPENSTACKV3INFO) actualInstantiationRequest.getValue().getVims().get(0);
- assertEquals(VIM_ID, actualVim.getId());
- assertEquals(VimInfo.VimInfoTypeEnum.OPENSTACK_V3_INFO, actualVim.getVimInfoType());
- assertEquals("cloudUrl", actualVim.getInterfaceInfo().getEndpoint());
- //FIXME assertEquals();actualVim.getInterfaceInfo().getTrustedCertificates());
- assertEquals("vimPassword", actualVim.getAccessInfo().getPassword());
- assertEquals("regionId", actualVim.getAccessInfo().getRegion());
- assertEquals("myTenant", actualVim.getAccessInfo().getProject());
- assertEquals("myDomain", actualVim.getAccessInfo().getDomain());
- assertEquals("vimUsername", actualVim.getAccessInfo().getUsername());
- assertTrue(actualVim.getInterfaceInfo().isSkipCertificateVerification());
- assertTrue(actualVim.getInterfaceInfo().isSkipCertificateHostnameCheck());
- verify(logger).warn("Setting domain from additional parameters");
- }
-
- /**
- * verify backward compatibility with Amsterdam release
- * if no domain is specified error is propagated
- */
- @Test
- public void testInstantiationV3WithNoDomainFail() throws Exception {
- VnfInstantiateRequest instantiationRequest = prepareInstantiationRequest(VimInfo.VimInfoTypeEnum.OPENSTACK_V3_INFO, false);
- vimInfo.setDomain(null);
- when(vnfApi.vnfsPost(createRequest.capture(), eq(NOKIA_LCM_API_VERSION))).thenReturn(buildObservable(vnfInfo));
- additionalParam.setInstantiationLevel(INSTANTIATION_LEVEL);
- when(vfcGrantManager.requestGrantForInstantiate(VNFM_ID, VNF_ID, VIM_ID, ONAP_CSAR_ID, INSTANTIATION_LEVEL, cbamVnfdContent, JOB_ID)).thenReturn(grantResponse);
- grantResponse.setVimId(VIM_ID);
- GrantVNFResponseVimAccessInfo accessInfo = new GrantVNFResponseVimAccessInfo();
- accessInfo.setTenant(TENANT);
- vimInfo.setSslInsecure(null);
- grantResponse.setAccessInfo(accessInfo);
- ArgumentCaptor<InstantiateVnfRequest> actualInstantiationRequest = ArgumentCaptor.forClass(InstantiateVnfRequest.class);
- when(vnfApi.vnfsVnfInstanceIdInstantiatePost(eq(VNF_ID), actualInstantiationRequest.capture(), eq(NOKIA_LCM_API_VERSION))).thenReturn(buildObservable(instantiationOperationExecution));
- //when
- VnfInstantiateResponse response = lifecycleManager.createAndInstantiate(VNFM_ID, instantiationRequest, restResponse);
- waitForJobToFinishInJobManager(finished);
- assertEquals(0, actualInstantiationRequest.getAllValues().size());
- //verify
- verify(logger).error("The cloud did not supply the cloud domain (Amsterdam release) and was not supplied as additional data");
- }
-
/**
* test instantiation with vcloud
*/
fail();
} catch (RuntimeException e) {
assertEquals(expectedException, e.getCause().getCause());
- verify(logger).error("Unable to set the externalVnfmId,onapCsarId properties on the VNF with " + VNF_ID +" identifier", expectedException);
+ verify(logger).error("Unable to set the externalVnfmId,onapCsarId properties on the VNF with " + VNF_ID + " identifier", expectedException);
}
}
notificationIsProcessedBeforeDeletingTheVnf.verify(vnfApi).vnfsVnfInstanceIdDelete(VNF_ID, NOKIA_LCM_API_VERSION);
}
- /**
- * instantiation with missing ONAP csarId to instantiation extra param result in failure
- */
- @Test
- public void testMissingVnfParameters() throws Exception {
- //given
- VnfInstantiateRequest instantiationRequest = prepareInstantiationRequest(VimInfo.VimInfoTypeEnum.OPENSTACK_V2_INFO, false);
- String src = "{ \"inputs\" : { \"vnfs\" : { \"" + ONAP_CSAR_ID + "invalid" + "\" : {}}}, \"vimId\" : \"" + VIM_ID + "\"}";
- instantiationRequest.setAdditionalParam(new JsonParser().parse(src));
- //when
- try {
- VnfInstantiateResponse response = lifecycleManager.createAndInstantiate(VNFM_ID, instantiationRequest, restResponse);
- fail();
- } catch (Exception e) {
- assertEquals("The additional parameter section does not contain settings for VNF with myOnapCsarId CSAR id", e.getMessage());
- verify(logger).error("The additional parameter section does not contain settings for VNF with myOnapCsarId CSAR id");
- }
- }
-
/**
* test explicit forceful termination
*/
assertTrue("{\"jobId\":\"myJobId\",\"a\":\"b\"}".equals(new Gson().toJson(sRequest.getAdditionalParams())) || "{\"a\":\"b\",\"jobId\":\"myJobId\"}".equals(new Gson().toJson(sRequest.getAdditionalParams())));
verify(jobManager).spawnJob(VNF_ID, restResponse);
verify(logger).info(eq("Starting {} operation on VNF with {} identifier with {} parameter"), eq("scale"), eq(VNF_ID), anyString());
+ }
+ /**
+ * test scale a non scalable VNF
+ */
+ @Test
+ public void testScaleNonScalableVnf() throws Exception {
+ cbamVnfdContent = new String(readAllBytes(Paths.get(TestVfcGrantManager.class.getResource("/unittests/vnfd.instantiation.yaml").toURI())));
+ when(catalogManager.getCbamVnfdContent(VNFM_ID, CBAM_VNFD_ID)).thenReturn(cbamVnfdContent);
+ VnfScaleRequest scaleRequest = new VnfScaleRequest();
+ scaleRequest.setNumberOfSteps("2");
+ scaleRequest.setAspectId("myAspect");
+ scaleRequest.setType(ScaleDirection.IN);
+ scaleRequest.setAdditionalParam(new JsonParser().parse("{ \"a\" : \"b\", \"c\" : \"d\" }"));
+ scaleOperationExecution.setStatus(OperationStatus.FINISHED);
+ when(vnfApi.vnfsVnfInstanceIdGet(VNF_ID, NOKIA_LCM_API_VERSION)).thenReturn(buildObservable(vnfInfo));
+ VnfProperty prop = new VnfProperty();
+ prop.setValue(ONAP_CSAR_ID);
+ prop.setName(LifecycleManager.ONAP_CSAR_ID);
+ vnfInfo.getExtensions().add(prop);
+ vnfInfo.getOperationExecutions().add(instantiationOperationExecution);
+ String instantiationParams = "{ \"vims\" : [ { \"id\" : \"" + VIM_ID + "\" } ] }";
+ when(operationExecutionApi.operationExecutionsOperationExecutionIdOperationParamsGet(instantiationOperationExecution.getId(), NOKIA_LCM_API_VERSION)).thenReturn(buildObservable(new JsonParser().parse(instantiationParams)));
+ //when
+ JobInfo job = lifecycleManager.scaleVnf(VNFM_ID, VNF_ID, scaleRequest, restResponse);
+ //verify
+ waitForJobToFinishInJobManager(finished);
+ assertEquals(0, actualScaleRequest.getAllValues().size());
+ verify(logger).error("Unable to find operation named scale");
}
/**
* the VNFM should tolerate that no additional params were supplied
*/
@Test
- public void testScaleWithoutAddtionalParams() throws Exception {
+ public void testScaleWithoutAdditionalParams() throws Exception {
VnfScaleRequest scaleRequest = new VnfScaleRequest();
scaleRequest.setNumberOfSteps("2");
scaleRequest.setAspectId("myAspect");
scaleRequest.setType(ScaleDirection.IN);
scaleRequest.setAdditionalParam(null);
scaleOperationExecution.setStatus(OperationStatus.FINISHED);
+
when(vnfApi.vnfsVnfInstanceIdGet(VNF_ID, NOKIA_LCM_API_VERSION)).thenReturn(buildObservable(vnfInfo));
VnfProperty prop = new VnfProperty();
prop.setValue(ONAP_CSAR_ID);
}
}
- public static class X{
- public Map<String, String> getInputs() {
- return inputs;
- }
-
- public void setInputs(Map<String, String> inputs) {
- this.inputs = inputs;
- }
-
- @SerializedName("inputs")
- public Map<String,String> inputs = new HashMap<String,String>();
-
- public String vimId;
-
- public String properties;
- }
-
private VnfInstantiateRequest prepareInstantiationRequest(VimInfo.VimInfoTypeEnum cloudType, boolean addExtension) {
VnfInstantiateRequest instantiationRequest = new VnfInstantiateRequest();
instantiationRequest.setVnfPackageId(ONAP_CSAR_ID);
additionalParam.setInstantiationLevel("level1");
switch (cloudType) {
case OPENSTACK_V2_INFO:
- additionalParam.setVimType(VimInfo.VimInfoTypeEnum.OPENSTACK_V2_INFO);
+ vimInfo.setType("openstack");
break;
case OPENSTACK_V3_INFO:
- additionalParam.setVimType(VimInfo.VimInfoTypeEnum.OPENSTACK_V3_INFO);
+ vimInfo.setType("openstack");
vimInfo.setDomain("myDomain");
break;
case VMWARE_VCLOUD_INFO:
- additionalParam.setVimType(VimInfo.VimInfoTypeEnum.VMWARE_VCLOUD_INFO);
+ vimInfo.setType("vmware");
break;
- default:
- additionalParam.setVimType(VimInfo.VimInfoTypeEnum.OTHER_VIM_INFO);
}
Map<String, List<NetworkAddress>> exteranalConnectionPointAddresses = new HashMap<>();
image.setVnfdSoftwareImageId("imageId");
additionalParam.getSoftwareImages().add(image);
additionalParam.setAdditionalParams(new JsonParser().parse("{ \"a\" : \"b\" }"));
- if(addExtensions) {
+ if (addExtensions) {
VnfProperty p1 = new VnfProperty();
p1.setName("n1");
p1.setValue(Lists.newArrayList("a", "b"));
assertTrue(actualVim.getInterfaceInfo().isSkipCertificateHostnameCheck());
}
+ /**
+ * additional params of instantiation may be passed as directly attached artifact
+ */
+ @Test
+ public void testVnfConfigurationBasedOnArtifactParameters() throws Exception {
+ VnfInstantiateRequest instantiationRequest = prepareInstantiationRequest(VimInfo.VimInfoTypeEnum.OPENSTACK_V3_INFO, false);
+ when(vnfApi.vnfsPost(createRequest.capture(), eq(NOKIA_LCM_API_VERSION))).thenReturn(buildObservable(vnfInfo));
+ additionalParam.setInstantiationLevel(INSTANTIATION_LEVEL);
+ when(vfcGrantManager.requestGrantForInstantiate(VNFM_ID, VNF_ID, VIM_ID, ONAP_CSAR_ID, INSTANTIATION_LEVEL, cbamVnfdContent, JOB_ID)).thenReturn(grantResponse);
+ grantResponse.setVimId(VIM_ID);
+ GrantVNFResponseVimAccessInfo accessInfo = new GrantVNFResponseVimAccessInfo();
+ accessInfo.setTenant(TENANT);
+ grantResponse.setAccessInfo(accessInfo);
+ ArgumentCaptor<InstantiateVnfRequest> actualInstantiationRequest = ArgumentCaptor.forClass(InstantiateVnfRequest.class);
+ when(vnfApi.vnfsVnfInstanceIdInstantiatePost(eq(VNF_ID), actualInstantiationRequest.capture(), eq(NOKIA_LCM_API_VERSION))).thenReturn(buildObservable(instantiationOperationExecution));
+ when(catalogManager.getEtsiConfiguration(ONAP_CSAR_ID)).thenReturn(new Gson().toJson(additionalParam));
+ X x = new X();
+ x.vimId = VIM_ID;
+ JsonElement additionalParam = new Gson().toJsonTree(x);
+ instantiationRequest.setAdditionalParam(additionalParam);
+ //when
+ VnfInstantiateResponse response = lifecycleManager.createAndInstantiate(VNFM_ID, instantiationRequest, restResponse);
+ waitForJobToFinishInJobManager(finished);
+ assertEquals(1, actualInstantiationRequest.getValue().getVims().size());
+ //verify
+ OPENSTACKV3INFO actualVim = (OPENSTACKV3INFO) actualInstantiationRequest.getValue().getVims().get(0);
+ assertEquals(VIM_ID, actualVim.getId());
+ assertEquals(VimInfo.VimInfoTypeEnum.OPENSTACK_V3_INFO, actualVim.getVimInfoType());
+ assertEquals(Boolean.valueOf(parseBoolean(vimInfo.getSslInsecure())), actualVim.getInterfaceInfo().isSkipCertificateVerification());
+ assertEquals("cloudUrl", actualVim.getInterfaceInfo().getEndpoint());
+ //FIXME assertEquals();actualVim.getInterfaceInfo().getTrustedCertificates());
+ assertEquals("vimPassword", actualVim.getAccessInfo().getPassword());
+ assertEquals("regionId", actualVim.getAccessInfo().getRegion());
+ assertEquals("myTenant", actualVim.getAccessInfo().getProject());
+ assertEquals("myDomain", actualVim.getAccessInfo().getDomain());
+ assertEquals("vimUsername", actualVim.getAccessInfo().getUsername());
+ assertTrue(actualVim.getInterfaceInfo().isSkipCertificateVerification());
+ assertTrue(actualVim.getInterfaceInfo().isSkipCertificateHostnameCheck());
+ }
+
/**
* additional params of instantiation may be passed as VNF property
*/
assertTrue(actualVim.getInterfaceInfo().isSkipCertificateHostnameCheck());
verify(logger).info("The instantiation input for VNF with {} CSAR id does not have an " + LifecycleManager.ETSI_CONFIG + " section", ONAP_CSAR_ID);
}
+
+ public static class X {
+ @SerializedName("inputs")
+ public Map<String, String> inputs = new HashMap<String, String>();
+ public String vimId;
+ public String properties;
+
+ public Map<String, String> getInputs() {
+ return inputs;
+ }
+
+ public void setInputs(Map<String, String> inputs) {
+ this.inputs = inputs;
+ }
+ }
}