Add jolokia feature repo to local karaf
[groupbasedpolicy.git] / ip-sgt-distribution-service / src / test / java / org / opendaylight / groupbasedpolicy / ip / sgt / distribution / service / impl / SxpCapableNodeListenerTest.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
9 package org.opendaylight.groupbasedpolicy.ip.sgt.distribution.service.impl;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertNotNull;
14 import static org.junit.Assert.assertNull;
15 import static org.junit.Assert.assertTrue;
16 import static org.mockito.Matchers.any;
17 import static org.mockito.Matchers.isA;
18 import static org.mockito.Mockito.mock;
19 import static org.mockito.Mockito.verify;
20 import static org.mockito.Mockito.when;
21
22 import java.util.Collection;
23 import java.util.List;
24
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
28 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
29 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
30 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
31 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
32 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
33 import org.opendaylight.groupbasedpolicy.test.CustomDataBrokerTest;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.SxpConnectionAugmentation;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.SxpConnectionAugmentationBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.sxp.connection.fields.SxpConnection;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.ip.sgt.distribution.rev160715.sxp.connection.fields.SxpConnectionBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.node.rev160308.SxpNodeIdentity;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.node.rev160308.SxpNodeIdentityBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.node.rev160308.network.topology.topology.node.SxpDomains;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.node.rev160308.network.topology.topology.node.SxpDomainsBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.node.rev160308.network.topology.topology.node.sxp.domains.SxpDomain;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.node.rev160308.network.topology.topology.node.sxp.domains.SxpDomainKey;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.node.rev160308.sxp.connections.fields.Connections;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.node.rev160308.sxp.connections.fields.connections.Connection;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.protocol.rev141002.ConnectionMode;
50 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
51 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
52 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
53 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
54 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
55 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
56 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
57 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
58 import org.opendaylight.yangtools.concepts.ListenerRegistration;
59 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
60
61 import com.google.common.base.Optional;
62 import com.google.common.collect.ImmutableList;
63 import com.google.common.util.concurrent.CheckedFuture;
64
65 public class SxpCapableNodeListenerTest extends CustomDataBrokerTest {
66
67     private final String SXP_NODE_ID = "sxp_node";
68     private final String NODE_ID = "node1";
69     private final IpAddress IP_ADDR = new IpAddress(new Ipv4Address("10.0.0.1"));
70     private final String PASSWD = "cisco123";
71     private final String TOPOLOGY_ID = "topology";
72     private final String DOMAIN_ID = TOPOLOGY_ID + "/" + NODE_ID;
73     private final PortNumber SXP_PORT = new PortNumber(64999);
74     private DataBroker dataBroker;
75     private SxpCapableNodeListener nodeListener;
76
77     @Override
78     public Collection<Class<?>> getClassesFromModules() {
79         return ImmutableList.of(Topology.class, SxpDomain.class, SxpConnectionAugmentation.class);
80     }
81
82     @Before
83     public void init() throws Exception {
84         dataBroker = getDataBroker();
85         nodeListener = new SxpCapableNodeListener(dataBroker, SXP_NODE_ID);
86     }
87
88     @Test
89     public void testInit() throws Exception {
90         dataBroker = mock(DataBroker.class);
91         nodeListener = new SxpCapableNodeListener(dataBroker, SXP_NODE_ID);
92         DataTreeIdentifier<SxpConnection> iid = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
93                 InstanceIdentifier.builder(NetworkTopology.class)
94                     .child(Topology.class)
95                     .child(Node.class)
96                     .augmentation(SxpConnectionAugmentation.class)
97                     .child(SxpConnection.class)
98                     .build());
99         verify(dataBroker).registerDataTreeChangeListener(iid, nodeListener);
100     }
101
102     @Test
103     public void testClose() {
104         dataBroker = mock(DataBroker.class);
105         ListenerRegistration<SxpCapableNodeListener> registration = mock(ListenerRegistration.class);
106         when(dataBroker.registerDataTreeChangeListener(any(), isA(SxpCapableNodeListener.class)))
107             .thenReturn(registration);
108         nodeListener = new SxpCapableNodeListener(dataBroker, SXP_NODE_ID);
109         nodeListener.close();
110         verify(registration).close();
111     }
112
113     @Test
114     public void testOnDataTreeChange_createAndDeleteNode() throws Exception {
115         Node sxpNode =
116                 new NodeBuilder().setNodeId(new NodeId(SXP_NODE_ID))
117                     .addAugmentation(SxpNodeIdentity.class,
118                             new SxpNodeIdentityBuilder().setSxpDomains(new SxpDomainsBuilder().build()).build())
119                     .build();
120         InstanceIdentifier<Node> sxpNodeIid =
121                 InstanceIdentifier.builder(NetworkTopology.class)
122                     .child(Topology.class,
123                             new TopologyKey(new TopologyId(IpSgtDistributionServiceImpl.SXP_TOPOLOGY_ID)))
124                     .child(Node.class, new NodeKey(new NodeId(SXP_NODE_ID)))
125                     .build();
126         WriteTransaction wtx = dataBroker.newWriteOnlyTransaction();
127         wtx.put(LogicalDatastoreType.CONFIGURATION, sxpNodeIid, sxpNode, true);
128         Node node = new NodeBuilder().setNodeId(new NodeId(NODE_ID))
129             .addAugmentation(SxpConnectionAugmentation.class, new SxpConnectionAugmentationBuilder()
130                 .setSxpConnection(new SxpConnectionBuilder().setIpAddress(IP_ADDR).setPassword(PASSWD).build()).build())
131             .build();
132         InstanceIdentifier<Node> nodeIid = InstanceIdentifier.builder(NetworkTopology.class)
133             .child(Topology.class, new TopologyKey(new TopologyId(TOPOLOGY_ID)))
134             .child(Node.class, new NodeKey(new NodeId(NODE_ID)))
135             .build();
136         wtx.put(LogicalDatastoreType.CONFIGURATION, nodeIid, node, true);
137         wtx.submit().get();
138         assertEquals(DOMAIN_ID, nodeListener.getDomainIdForPeer(nodeIid));
139         InstanceIdentifier<SxpDomain> domainIid =
140                 InstanceIdentifier.builder(NetworkTopology.class)
141                     .child(Topology.class,
142                             new TopologyKey(new TopologyId(IpSgtDistributionServiceImpl.SXP_TOPOLOGY_ID)))
143                     .child(Node.class, new NodeKey(new NodeId(SXP_NODE_ID)))
144                     .augmentation(SxpNodeIdentity.class)
145                     .child(SxpDomains.class)
146                     .child(SxpDomain.class, new SxpDomainKey(DOMAIN_ID))
147                     .build();
148         ReadOnlyTransaction rtx = dataBroker.newReadOnlyTransaction();
149         CheckedFuture<Optional<SxpDomain>, ReadFailedException> read =
150                 rtx.read(LogicalDatastoreType.CONFIGURATION, domainIid);
151         Optional<SxpDomain> optionalDomain = read.get();
152         assertTrue(optionalDomain.isPresent());
153         SxpDomain sxpDomain = optionalDomain.get();
154         Connections connections = sxpDomain.getConnections();
155         assertNotNull(connections);
156         List<Connection> connectionList = connections.getConnection();
157         assertNotNull(connectionList);
158         assertEquals(1, connectionList.size());
159         Connection connection = connectionList.get(0);
160         assertEquals(IP_ADDR, connection.getPeerAddress());
161         assertEquals(PASSWD, connection.getPassword());
162         assertEquals(SXP_PORT, connection.getTcpPort());
163         assertEquals(ConnectionMode.Speaker, connection.getMode());
164
165         wtx = dataBroker.newWriteOnlyTransaction();
166         wtx.delete(LogicalDatastoreType.CONFIGURATION, nodeIid);
167         wtx.submit().get();
168         assertNull(nodeListener.getDomainIdForPeer(nodeIid));
169         rtx = dataBroker.newReadOnlyTransaction();
170         read = rtx.read(LogicalDatastoreType.CONFIGURATION, domainIid);
171         assertFalse(read.get().isPresent());
172     }
173 }