/* * Copyright (c) 2015 NEC Corporation. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.nic.gbp.renderer.impl; import static org.mockito.Matchers.any; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.isA; import static org.mockito.Mockito.spy; import java.util.concurrent.Executor; import com.google.common.util.concurrent.CheckedFuture; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.ServiceRegistration; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; /** * Unit test class for {@link GBPRenderer}. */ @PrepareForTest({GBPRendererHelper.class, FrameworkUtil.class}) @RunWith(PowerMockRunner.class) public class GBPRendererTest { /** * Object for the class GBPRenderer. */ private GBPRenderer gbpRenderer; /** * create a mock object for GBPRendererDataChangeListener class. */ @Mock GBPRendererDataChangeListener gbpRendererDataChangeListener; /** * create a mock object for DataBroker class. */ @Mock private DataBroker dataBroker; /** * create a mock object for the class Bundle. */ @Mock private Bundle bundle; /** * create a mock Object for the class BundleContext. */ @Mock private BundleContext context; /** * create a mock Object for the class ServiceRegistration. */ @Mock ServiceRegistration<GBPRenderer> nicConsoleRegistration; /** * create a mock Object for the class ListenerRegistration. */ @Mock ListenerRegistration<DataChangeListener> gbpRendererListener; /** * create a mock Object for the class WriteTransaction. */ @Mock WriteTransaction writeTransactionMock; /** * create a mock Object for the class CheckedFuture. */ @Mock CheckedFuture<Void, TransactionCommitFailedException> checkedFuture; @Before public void setUp() throws Exception { /** * Here creates objects and defines mocking functionality for mock * objects. */ gbpRenderer = new GBPRenderer(dataBroker); PowerMockito.mockStatic(FrameworkUtil.class); when(FrameworkUtil.getBundle(GBPRenderer.class)).thenReturn(bundle); when(bundle.getBundleContext()).thenReturn(context); when(context.registerService(GBPRenderer.class, gbpRenderer, null)) .thenReturn(nicConsoleRegistration); when(dataBroker.registerDataChangeListener( eq(LogicalDatastoreType.CONFIGURATION), eq(GBPRendererHelper.createIntentIid()), isA(GBPRendererDataChangeListener.class), eq(DataChangeScope.SUBTREE))). thenReturn(gbpRendererListener); when(writeTransactionMock.submit()).thenReturn(checkedFuture); when(dataBroker.newWriteOnlyTransaction()).thenReturn( writeTransactionMock); } /** * Test method for {@link GBPRenderer#init()}. */ @Test public void testinit() throws Exception { /** * It should initialize operational and default config data in MD-SAL * data store. */ gbpRenderer.init(); /** * Verifying context object invoking registerService method. */ verify(context).registerService(GBPRenderer.class, gbpRenderer, null); PowerMockito.verifyStatic(times(1)); } /** * Test method for {@link GBPRenderer#Close()}. */ @Test public void testClose() throws Exception { /** * Valid scenario - it should initialize operational and default config * data in MD-SAL data store and should close listeners properly. * Verifying nicConsoleRegistration object invoking unregister method. * Verifying gbpRendererListener object invoking close method. */ gbpRenderer.init(); gbpRenderer.close(); verify(nicConsoleRegistration).unregister(); verify(gbpRendererListener).close(); /** * Invalid scenario - it should not delete any node because of invalid * arguments passed as arguments. */ GBPRenderer gbpRendererCheck = spy(new GBPRenderer(null)); PowerMockito.mockStatic(GBPRendererHelper.class); gbpRendererCheck.close(); PowerMockito.verifyStatic(times(0)); } /** * Test method for {@link GBPRenderer#deleteNode()}. */ @Test public void testDeleteNode() throws Exception { /** * Valid scenario - it should retrieve proper transaction and delete * nodes from that transaction. */ gbpRenderer.close(); /** * Verifying writeTransactionMock object invoking delete method. * Verifying writeTransactionMock object invoking submit method. * Verifying checkedFuture object invoking addListner method. */ verify(writeTransactionMock).delete(any(LogicalDatastoreType.class), any(InstanceIdentifier.class)); verify(writeTransactionMock).submit(); verify(checkedFuture).addListener(any(Runnable.class), any(Executor.class)); } }