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