/* * Copyright (c) 2016 Cisco Systems, Inc. and others. 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.groupbasedpolicy.renderer.vpp.util; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Collection; import com.google.common.util.concurrent.SettableFuture; import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; public class GbpVppNetconfConnectionProbeTest { private final DataBroker dataBroker = mock(DataBroker.class); @SuppressWarnings("unchecked") private final DataTreeModification<Node> modification = (DataTreeModification<Node>) mock(DataTreeModification.class); @SuppressWarnings("unchecked") private final DataObjectModification<Node> rootNode = (DataObjectModification<Node>) mock(DataObjectModification.class); private final NodeId NODE_ID = new NodeId("dummy-node"); private Collection<DataTreeModification<Node>> changes; private SettableFuture<Boolean> future; private GbpVppNetconfConnectionProbe probeSpy; @Before public void init() { when(modification.getRootNode()).thenReturn(rootNode); future = SettableFuture.create(); changes = new ArrayList<>(); changes.add(modification); GbpVppNetconfConnectionProbe probeObject = new GbpVppNetconfConnectionProbe(new NodeKey(NODE_ID), future, dataBroker); probeSpy = spy(probeObject); } @Test public void testNullNode() throws Exception { when(rootNode.getDataAfter()).thenReturn(null); probeSpy.onDataTreeChanged(changes); future = probeSpy.getFutureStatus(); final Boolean result = future.get(); assertFalse(result); verify(probeSpy, times(1)).unregister(); } @Test public void testNodeWithoutAugmentation() throws Exception { when(rootNode.getDataAfter()).thenReturn(nodeWithoutAugmentation()); probeSpy.onDataTreeChanged(changes); future = probeSpy.getFutureStatus(); final Boolean result = future.get(); assertFalse(result); verify(probeSpy, times(1)).unregister(); } @Test public void testConnectingNode() throws Exception { when(rootNode.getDataAfter()).thenReturn(connectingNode()); probeSpy.onDataTreeChanged(changes); verify(probeSpy, times(0)).unregister(); } @Test public void testConnectedNode() throws Exception { when(rootNode.getDataAfter()).thenReturn(connectedNode()); probeSpy.onDataTreeChanged(changes); future = probeSpy.getFutureStatus(); final Boolean result = future.get(); assertTrue(result); verify(probeSpy, times(1)).unregister(); } @Test public void testFailedNode() throws Exception { when(rootNode.getDataAfter()).thenReturn(failedNode()); probeSpy.onDataTreeChanged(changes); future = probeSpy.getFutureStatus(); final Boolean result = future.get(); assertFalse(result); verify(probeSpy, times(1)).unregister(); } private Node nodeWithoutAugmentation() { final NodeBuilder nodeBuilder = new NodeBuilder(); nodeBuilder.setNodeId(NODE_ID); return nodeBuilder.build(); } private Node connectingNode() { final NetconfNodeBuilder netconfNodeBuilder = new NetconfNodeBuilder(); netconfNodeBuilder.setConnectionStatus(NetconfNodeConnectionStatus.ConnectionStatus.Connecting); final NodeBuilder nodeBuilder = new NodeBuilder(); nodeBuilder.setNodeId(NODE_ID) .addAugmentation(NetconfNode.class, netconfNodeBuilder.build()); return nodeBuilder.build(); } private Node connectedNode() { final NetconfNodeBuilder netconfNodeBuilder = new NetconfNodeBuilder(); netconfNodeBuilder.setConnectionStatus(NetconfNodeConnectionStatus.ConnectionStatus.Connected); final NodeBuilder nodeBuilder = new NodeBuilder(); nodeBuilder.setNodeId(NODE_ID) .addAugmentation(NetconfNode.class, netconfNodeBuilder.build()); return nodeBuilder.build(); } private Node failedNode() { final NetconfNodeBuilder netconfNodeBuilder = new NetconfNodeBuilder(); netconfNodeBuilder.setConnectionStatus(NetconfNodeConnectionStatus.ConnectionStatus.UnableToConnect); final NodeBuilder nodeBuilder = new NodeBuilder(); nodeBuilder.setNodeId(NODE_ID) .addAugmentation(NetconfNode.class, netconfNodeBuilder.build()); return nodeBuilder.build(); } }