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