2 * Copyright (c) 2016 Cisco Systems Inc and others. All rights reserved.
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
8 package org.opendaylight.unimgr.mef.nrp.cisco.xr.common.util;
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;
35 import static org.junit.Assert.assertEquals;
38 * @author marek.ryznar@amartus.com
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";
50 broker = getDataBroker();
55 deleteNode(LoopbackUtils.getNodeIid(new NodeId(nodeName),new TopologyId(topoName)));
59 public void testLoopbackAddress(){
61 FcPort port = L2vpnActivatorTestUtils.port(topoName, nodeName, portNumber);
62 createAndPersistNode(true);
65 Ipv4AddressNoZone ipv4AddressNoZone = LoopbackUtils.getIpv4Address(port, broker);
68 assertEquals(loopbackAddress,ipv4AddressNoZone.getValue());
72 public void testAbsenceOfLoopbackAddress(){
74 FcPort port = L2vpnActivatorTestUtils.port(topoName, nodeName, portNumber);
75 createAndPersistNode(false);
78 Ipv4AddressNoZone ipv4AddressNoZone = LoopbackUtils.getIpv4Address(port, broker);
81 assertEquals(LoopbackUtils.getDefaultLoopback(),ipv4AddressNoZone.getValue());
84 private void createAndPersistNode(boolean ifLoopbackAddress){
85 NodeId nodeId = new NodeId(nodeName);
86 Node node = createNode(nodeId,ifLoopbackAddress);
87 InstanceIdentifier<Node> nodeIid = writeNode(node);
90 private Node createNode(NodeId nodeId,boolean ifLoopbackAddress){
91 NodeBuilder nodeBuilder = new NodeBuilder();
93 NodeId nodeIdTopo = new NodeId(topoName);
94 NodeKey nodeKey = new NodeKey(nodeIdTopo);
96 nodeBuilder.setNodeId(nodeId);
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());
106 return nodeBuilder.build();
109 private InstanceIdentifier<Node> writeNode(Node node){
110 InstanceIdentifier<Node> nodeInstanceId = LoopbackUtils.getNodeIid(node.getNodeId(),new TopologyId(topoName));
111 WriteTransaction transaction = broker.newWriteOnlyTransaction();
113 transaction.put(LogicalDatastoreType.CONFIGURATION, nodeInstanceId, node,true);
115 CheckedFuture<Void, TransactionCommitFailedException> future = transaction.submit();
117 return nodeInstanceId;
118 } catch (TransactionCommitFailedException e) {
119 LOG.error("Unable to write node with Iid {} to store {}.", nodeInstanceId, LogicalDatastoreType.CONFIGURATION);
125 private void deleteNode(InstanceIdentifier<Node> nodeIid){
126 WriteTransaction transaction = broker.newWriteOnlyTransaction();
127 transaction.delete(LogicalDatastoreType.CONFIGURATION, nodeIid);
129 transaction.submit().checkedGet();
130 } catch (TransactionCommitFailedException e) {
131 LOG.error("Unable to remove node with Iid {} from store {}.", nodeIid, LogicalDatastoreType.CONFIGURATION);