Refactoring of cisco-xr-driver and impl modules.
[unimgr.git] / cisco-xr-driver / src / test / java / org / opendaylight / unimgr / mef / nrp / cisco / xr / common / util / LoopbackUtilsTest.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.unimgr.mef.nrp.cisco.xr.common.util;
9
10 import com.google.common.util.concurrent.CheckedFuture;
11 import org.junit.After;
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
15 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
16 import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest;
17 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
18 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
19 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator.L2vpnActivatorTestUtils;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
23 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.LoopbackAugmentation;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.unimgr.rev151012.LoopbackAugmentationBuilder;
26 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
27 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
28 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
29 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
30 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
31 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 import static org.junit.Assert.assertEquals;
36
37 /**
38  * @author marek.ryznar@amartus.com
39  */
40 public class LoopbackUtilsTest extends AbstractDataBrokerTest {
41     private static final Logger LOG = LoggerFactory.getLogger(LoopbackUtilsTest.class);
42     private DataBroker broker;
43     private static String nodeName = "192.168.2.1";
44     private static String topoName = "topo://";
45     private static String loopbackAddress = "192.168.2.20";
46     private static String portNumber = "8080";
47
48     @Before
49     public void setUp(){
50         broker = getDataBroker();
51     }
52
53     @After
54     public void clean(){
55         deleteNode(LoopbackUtils.getNodeIid(new NodeId(nodeName),new TopologyId(topoName)));
56     }
57
58     @Test
59     public void testLoopbackAddress(){
60         //given
61         FcPort port = L2vpnActivatorTestUtils.port(topoName, nodeName, portNumber);
62         createAndPersistNode(true);
63
64         //when
65         Ipv4AddressNoZone ipv4AddressNoZone = LoopbackUtils.getIpv4Address(port, broker);
66
67         //then
68         assertEquals(loopbackAddress,ipv4AddressNoZone.getValue());
69     }
70
71     @Test
72     public void testAbsenceOfLoopbackAddress(){
73         //given
74         FcPort port = L2vpnActivatorTestUtils.port(topoName, nodeName, portNumber);
75         createAndPersistNode(false);
76
77         //when
78         Ipv4AddressNoZone ipv4AddressNoZone = LoopbackUtils.getIpv4Address(port, broker);
79
80         //then
81         assertEquals(LoopbackUtils.getDefaultLoopback(),ipv4AddressNoZone.getValue());
82     }
83
84     private void createAndPersistNode(boolean ifLoopbackAddress){
85         NodeId nodeId = new NodeId(nodeName);
86         Node node = createNode(nodeId,ifLoopbackAddress);
87         InstanceIdentifier<Node> nodeIid = writeNode(node);
88     }
89
90     private Node createNode(NodeId nodeId,boolean ifLoopbackAddress){
91         NodeBuilder nodeBuilder = new NodeBuilder();
92
93         NodeId nodeIdTopo = new NodeId(topoName);
94         NodeKey nodeKey = new NodeKey(nodeIdTopo);
95
96         nodeBuilder.setNodeId(nodeId);
97
98         if(ifLoopbackAddress){
99             Ipv4Address ipv4Address = new Ipv4Address(loopbackAddress);
100             IpAddress ipAddress = new IpAddress(ipv4Address);
101             LoopbackAugmentationBuilder loopbackAugmentationBuilder = new LoopbackAugmentationBuilder();
102             loopbackAugmentationBuilder.setLoopbackAddress(ipAddress);
103             nodeBuilder.addAugmentation(LoopbackAugmentation.class,loopbackAugmentationBuilder.build());
104         }
105
106         return nodeBuilder.build();
107     }
108
109     private InstanceIdentifier<Node> writeNode(Node node){
110         InstanceIdentifier<Node> nodeInstanceId = LoopbackUtils.getNodeIid(node.getNodeId(),new TopologyId(topoName));
111         WriteTransaction transaction = broker.newWriteOnlyTransaction();
112
113         transaction.put(LogicalDatastoreType.CONFIGURATION, nodeInstanceId, node,true);
114         try {
115             CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
116             future.checkedGet();
117             return nodeInstanceId;
118         } catch (TransactionCommitFailedException e) {
119             LOG.error("Unable to write node with Iid {} to store {}.", nodeInstanceId, LogicalDatastoreType.CONFIGURATION);
120             e.printStackTrace();
121         }
122         return null;
123     }
124
125     private void deleteNode(InstanceIdentifier<Node> nodeIid){
126         WriteTransaction transaction = broker.newWriteOnlyTransaction();
127         transaction.delete(LogicalDatastoreType.CONFIGURATION, nodeIid);
128         try {
129             transaction.submit().checkedGet();
130         } catch (TransactionCommitFailedException e) {
131             LOG.error("Unable to remove node with Iid {} from store {}.", nodeIid, LogicalDatastoreType.CONFIGURATION);
132         }
133     }
134 }