Enhancing the junits for interface-manager
[genius.git] / interfacemanager / interfacemanager-impl / src / test / java / org / opendaylight / genius / interfacemanager / test / InterfaceManagerTestUtil.java
1 /*
2  * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. 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.genius.interfacemanager.test;
9
10 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
11 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
12 import org.opendaylight.genius.interfacemanager.IfmUtil;
13 import org.opendaylight.genius.interfacemanager.renderer.ovs.utilities.SouthboundUtils;
14 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
15 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.Tunnel;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlanBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnelBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefs;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.ParentRefsBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeBase;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
36 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
37 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
38 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
39
40 import java.math.BigInteger;
41 import java.util.Arrays;
42
43 import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.CONFIGURATION;
44 import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.OPERATIONAL;
45
46 public class InterfaceManagerTestUtil {
47     public static final String parentInterface = "tap23701c04-7e";
48     public static final String interfaceName = "23701c04-7e58-4c65-9425-78a80d49a218";
49     public static final String tunnelInterfaceName = "tun414a856a7a4";
50     public static final TopologyId OVSDB_TOPOLOGY_ID = new TopologyId(new Uri("ovsdb:1"));
51     public static final NodeKey nodeKey = new NodeKey(new NodeId("openflow:1"));
52
53     public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface buildStateInterface(
54             String ifName, String dpnId, String portNo, String phyAddress, Class<? extends InterfaceType> ifType) {
55         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder ifaceBuilder =
56                 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder();
57         if(ifType != null) {
58             ifaceBuilder.setType(ifType);
59         }
60         ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(ifName));
61         ifaceBuilder.setOperStatus(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus.Up);
62         ifaceBuilder.setLowerLayerIf(Arrays.asList("openflow:"+dpnId+":"+portNo));
63         if(phyAddress != null) {
64             ifaceBuilder.setPhysAddress(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress.getDefaultInstance(phyAddress));
65         }
66         return ifaceBuilder.build();
67     }
68
69
70     public static Node buildInventoryDpnNode(BigInteger dpnId) {
71         NodeId nodeId = new NodeId("openflow:" + dpnId);
72         Node nodeDpn = new NodeBuilder().setId(nodeId).setKey(new NodeKey(nodeId)).build();
73
74         return nodeDpn;
75     }
76
77     public static Interface buildInterface(String ifName, String desc, boolean enabled, Object ifType,
78                                            String parentInterface) {
79         InterfaceBuilder builder = new InterfaceBuilder().setKey(new InterfaceKey(ifName)).setName(ifName)
80                 .setDescription(desc).setEnabled(enabled).setType((Class<? extends InterfaceType>) ifType);
81         ParentRefs parentRefs = new ParentRefsBuilder().setParentInterface(parentInterface).build();
82         builder.addAugmentation(ParentRefs.class, parentRefs);
83         if(ifType.equals(L2vlan.class)){
84             IfL2vlan l2vlan = new IfL2vlanBuilder().setVlanId(VlanId.getDefaultInstance("0"))
85                     .setL2vlanMode(IfL2vlan.L2vlanMode.Trunk).build();
86             builder.addAugmentation(IfL2vlan.class, l2vlan);
87         }else if(ifType.equals(IfTunnel.class)){
88             IfTunnel tunnel = new IfTunnelBuilder().setTunnelDestination(null).setTunnelGateway(null).setTunnelSource(null)
89                     .setTunnelInterfaceType(null).build();
90             builder.addAugmentation(IfTunnel.class, tunnel);
91         }
92         return builder.build();
93     }
94
95     public static Interface buildTunnelInterface(BigInteger dpn, String ifName, String desc, boolean enabled, Class<? extends TunnelTypeBase> tunType,
96                                                  String remoteIpStr, String localIpStr) {
97         InterfaceBuilder builder = new InterfaceBuilder().setKey(new InterfaceKey(ifName)).setName(ifName)
98                 .setDescription(desc).setEnabled(enabled).setType(Tunnel.class);
99         ParentRefs parentRefs = new ParentRefsBuilder().setDatapathNodeIdentifier(dpn).build();
100         builder.addAugmentation(ParentRefs.class, parentRefs);
101         IpAddress remoteIp = new IpAddress(Ipv4Address.getDefaultInstance(remoteIpStr));
102         IpAddress localIp =  new IpAddress(Ipv4Address.getDefaultInstance(localIpStr));
103         IfTunnel tunnel = new IfTunnelBuilder().setTunnelDestination(remoteIp).setTunnelGateway(localIp).setTunnelSource(localIp)
104                 .setTunnelInterfaceType( tunType).setInternal(true).setMonitorEnabled(false).build();
105         builder.addAugmentation(IfTunnel.class, tunnel);
106         return builder.build();
107     }
108
109     public static InstanceIdentifier<TerminationPoint> getTerminationPointId(InstanceIdentifier<?> bridgeIid, String portName){
110         InstanceIdentifier<TerminationPoint> tpIid = SouthboundUtils.createTerminationPointInstanceIdentifier(
111                 InstanceIdentifier.keyOf(bridgeIid.firstIdentifierOf(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.class)), portName);
112         return tpIid;
113     }
114
115     public static void deleteInterfaceConfig(DataBroker dataBroker, String ifaceName){
116         InstanceIdentifier<Interface> vlanInterfaceEnabledInterfaceInstanceIdentifier = IfmUtil.buildId(
117                 ifaceName);
118         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
119         tx.delete(CONFIGURATION, vlanInterfaceEnabledInterfaceInstanceIdentifier);
120         tx.submit();
121     }
122
123     public static void putInterfaceConfig(DataBroker dataBroker, String ifaceName, ParentRefs parentRefs,
124                                           Class<? extends InterfaceType> ifType){
125         Interface interfaceInfo;
126         if(!Tunnel.class.equals(ifType)) {
127             interfaceInfo = InterfaceManagerTestUtil.buildInterface(
128                     ifaceName, ifaceName, true, ifType, parentRefs.getParentInterface());
129         }else{
130             interfaceInfo = buildTunnelInterface(parentRefs.getDatapathNodeIdentifier(),ifaceName, ifaceName, true, TunnelTypeVxlan.class,
131                     "1.1.1.1", "2.2.2.2");
132         }
133         InstanceIdentifier<Interface> interfaceInstanceIdentifier = IfmUtil.buildId(
134                 ifaceName);
135         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
136         tx.put(CONFIGURATION, interfaceInstanceIdentifier, interfaceInfo, true);
137         tx.submit();
138     }
139
140     public static void putInterfaceState(DataBroker dataBroker, String interfaceName, Class<? extends InterfaceType> ifType){
141         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifaceState =
142                 InterfaceManagerTestUtil.buildStateInterface(interfaceName, "1", "2", "AA:AA:AA:AA:AA:AA", ifType);
143         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
144         tx.put(OPERATIONAL, IfmUtil.buildStateInterfaceId(interfaceName), ifaceState, true);
145         tx.submit();
146     }
147 }