/*- * ============LICENSE_START======================================================= * ONAP : APPC * ================================================================================ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Copyright (C) 2017 Amdocs * ============================================================================= * 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.appc.provider; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; import org.opendaylight.controller.sal.binding.api.NotificationProviderService; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.EvacuateInput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.EvacuateOutput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.MigrateInput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.MigrateOutput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.ModifyConfigInput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.ModifyConfigOutput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.RebuildInput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.RebuildOutput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.RestartInput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.RestartOutput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.SnapshotInput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.SnapshotOutput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.VmstatuscheckInput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.VmstatuscheckOutput; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.common.request.header.CommonRequestHeader; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.config.payload.ConfigPayload; import org.opendaylight.yang.gen.v1.org.onap.appc.rev160104.vnf.resource.VnfResource; import org.opendaylight.yangtools.yang.common.RpcResult; import org.onap.appc.provider.topology.TopologyService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.lang.reflect.Field; import org.onap.appc.provider.Whitebox; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @RunWith(MockitoJUnitRunner.class) public class AppcProviderTest extends AbstractDataBrokerTest { @Mock private CommonRequestHeader commonRequestHeader; @Mock private ConfigPayload configPayload; @Mock private VnfResource vnfResource; @Mock private TopologyService topologyService; private AppcProvider provider; private DataBroker dataBroker; /** * The @Before annotation is defined in the AbstractDataBrokerTest class. The method setupWithDataBroker is invoked * from inside the @Before method and is used to initialize the databroker with objects for a test runs. In our case * we use this oportunity to create an instance of our provider and initialize it (which registers it as a listener * etc). This method runs before every @Test method below. */ @Override protected void setupWithDataBroker(DataBroker dataBroker) { super.setupWithDataBroker(dataBroker); this.dataBroker = dataBroker; } @Before public void setUp() throws Exception { NotificationProviderService nps = mock(NotificationProviderService.class); RpcProviderRegistry registry = mock(RpcProviderRegistry.class); BindingAwareBroker.RpcRegistration rpcRegistration = mock(BindingAwareBroker.RpcRegistration.class); doReturn(rpcRegistration).when(registry).addRpcImplementation(any(), any()); provider = spy(new AppcProvider(dataBroker, nps, registry)); doReturn(topologyService).when(provider).getTopologyService(); } @Test public void testConstructor() throws Exception { Object executorService = Whitebox.getInternalState(provider, "executor"); Assert.assertNotNull(executorService); Object internalRpcRegistration = Whitebox.getInternalState(provider,"rpcRegistration"); Assert.assertNotNull(internalRpcRegistration); } @Test public void testClose() throws Exception { ExecutorService executorService = spy(Executors.newFixedThreadPool(1)); Whitebox.setInternalState(provider, "executor", executorService); BindingAwareBroker.RpcRegistration rpcRegistration = mock(BindingAwareBroker.RpcRegistration.class); Whitebox.setInternalState(provider, "rpcRegistration", rpcRegistration); provider.close(); verify(executorService, times(1)).shutdown(); verify(rpcRegistration, times(1)).close(); } @Test public void testModifyConfig() throws Exception { ModifyConfigInput modifyConfigInput = mock(ModifyConfigInput.class); doReturn(commonRequestHeader).when(modifyConfigInput).getCommonRequestHeader(); doReturn(configPayload).when(modifyConfigInput).getConfigPayload(); // mock output RpcResult modifyConfigOutput = mock(RpcResult.class); doReturn(modifyConfigOutput).when(topologyService).modifyConfig(any(), any()); Future> rpcResultFuture = provider.modifyConfig(modifyConfigInput); Assert.assertNotNull(rpcResultFuture); } @Test public void testRebuild() throws Exception { RebuildInput input = mock(RebuildInput.class); RpcResult output = mock(RpcResult.class); doReturn(vnfResource).when(input).getVnfResource(); doReturn(output).when(topologyService).rebuild(any(), any()); Future> rpcResultFuture = provider.rebuild(input); Assert.assertNotNull(rpcResultFuture); } @Test public void testRestart() throws Exception { RestartInput input = mock(RestartInput.class); RpcResult output = mock(RpcResult.class); doReturn(vnfResource).when(input).getVnfResource(); doReturn(output).when(topologyService).restart(any(), any()); Future> rpcResultFuture = provider.restart(input); Assert.assertNotNull(rpcResultFuture); } @Test public void testMigrate() throws Exception { MigrateInput input = mock(MigrateInput.class); RpcResult output = mock(RpcResult.class); doReturn(vnfResource).when(input).getVnfResource(); doReturn(output).when(topologyService).migrate(any(), any()); Future> rpcResultFuture = provider.migrate(input); Assert.assertNotNull(rpcResultFuture); } @Test public void testEvacuate() throws Exception { EvacuateInput input = mock(EvacuateInput.class); doReturn(vnfResource).when(input).getVnfResource(); Future> rpcResultFuture = provider.evacuate(input); Assert.assertNull(rpcResultFuture); } @Test public void testSnapshot() throws Exception { SnapshotInput input = mock(SnapshotInput.class); RpcResult output = mock(RpcResult.class); doReturn(vnfResource).when(input).getVnfResource(); doReturn(output).when(topologyService).snapshot(any(), any()); Future> rpcResultFuture = provider.snapshot(input); Assert.assertNotNull(rpcResultFuture); } @Test public void testVmstatuscheck() throws Exception { VmstatuscheckInput input = mock(VmstatuscheckInput.class); RpcResult output = mock(RpcResult.class); doReturn(vnfResource).when(input).getVnfResource(); doReturn(output).when(topologyService).vmstatuscheck(any(), any()); Future> rpcResultFuture = provider.vmstatuscheck(input); Assert.assertNotNull(rpcResultFuture); } @After public void tearDown() throws Exception { if (provider != null) { provider.close(); } } }