e0d1dcd143f94264b1405eae82819b7b6e9ab98b
[netvirt.git] / elanmanager / impl / src / test / java / org / opendaylight / netvirt / elanmanager / tests / L2gwBuilders.java
1 /*
2  * Copyright © 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.netvirt.elanmanager.tests;
9
10 import static org.opendaylight.netvirt.elan.l2gw.nodehandlertest.NodeConnectedHandlerUtils.getUUid;
11
12 import java.util.ArrayList;
13 import java.util.List;
14 import java.util.UUID;
15 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
16 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
17 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
18 import org.opendaylight.netvirt.elan.l2gw.nodehandlertest.GlobalAugmentationHelper;
19 import org.opendaylight.netvirt.elan.l2gw.nodehandlertest.TestBuilders;
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.IpAddressBuilder;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.attributes.Devices;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.attributes.DevicesBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.attributes.devices.Interfaces;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.attributes.devices.InterfacesBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.connections.attributes.L2gatewayConnections;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.connections.attributes.l2gatewayconnections.L2gatewayConnection;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.connections.attributes.l2gatewayconnections.L2gatewayConnectionBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.connections.attributes.l2gatewayconnections.L2gatewayConnectionKey;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateways.attributes.L2gateways;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateways.attributes.l2gateways.L2gateway;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateways.attributes.l2gateways.L2gatewayBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateways.attributes.l2gateways.L2gatewayKey;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentation;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalAugmentationBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepGlobalRef;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepNodeName;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.PhysicalSwitchAugmentation;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.PhysicalSwitchAugmentationBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalUcastMacs;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.global.attributes.LocalUcastMacsBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelIps;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelIpsBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelIpsKey;
49 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
50 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
51 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
52 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
53 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
54 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
55 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
56
57 public class L2gwBuilders {
58
59     private final SingleTransactionDataBroker singleTransactionDataBroker;
60
61     public L2gwBuilders(SingleTransactionDataBroker singleTransactionDataBroker) {
62         this.singleTransactionDataBroker = singleTransactionDataBroker;
63     }
64
65     public L2gatewayConnection buildConnection(String connectionName, String l2gwName, String elan,
66                                                       Integer segmentationId) {
67
68         final L2gatewayConnectionBuilder l2gatewayConnectionBuilder = new L2gatewayConnectionBuilder();
69
70         String uuidConnectionName = UUID.nameUUIDFromBytes(connectionName.getBytes()).toString();
71         l2gatewayConnectionBuilder.setUuid(new Uuid(uuidConnectionName));
72
73         String uuidL2gwName = UUID.nameUUIDFromBytes(l2gwName.getBytes()).toString();
74         l2gatewayConnectionBuilder.setL2gatewayId(new Uuid(uuidL2gwName));
75         l2gatewayConnectionBuilder.setNetworkId(new Uuid(elan));
76         l2gatewayConnectionBuilder.setSegmentId(segmentationId);
77         l2gatewayConnectionBuilder.setTenantId(new Uuid(ExpectedObjects.ELAN1));
78
79         String portName = "port";
80         String uuidPort = UUID.nameUUIDFromBytes(portName.getBytes()).toString();
81         l2gatewayConnectionBuilder.setPortId(new Uuid(uuidPort));
82         return l2gatewayConnectionBuilder.build();
83     }
84
85     public L2gateway buildL2gw(String l2gwName, String deviceName, List<String> intfNames) {
86         final L2gatewayBuilder l2gatewayBuilder = new L2gatewayBuilder();
87         String uuid = UUID.nameUUIDFromBytes(l2gwName.getBytes()).toString();
88         //String tenantUuid = UUID.fromString(ELAN1).toString();
89         l2gatewayBuilder.setUuid(new Uuid(uuid));
90         l2gatewayBuilder.setTenantId(new Uuid(ExpectedObjects.ELAN1));
91
92         final List<Devices> devices = new ArrayList<>();
93         final DevicesBuilder deviceBuilder = new DevicesBuilder();
94         final List<Interfaces> interfaces = new ArrayList<>();
95         for (String intfName : intfNames) {
96             final InterfacesBuilder interfacesBuilder = new InterfacesBuilder();
97             interfacesBuilder.setInterfaceName(intfName);
98             interfacesBuilder.setSegmentationIds(new ArrayList<>());
99             interfaces.add(interfacesBuilder.build());
100         }
101         deviceBuilder.setDeviceName(deviceName);
102         deviceBuilder.setUuid(new Uuid(uuid));
103         deviceBuilder.setInterfaces(interfaces);
104
105         devices.add(deviceBuilder.build());
106         l2gatewayBuilder.setDevices(devices);
107         return l2gatewayBuilder.build();
108     }
109
110     public InstanceIdentifier<L2gateway> buildL2gwIid(String l2gwName) {
111         String l2gwNameUuid = UUID.nameUUIDFromBytes(l2gwName.getBytes()).toString();
112         return InstanceIdentifier.create(Neutron.class).child(L2gateways.class)
113                 .child(L2gateway.class, new L2gatewayKey(toUuid(l2gwNameUuid)));
114     }
115
116     public InstanceIdentifier<L2gatewayConnection> buildConnectionIid(String connectionName) {
117         String l2gwConnectionNameUuid = UUID.nameUUIDFromBytes(connectionName.getBytes()).toString();
118         return InstanceIdentifier.create(Neutron.class).child(L2gatewayConnections.class)
119                 .child(L2gatewayConnection.class, new L2gatewayConnectionKey(toUuid(l2gwConnectionNameUuid)));
120     }
121
122     public Uuid toUuid(String name) {
123         return new Uuid(UUID.fromString(name).toString());
124     }
125
126     static InstanceIdentifier<Node> createInstanceIdentifier(String nodeIdString) {
127         org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId nodeId
128                 = new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021
129                 .NodeId(new Uri(nodeIdString));
130         org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology
131                 .topology.NodeKey nodeKey = new org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network
132                 .topology.rev131021.network.topology.topology.NodeKey(nodeId);
133         TopologyKey topoKey = new TopologyKey(new TopologyId(new Uri("hwvtep:1")));
134         return InstanceIdentifier.builder(NetworkTopology.class)
135                 .child(Topology.class, topoKey)
136                 .child(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology
137                         .rev131021.network.topology.topology.Node.class, nodeKey)
138                 .build();
139     }
140
141     public void buildTorNode(String torNodeId, String deviceName, String tepIp)
142             throws Exception {
143
144         InstanceIdentifier<Node> nodePath =
145                 createInstanceIdentifier(torNodeId);
146         InstanceIdentifier<Node> psNodePath =
147                 createInstanceIdentifier(torNodeId + "/physicalswitch/" + deviceName);
148
149         // Create PS node
150         NodeBuilder nodeBuilder = new NodeBuilder();
151         nodeBuilder.setNodeId(psNodePath.firstKeyOf(Node.class).getNodeId());
152         PhysicalSwitchAugmentationBuilder physicalSwitchAugmentationBuilder = new PhysicalSwitchAugmentationBuilder();
153         physicalSwitchAugmentationBuilder.setManagedBy(new HwvtepGlobalRef(nodePath));
154         physicalSwitchAugmentationBuilder.setPhysicalSwitchUuid(new Uuid(UUID.nameUUIDFromBytes(deviceName.getBytes())
155                 .toString()));
156         physicalSwitchAugmentationBuilder.setHwvtepNodeName(new HwvtepNodeName(deviceName));
157         physicalSwitchAugmentationBuilder.setHwvtepNodeDescription("torNode");
158         List<TunnelIps> tunnelIps = new ArrayList<>();
159         IpAddress ip = IpAddressBuilder.getDefaultInstance(tepIp);
160         tunnelIps.add(new TunnelIpsBuilder().withKey(new TunnelIpsKey(ip)).setTunnelIpsKey(ip).build());
161         physicalSwitchAugmentationBuilder.setTunnelIps(tunnelIps);
162         nodeBuilder.addAugmentation(PhysicalSwitchAugmentation.class, physicalSwitchAugmentationBuilder.build());
163         singleTransactionDataBroker.syncWrite(LogicalDatastoreType.OPERATIONAL, psNodePath, nodeBuilder.build());
164
165         nodeBuilder = new NodeBuilder();
166         nodeBuilder.setNodeId(nodePath.firstKeyOf(Node.class).getNodeId());
167         HwvtepGlobalAugmentationBuilder builder = new HwvtepGlobalAugmentationBuilder();
168         builder.setDbVersion("1.6.0");
169         builder.setManagers(TestBuilders.buildManagers1());
170         GlobalAugmentationHelper.addSwitches(builder, psNodePath);
171         nodeBuilder.addAugmentation(HwvtepGlobalAugmentation.class, builder.build());
172         singleTransactionDataBroker.syncWrite(LogicalDatastoreType.OPERATIONAL, nodePath, nodeBuilder.build());
173     }
174
175     public LocalUcastMacs createLocalUcastMac(InstanceIdentifier<Node> nodeId, String mac, String ipAddr,
176                                                      String tepIp) throws TransactionCommitFailedException {
177
178         NodeBuilder nodeBuilder = new NodeBuilder();
179         nodeBuilder.setNodeId(nodeId.firstKeyOf(Node.class).getNodeId());
180         final List<LocalUcastMacs> localUcastMacses = new ArrayList<>();
181         LocalUcastMacsBuilder localUcastMacsBuilder = new LocalUcastMacsBuilder();
182         localUcastMacsBuilder.setIpaddr(IpAddressBuilder.getDefaultInstance(ipAddr));
183         localUcastMacsBuilder.setMacEntryKey(new MacAddress(mac));
184         localUcastMacsBuilder.setMacEntryUuid(getUUid(mac));
185         localUcastMacsBuilder.setLocatorRef(TestBuilders.buildLocatorRef(nodeId, tepIp));
186         localUcastMacsBuilder.setLogicalSwitchRef(TestBuilders.buildLogicalSwitchesRef(nodeId, ExpectedObjects.ELAN1));
187         LocalUcastMacs localUcastMacs = localUcastMacsBuilder.build();
188         localUcastMacses.add(localUcastMacs);
189         HwvtepGlobalAugmentationBuilder builder1 =
190                 new HwvtepGlobalAugmentationBuilder().setLocalUcastMacs(localUcastMacses) ;
191         nodeBuilder.addAugmentation(HwvtepGlobalAugmentation.class, builder1.build());
192         singleTransactionDataBroker.syncUpdate(LogicalDatastoreType.OPERATIONAL, nodeId, nodeBuilder.build());
193         return localUcastMacs;
194     }
195
196     public InstanceIdentifier<LocalUcastMacs> buildMacIid(InstanceIdentifier<Node> nodeIid, LocalUcastMacs mac) {
197         return nodeIid.augmentation(HwvtepGlobalAugmentation.class).child(LocalUcastMacs.class, mac.key());
198     }
199
200     public void deletel2GWConnection(String connectionName) throws TransactionCommitFailedException {
201         singleTransactionDataBroker.syncDelete(LogicalDatastoreType.CONFIGURATION, buildConnectionIid(connectionName));
202     }
203
204 }