diff options
Diffstat (limited to 'components/bbs-event-processor/src/test/java/org/onap/bbs/event/processor/tasks/AaiClientTaskImplTest.java')
-rw-r--r-- | components/bbs-event-processor/src/test/java/org/onap/bbs/event/processor/tasks/AaiClientTaskImplTest.java | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/components/bbs-event-processor/src/test/java/org/onap/bbs/event/processor/tasks/AaiClientTaskImplTest.java b/components/bbs-event-processor/src/test/java/org/onap/bbs/event/processor/tasks/AaiClientTaskImplTest.java new file mode 100644 index 00000000..db5f7cb1 --- /dev/null +++ b/components/bbs-event-processor/src/test/java/org/onap/bbs/event/processor/tasks/AaiClientTaskImplTest.java @@ -0,0 +1,239 @@ +/* + * ============LICENSE_START======================================================= + * BBS-RELOCATION-CPE-AUTHENTICATION-HANDLER + * ================================================================================ + * Copyright (C) 2019 NOKIA 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.bbs.event.processor.tasks; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.google.gson.GsonBuilder; +import com.google.gson.TypeAdapterFactory; + +import java.time.Duration; +import java.util.Arrays; +import java.util.Collections; +import java.util.ServiceLoader; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.onap.bbs.event.processor.exceptions.AaiTaskException; +import org.onap.bbs.event.processor.model.ImmutableMetadataEntryAaiObject; +import org.onap.bbs.event.processor.model.ImmutableMetadataListAaiObject; +import org.onap.bbs.event.processor.model.ImmutablePnfAaiObject; +import org.onap.bbs.event.processor.model.ImmutablePropertyAaiObject; +import org.onap.bbs.event.processor.model.ImmutableRelationshipDataEntryAaiObject; +import org.onap.bbs.event.processor.model.ImmutableRelationshipEntryAaiObject; +import org.onap.bbs.event.processor.model.ImmutableRelationshipListAaiObject; +import org.onap.bbs.event.processor.model.ImmutableServiceInstanceAaiObject; +import org.onap.bbs.event.processor.model.MetadataListAaiObject; +import org.onap.bbs.event.processor.model.PnfAaiObject; +import org.onap.bbs.event.processor.model.RelationshipListAaiObject; +import org.onap.bbs.event.processor.model.ServiceInstanceAaiObject; +import org.onap.bbs.event.processor.utilities.AaiReactiveClient; + +import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; + +class AaiClientTaskImplTest { + + private AaiReactiveClient reactiveClient; + + private AaiClientTask task; + + @BeforeEach + void init() { + GsonBuilder gsonBuilder = new GsonBuilder(); + ServiceLoader.load(TypeAdapterFactory.class).forEach(gsonBuilder::registerTypeAdapterFactory); + reactiveClient = Mockito.mock(AaiReactiveClient.class); + task = new AaiClientTaskImpl(reactiveClient); + } + + @Test + void passingEmptyPnfObject_NothingHappens() throws AaiTaskException { + when(reactiveClient.getPnfObjectDataFor(any(String.class))).thenReturn(Mono.empty()); + Mono<PnfAaiObject> pnf = task.executePnfRetrieval("Empty PNF task", "some-url"); + + verify(reactiveClient).getPnfObjectDataFor("some-url"); + assertNull(pnf.block(Duration.ofSeconds(5))); + } + + @Test + void passingEmptyServiceInstanceObject_NothingHappens() throws AaiTaskException { + when(reactiveClient.getServiceInstanceObjectDataFor(any(String.class))).thenReturn(Mono.empty()); + Mono<ServiceInstanceAaiObject> serviceInstance = + task.executeServiceInstanceRetrieval("Empty Service Instance task", "some-url"); + + verify(reactiveClient).getServiceInstanceObjectDataFor("some-url"); + assertNull(serviceInstance.block(Duration.ofSeconds(5))); + } + + @Test + void passingPnfObject_taskSucceeds() throws AaiTaskException { + + String pnfName = "pnf-1"; + String attachmentPoint = "olt1-1-1"; + + // Build Relationship Data + RelationshipListAaiObject.RelationshipEntryAaiObject firstRelationshipEntry = + ImmutableRelationshipEntryAaiObject.builder() + .relatedTo("service-instance") + .relatedLink("/aai/v14/business/customers/customer/Demonstration/service-subscriptions" + + "/service-subscription/BBS/service-instances" + + "/service-instance/84003b26-6b76-4c75-b805-7b14ab4ffaef") + .relationshipLabel("org.onap.relationships.inventory.ComposedOf") + .relationshipData(Arrays.asList( + ImmutableRelationshipDataEntryAaiObject.builder() + .relationshipKey("customer.global-customer-id") + .relationshipValue("Demonstration").build(), + ImmutableRelationshipDataEntryAaiObject.builder() + .relationshipKey("service-subscription.service-type") + .relationshipValue("BBS").build(), + ImmutableRelationshipDataEntryAaiObject.builder() + .relationshipKey("service-instance.service-instance-id") + .relationshipValue("84003b26-6b76-4c75-b805-7b14ab4ffaef").build()) + ) + .relatedToProperties(Collections.singletonList( + ImmutablePropertyAaiObject.builder() + .propertyKey("service-instance.service-instance-name") + .propertyValue("bbs-instance").build()) + ) + .build(); + + RelationshipListAaiObject.RelationshipEntryAaiObject secondRelationshipEntry = + ImmutableRelationshipEntryAaiObject.builder() + .relatedTo("logical-link") + .relatedLink("/network/logical-links/logical-link/" + attachmentPoint) + .relationshipData(Collections.singletonList(ImmutableRelationshipDataEntryAaiObject.builder() + .relationshipKey("logical-link.link-name") + .relationshipValue(attachmentPoint).build())) + .build(); + + RelationshipListAaiObject relationshipListAaiObject = ImmutableRelationshipListAaiObject.builder() + .relationshipEntries(Arrays.asList(firstRelationshipEntry, secondRelationshipEntry)) + .build(); + + // Finally construct PNF object data + PnfAaiObject pnfAaiObject = ImmutablePnfAaiObject.builder() + .pnfName(pnfName) + .isInMaintenance(true) + .relationshipListAaiObject(relationshipListAaiObject) + .build(); + + when(reactiveClient.getPnfObjectDataFor(any(String.class))).thenReturn(Mono.just(pnfAaiObject)); + Mono<PnfAaiObject> pnf = task.executePnfRetrieval("Normal PNF retrieval task", "some-url"); + + verify(reactiveClient).getPnfObjectDataFor("some-url"); + assertNotNull(pnf.block(Duration.ofSeconds(5))); + + StepVerifier.create(pnf) + .expectSubscription() + .consumeNextWith(aPnf -> { + Assertions.assertEquals(pnfName, aPnf.getPnfName(), "PNF Name in response does not match"); + String extractedAttachmentPoint = aPnf.getRelationshipListAaiObject().getRelationshipEntries() + .stream() + .filter(e -> e.getRelatedTo().equals("logical-link")) + .flatMap(e -> e.getRelationshipData().stream()) + .filter(d -> d.getRelationshipKey().equals("logical-link.link-name")) + .map(RelationshipListAaiObject.RelationshipDataEntryAaiObject::getRelationshipValue) + .findFirst().orElseThrow(AaiClientTaskTestException::new); + Assertions.assertEquals(attachmentPoint, extractedAttachmentPoint, + "Attachment point in response does not match"); + }) + .verifyComplete(); + } + + @Test + void passingServiceInstanceObject_taskSucceeds() throws AaiTaskException { + + String serviceInstanceId = "84003b26-6b76-4c75-b805-7b14ab4ffaef"; + String orchestrationStatus = "active"; + + // Build Relationship Data + RelationshipListAaiObject.RelationshipEntryAaiObject relationshipEntry = + ImmutableRelationshipEntryAaiObject.builder() + .relatedTo("service-instance") + .relatedLink("/aai/v14/business/customers/customer/Demonstration/service-subscriptions" + + "/service-subscription/BBS-CFS/service-instances" + + "/service-instance/bb374844-44e4-488f-8381-fb5a0e3e6989") + .relationshipLabel("org.onap.relationships.inventory.ComposedOf") + .relationshipData(Collections.singletonList(ImmutableRelationshipDataEntryAaiObject.builder() + .relationshipKey("service-instance.service-instance-id") + .relationshipValue("bb374844-44e4-488f-8381-fb5a0e3e6989").build())) + .build(); + + RelationshipListAaiObject relationshipListAaiObject = ImmutableRelationshipListAaiObject.builder() + .relationshipEntries(Collections.singletonList(relationshipEntry)) + .build(); + + MetadataListAaiObject.MetadataEntryAaiObject metadataEntry = + ImmutableMetadataEntryAaiObject.builder() + .metaname("cvlan") + .metavalue("1005") + .build(); + + MetadataListAaiObject metadataListAaiObject = ImmutableMetadataListAaiObject.builder() + .metadataEntries(Collections.singletonList(metadataEntry)) + .build(); + + // Finally construct Service Instance object data + ServiceInstanceAaiObject serviceInstanceAaiObject = ImmutableServiceInstanceAaiObject.builder() + .serviceInstanceId(serviceInstanceId) + .orchestrationStatus(orchestrationStatus) + .relationshipListAaiObject(relationshipListAaiObject) + .metadataListAaiObject(metadataListAaiObject) + .build(); + + when(reactiveClient.getServiceInstanceObjectDataFor(any(String.class))) + .thenReturn(Mono.just(serviceInstanceAaiObject)); + Mono<ServiceInstanceAaiObject> serviceInstance = + task.executeServiceInstanceRetrieval("Normal Service Instance retrieval task", + "some-url"); + + verify(reactiveClient).getServiceInstanceObjectDataFor("some-url"); + assertNotNull(serviceInstance.block(Duration.ofSeconds(5))); + + StepVerifier.create(serviceInstance) + .expectSubscription() + .consumeNextWith(instance -> { + Assertions.assertEquals(serviceInstanceId, instance.getServiceInstanceId(), + "Service Instance ID in response does not match"); + + MetadataListAaiObject extractedMetadataListObject = + instance.getMetadataListAaiObject().orElseThrow(AaiClientTaskTestException::new); + + MetadataListAaiObject.MetadataEntryAaiObject extractedMetadataEntry = + extractedMetadataListObject.getMetadataEntries() + .stream() + .filter(m -> m.getMetaname().equals("cvlan")) + .findFirst().orElseThrow(AaiClientTaskTestException::new); + + Assertions.assertEquals("1005", extractedMetadataEntry.getMetavalue(), + "CVLAN in response does not match"); + }) + .verifyComplete(); + } + + private static class AaiClientTaskTestException extends RuntimeException {} +}
\ No newline at end of file |