/*- * ============LICENSE_START======================================================= * ONAP * ================================================================================ * Copyright (C) 2020 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.policy.drools.apps.controller.usecases.step; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Map; import java.util.UUID; import java.util.concurrent.CompletableFuture; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.onap.policy.common.utils.coder.StandardCoderObject; import org.onap.policy.controlloop.VirtualControlLoopEvent; import org.onap.policy.controlloop.actor.aai.AaiActor; import org.onap.policy.controlloop.actor.aai.AaiGetTenantOperation; import org.onap.policy.controlloop.actorserviceprovider.ActorService; import org.onap.policy.controlloop.actorserviceprovider.Operation; import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome; import org.onap.policy.controlloop.actorserviceprovider.OperationProperties; import org.onap.policy.controlloop.actorserviceprovider.Operator; import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams; import org.onap.policy.controlloop.actorserviceprovider.spi.Actor; import org.onap.policy.controlloop.eventmanager.StepContext; public class AaiGetTenantStep2Test { private static final String MY_VSERVER = "my-vserver"; private static final UUID REQ_ID = UUID.randomUUID(); @Mock private Operator policyOperator; @Mock private Operation policyOperation; @Mock private Actor policyActor; @Mock private ActorService actors; @Mock private ControlLoopOperationParams params; @Mock private StepContext stepContext; @Mock private VirtualControlLoopEvent event; private CompletableFuture future; private Step2 master; private AaiGetTenantStep2 step; /** * Sets up. */ @Before public void setUp() { MockitoAnnotations.initMocks(this); future = new CompletableFuture<>(); when(params.toBuilder()).thenReturn(ControlLoopOperationParams.builder().actorService(actors) .requestId(REQ_ID)); // configure policy operation when(actors.getActor(AaiActor.NAME)).thenReturn(policyActor); when(policyActor.getOperator(AaiGetTenantOperation.NAME)).thenReturn(policyOperator); when(policyOperator.buildOperation(any())).thenReturn(policyOperation); when(policyOperation.start()).thenReturn(future); when(event.getAai()).thenReturn(Map.of(Step2.VSERVER_VSERVER_NAME, MY_VSERVER)); master = new Step2(stepContext, params, event); step = new AaiGetTenantStep2(master); } @Test public void testConstructor() { assertEquals(AaiActor.NAME, step.getActorName()); assertEquals(AaiGetTenantOperation.NAME, step.getOperationName()); assertSame(stepContext, step.stepContext); assertSame(event, step.event); // empty vserver name when(event.getAai()).thenReturn(Map.of(Step2.VSERVER_VSERVER_NAME, "")); assertThatIllegalArgumentException().isThrownBy(() -> new AaiGetTenantStep2(master)) .withMessage("missing " + Step2.VSERVER_VSERVER_NAME + " in enrichment data"); // missing vserver name when(event.getAai()).thenReturn(Map.of()); assertThatIllegalArgumentException().isThrownBy(() -> new AaiGetTenantStep2(master)) .withMessage("missing " + Step2.VSERVER_VSERVER_NAME + " in enrichment data"); } @Test public void testGetPropertyNames() { assertThat(step.getPropertyNames()).isEmpty(); } @Test public void testSetProperties() { step.init(); step.setProperties(); verify(policyOperation).setProperty(OperationProperties.AAI_TARGET_ENTITY, MY_VSERVER); } @Test public void testStart() { step.init(); assertTrue(step.start(100)); verify(policyOperation).start(); } /** * Tests start() when the data has already been retrieved. */ @Test public void testStartAlreadyHaveData() { when(stepContext.contains(AaiGetTenantOperation.getKey(MY_VSERVER))).thenReturn(true); step.init(); assertFalse(step.start(200)); verify(policyOperation, never()).start(); } @Test public void testSuccess() { StandardCoderObject data = new StandardCoderObject(); OperationOutcome outcome = new OperationOutcome(); outcome.setResponse(data); step.success(outcome); verify(stepContext).setProperty(AaiGetTenantOperation.getKey(MY_VSERVER), data); } }