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