2 package org.opendaylight.groupbasedpolicy.renderer.vpp.manager;
4 import com.google.common.base.Optional;
5 import com.google.common.eventbus.EventBus;
6 import com.google.common.util.concurrent.CheckedFuture;
7 import org.junit.After;
8 import org.junit.Assert;
9 import org.junit.Before;
10 import org.junit.Test;
11 import org.junit.runner.RunWith;
12 import org.mockito.Matchers;
13 import org.mockito.Mock;
14 import org.mockito.Mockito;
15 import org.mockito.runners.MockitoJUnitRunner;
16 import org.opendaylight.controller.config.yang.config.vpp_provider.impl.VppRenderer;
17 import org.opendaylight.controller.md.sal.binding.api.*;
18 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
19 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
20 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
21 import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest;
22 import org.opendaylight.groupbasedpolicy.renderer.vpp.listener.VppNodeListener;
23 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Host;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.Renderer;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.renderer.rev151103.renderers.RendererKey;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilitiesBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.UnavailableCapabilitiesBuilder;
35 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
36 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
37 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
38 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
39 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
41 import java.util.ArrayList;
42 import java.util.List;
45 * Test for {@link VppNodeManager} and {@link VppNodeListener}.
47 @RunWith(MockitoJUnitRunner.class)
48 public class VppManagerDataStoreTest extends VppRendererDataBrokerTest {
50 private static final String V3PO_CAPABILITY = "(urn:opendaylight:params:xml:ns:yang:v3po?revision=2015-01-05)v3po";
51 private static final String INTERFACES_CAPABILITY =
52 "(urn:ietf:params:xml:ns:yang:ietf-interfaces?revision=2014-05-08)ietf-interfaces";
53 private static final String NODE_NAME = "testVpp";
55 private final InstanceIdentifier<Node> nodeIid = VppIidFactory.getNodeIid(new NodeKey(new NodeId(NODE_NAME)));
58 BindingAwareBroker.ProviderContext providerContext;
60 MountPointService mountPointService;
62 MountPoint mountPoint;
64 DataBroker dataBroker2;
66 private DataBroker dataBroker;
67 private VppNodeListener vppNodeListener;
68 private VppNodeManager vppNodeManager;
71 public void setUp() throws Exception {
72 Mockito.when(providerContext.getSALService(Matchers.<Class<MountPointService>>any()))
73 .thenReturn(mountPointService);
74 Mockito.when(mountPointService.getMountPoint(Matchers.<InstanceIdentifier<Node>>any()))
75 .thenReturn(Optional.of(mountPoint));
76 Mockito.when(mountPoint.getService(Matchers.<Class<DataBroker>>any())).thenReturn(Optional.of(dataBroker2));
77 dataBroker = getDataBroker();
78 vppNodeManager = new VppNodeManager(dataBroker, providerContext);
79 vppNodeListener = new VppNodeListener(dataBroker, vppNodeManager, new EventBus());
82 private Node createNode(final String name, NetconfNodeConnectionStatus.ConnectionStatus status) {
83 Host host = new Host(new IpAddress(new Ipv4Address("192.168.255.101")));
84 PortNumber portNumber = new PortNumber(2830);
86 List<String> avaibleCapabilitiesList = new ArrayList<>();
87 avaibleCapabilitiesList.add(V3PO_CAPABILITY);
88 avaibleCapabilitiesList.add(INTERFACES_CAPABILITY);
90 NetconfNode netconfNode = new NetconfNodeBuilder().setHost(host)
92 .setUnavailableCapabilities(new UnavailableCapabilitiesBuilder().build())
93 .setAvailableCapabilities(
94 new AvailableCapabilitiesBuilder().setAvailableCapability(avaibleCapabilitiesList).build())
95 .setConnectionStatus(status)
98 return new NodeBuilder().setNodeId(new NodeId(name)).addAugmentation(NetconfNode.class, netconfNode).build();
102 public void connectNode() throws ReadFailedException {
103 WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
104 Node testVppNode = createNode(NODE_NAME, NetconfNodeConnectionStatus.ConnectionStatus.Connected);
106 writeTransaction.put(LogicalDatastoreType.OPERATIONAL, nodeIid, testVppNode, true);
108 writeTransaction.submit();
110 ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction();
111 CheckedFuture<Optional<Renderer>, ReadFailedException> future =
112 readOnlyTransaction.read(LogicalDatastoreType.OPERATIONAL,
113 VppIidFactory.getRendererIID(new RendererKey(VppRenderer.NAME)));
114 Optional<Renderer> rendererOptional = future.checkedGet();
116 Assert.assertTrue(rendererOptional.isPresent());
117 Assert.assertEquals(1, rendererOptional.get().getRendererNodes().getRendererNode().size());
118 Assert.assertEquals(nodeIid, rendererOptional.get().getRendererNodes().getRendererNode().get(0).getNodePath());
122 public void disconnectNode() throws ReadFailedException, InterruptedException {
123 WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
124 Node testVppNode = createNode(NODE_NAME, NetconfNodeConnectionStatus.ConnectionStatus.Connected);
126 writeTransaction.put(LogicalDatastoreType.OPERATIONAL, nodeIid, testVppNode, true);
128 writeTransaction.submit();
130 ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction();
131 CheckedFuture<Optional<Renderer>, ReadFailedException> future =
132 readOnlyTransaction.read(LogicalDatastoreType.OPERATIONAL,
133 VppIidFactory.getRendererIID(new RendererKey(VppRenderer.NAME)));
134 Optional<Renderer> rendererOptional = future.checkedGet();
136 Assert.assertTrue(rendererOptional.isPresent());
137 Assert.assertEquals(1, rendererOptional.get().getRendererNodes().getRendererNode().size());
138 Assert.assertEquals(nodeIid, rendererOptional.get().getRendererNodes().getRendererNode().get(0).getNodePath());
140 WriteTransaction writeTransaction2 = dataBroker.newWriteOnlyTransaction();
141 Node testVppNode2 = createNode(NODE_NAME, NetconfNodeConnectionStatus.ConnectionStatus.Connecting);
143 writeTransaction2.put(LogicalDatastoreType.OPERATIONAL, nodeIid, testVppNode2, true);
145 writeTransaction2.submit();
147 ReadOnlyTransaction readOnlyTransaction2 = dataBroker.newReadOnlyTransaction();
148 CheckedFuture<Optional<Renderer>, ReadFailedException> future2 =
149 readOnlyTransaction2.read(LogicalDatastoreType.OPERATIONAL,
150 VppIidFactory.getRendererIID(new RendererKey(VppRenderer.NAME)));
151 Optional<Renderer> rendererOptional2 = future2.checkedGet();
153 Assert.assertTrue(rendererOptional2.isPresent());
154 Assert.assertEquals(0, rendererOptional2.get().getRendererNodes().getRendererNode().size());
158 public void cleanUp() throws Exception {
159 vppNodeListener.close();