Enhancing junits of interface-manager phase5
[genius.git] / interfacemanager / interfacemanager-impl / src / test / java / org / opendaylight / genius / interfacemanager / test / OvsdbSouthboundTestUtil.java
1 /*
2  * Copyright (c) 2015, 2017 Red Hat, 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
9 package org.opendaylight.genius.interfacemanager.test;
10
11 import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.OPERATIONAL;
12
13 import com.google.common.collect.ImmutableBiMap;
14 import java.net.Inet4Address;
15 import java.net.Inet6Address;
16 import java.net.InetAddress;
17 import java.net.UnknownHostException;
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.List;
21 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
22 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
23 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
24 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.DatapathId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeBase;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeDpdk;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeDpdkr;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeDpdkvhost;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeDpdkvhostuser;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeGeneve;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeGre;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeGre64;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeInternal;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeIpsecGre;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeIpsecGre64;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeLisp;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypePatch;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeSystem;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeTap;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeVxlan;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.InterfaceTypeVxlanGpe;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentationBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentationBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntry;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ControllerEntryBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdStatus;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceBfdStatusBuilder;
60 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
61 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
62 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
63 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
64 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
65 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
66 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
67 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
68 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
69 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
70 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder;
71 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
72 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
73 import org.slf4j.Logger;
74 import org.slf4j.LoggerFactory;
75
76 public class OvsdbSouthboundTestUtil {
77     private static final Logger LOG = LoggerFactory.getLogger(OvsdbSouthboundTestUtil.class);
78     private static final int OVSDB_UPDATE_TIMEOUT = 1000;
79     public static final TopologyId OVSDB_TOPOLOGY_ID = new TopologyId(new Uri("ovsdb:1"));
80     public static final String OVSDB_URI_PREFIX = "ovsdb";
81     public static final String BRIDGE_URI_PREFIX = "bridge";
82
83     public static final ImmutableBiMap<String, Class<? extends InterfaceTypeBase>>
84         OVSDB_INTERFACE_TYPE_MAP = new ImmutableBiMap.Builder<String, Class<? extends InterfaceTypeBase>>()
85             .put("internal", InterfaceTypeInternal.class).put("vxlan", InterfaceTypeVxlan.class)
86             .put("vxlan-gpe", InterfaceTypeVxlanGpe.class).put("patch", InterfaceTypePatch.class)
87             .put("system", InterfaceTypeSystem.class).put("tap", InterfaceTypeTap.class)
88             .put("geneve", InterfaceTypeGeneve.class).put("gre", InterfaceTypeGre.class)
89             .put("ipsec_gre", InterfaceTypeIpsecGre.class).put("gre64", InterfaceTypeGre64.class)
90             .put("ipsec_gre64", InterfaceTypeIpsecGre64.class).put("lisp", InterfaceTypeLisp.class)
91             .put("dpdk", InterfaceTypeDpdk.class).put("dpdkr", InterfaceTypeDpdkr.class)
92             .put("dpdkvhost", InterfaceTypeDpdkvhost.class).put("dpdkvhostuser", InterfaceTypeDpdkvhostuser.class)
93             .build();
94
95     public static NodeId createNodeId(String ip, Integer port) {
96         String uriString = OVSDB_URI_PREFIX + "://" + ip + ":" + port;
97         Uri uri = new Uri(uriString);
98         return new NodeId(uri);
99     }
100
101     public static void createBridge(DataBroker dataBroker) throws TransactionCommitFailedException {
102         final OvsdbBridgeName ovsdbBridgeName = new OvsdbBridgeName("s2");
103         final InstanceIdentifier<Node> bridgeIid = createInstanceIdentifier("192.168.56.101", 6640, ovsdbBridgeName);
104         final InstanceIdentifier<OvsdbBridgeAugmentation> ovsdbBridgeIid = bridgeIid.builder()
105                 .augmentation(OvsdbBridgeAugmentation.class).build();
106         final NodeId bridgeNodeId = createManagedNodeId(bridgeIid);
107         final NodeBuilder bridgeCreateNodeBuilder = new NodeBuilder();
108         bridgeCreateNodeBuilder.setNodeId(bridgeNodeId);
109         OvsdbBridgeAugmentationBuilder bridgeCreateAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
110         bridgeCreateAugmentationBuilder.setBridgeName(ovsdbBridgeName)
111                 .setDatapathId(new DatapathId("00:00:00:00:00:00:00:01"));
112         bridgeCreateNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, bridgeCreateAugmentationBuilder.build());
113         LOG.debug("Built with the intent to store bridge data {}", bridgeCreateAugmentationBuilder.toString());
114         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
115         tx.put(LogicalDatastoreType.OPERATIONAL, ovsdbBridgeIid, bridgeCreateAugmentationBuilder.build(), true);
116         tx.submit().checkedGet();
117     }
118
119     public static void updateBridge(DataBroker dataBroker, String datapathId) throws TransactionCommitFailedException {
120         final OvsdbBridgeName ovsdbBridgeName = new OvsdbBridgeName("s2");
121         final InstanceIdentifier<Node> bridgeIid = createInstanceIdentifier("192.168.56.101", 6640, ovsdbBridgeName);
122         final InstanceIdentifier<OvsdbBridgeAugmentation> ovsdbBridgeIid = bridgeIid.builder()
123             .augmentation(OvsdbBridgeAugmentation.class).build();
124         final NodeId bridgeNodeId = createManagedNodeId(bridgeIid);
125         final NodeBuilder bridgeCreateNodeBuilder = new NodeBuilder();
126         bridgeCreateNodeBuilder.setNodeId(bridgeNodeId);
127         OvsdbBridgeAugmentationBuilder bridgeCreateAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
128         bridgeCreateAugmentationBuilder.setBridgeName(ovsdbBridgeName)
129             .setDatapathId(new DatapathId(datapathId));
130         bridgeCreateNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, bridgeCreateAugmentationBuilder.build());
131         LOG.debug("Built with the intent to store bridge data {}", bridgeCreateAugmentationBuilder.toString());
132         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
133         tx.merge(LogicalDatastoreType.OPERATIONAL, ovsdbBridgeIid, bridgeCreateAugmentationBuilder.build(), true);
134         tx.submit().checkedGet();
135     }
136
137     public boolean deleteBridge(final ConnectionInfo connectionInfo, final String bridgeName) {
138         return deleteBridge(connectionInfo, bridgeName, OVSDB_UPDATE_TIMEOUT);
139     }
140
141     public boolean deleteBridge(final ConnectionInfo connectionInfo, final String bridgeName, long timeout) {
142         boolean result = true;
143         // mdsalUtils.delete(LogicalDatastoreType.CONFIGURATION,
144         // createInstanceIdentifier(connectionInfo, new
145         // OvsdbBridgeName(bridgeName)));
146         if (timeout != 0) {
147             try {
148                 Thread.sleep(timeout);
149             } catch (InterruptedException e) {
150                 LOG.warn("Interrupted while waiting after deleting bridge {}", bridgeName, e);
151             }
152         }
153         return result;
154     }
155
156     public static void deleteBridge(DataBroker dataBroker) {
157         final OvsdbBridgeName ovsdbBridgeName = new OvsdbBridgeName("s2");
158         final InstanceIdentifier<Node> bridgeIid = createInstanceIdentifier("192.168.56.101", 6640, ovsdbBridgeName);
159         final InstanceIdentifier<OvsdbBridgeAugmentation> ovsdbBridgeIid = bridgeIid.builder()
160                 .augmentation(OvsdbBridgeAugmentation.class).build();
161         LOG.debug("Built with the intent to delete bridge data {}", bridgeIid.toString());
162         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
163         tx.delete(LogicalDatastoreType.OPERATIONAL, ovsdbBridgeIid);
164         tx.submit();
165
166     }
167
168     public static InstanceIdentifier<Node> createInstanceIdentifier(NodeId nodeId) {
169         return InstanceIdentifier.create(NetworkTopology.class)
170                 .child(Topology.class, new TopologyKey(OVSDB_TOPOLOGY_ID)).child(Node.class, new NodeKey(nodeId));
171     }
172
173     public static InstanceIdentifier<Node> createInstanceIdentifier(String ip, Integer port) {
174         InstanceIdentifier<Node> path = InstanceIdentifier.create(NetworkTopology.class)
175                 .child(Topology.class, new TopologyKey(OVSDB_TOPOLOGY_ID)).child(Node.class, createNodeKey(ip, port));
176         LOG.debug("Created ovsdb path: {}", path);
177         return path;
178     }
179
180     public static InstanceIdentifier<Node> createInstanceIdentifier(String remoteIp, Integer remotePort,
181             OvsdbBridgeName bridgeName) {
182         return createInstanceIdentifier(createManagedNodeId(remoteIp, remotePort, bridgeName));
183     }
184
185     public static InstanceIdentifier<Node> createInstanceIdentifier(NodeKey ovsdbNodeKey, String bridgeName) {
186         return createInstanceIdentifier(createManagedNodeId(ovsdbNodeKey.getNodeId(), bridgeName));
187     }
188
189     public static InstanceIdentifier<Node> createInstanceIdentifier(String ip, Integer port, String bridgeName) {
190         return createInstanceIdentifier(ip, port, new OvsdbBridgeName(bridgeName));
191     }
192
193     public static NodeId createManagedNodeId(String ip, Integer port, OvsdbBridgeName bridgeName) {
194         return new NodeId(createNodeId(ip, port).getValue() + "/" + BRIDGE_URI_PREFIX + "/" + bridgeName.getValue());
195     }
196
197     public static NodeId createManagedNodeId(InstanceIdentifier<Node> iid) {
198         NodeKey nodeKey = iid.firstKeyOf(Node.class);
199         return nodeKey.getNodeId();
200     }
201
202     public static NodeId createManagedNodeId(NodeId ovsdbNodeId, String bridgeName) {
203         return new NodeId(ovsdbNodeId.getValue() + "/" + BRIDGE_URI_PREFIX + "/" + bridgeName);
204     }
205
206     public static InstanceIdentifier<TerminationPoint> createTerminationPointInstanceIdentifier(NodeKey nodeKey, String
207         portName) {
208         InstanceIdentifier<TerminationPoint> terminationPointPath = InstanceIdentifier
209                 .create(NetworkTopology.class)
210                 .child(Topology.class, new TopologyKey(OVSDB_TOPOLOGY_ID))
211                 .child(Node.class,nodeKey)
212                 .child(TerminationPoint.class, new TerminationPointKey(new TpId(portName)));
213
214         LOG.debug("Termination point InstanceIdentifier generated : {}", terminationPointPath);
215         return terminationPointPath;
216     }
217
218     public static void createTerminationPoint(DataBroker dataBroker, String interfaceName,
219                                               Class<? extends InterfaceTypeBase> type) throws
220         TransactionCommitFailedException {
221         final OvsdbBridgeName ovsdbBridgeName = new OvsdbBridgeName("s2");
222         final InstanceIdentifier<Node> bridgeIid =
223             createInstanceIdentifier("192.168.56.101", 6640,  ovsdbBridgeName);
224         InstanceIdentifier<TerminationPoint> tpId = createTerminationPointInstanceIdentifier(
225                 InstanceIdentifier.keyOf(bridgeIid.firstIdentifierOf(Node.class)), interfaceName);
226         TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
227         tpBuilder.setKey(InstanceIdentifier.keyOf(tpId));
228         OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder = new OvsdbTerminationPointAugmentationBuilder();
229
230         tpAugmentationBuilder.setName(interfaceName);
231         if (type != null) {
232             tpAugmentationBuilder.setInterfaceType(type);
233         }
234         tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build());
235         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
236         tx.put(OPERATIONAL, tpId, tpBuilder.build(), true);
237         tx.submit().checkedGet();
238     }
239
240     public static void updateTerminationPoint(DataBroker dataBroker, String interfaceName,
241                                               Class<? extends InterfaceTypeBase> type) throws
242         TransactionCommitFailedException {
243         final OvsdbBridgeName ovsdbBridgeName = new OvsdbBridgeName("s2");
244         final InstanceIdentifier<Node> bridgeIid =
245             createInstanceIdentifier("192.168.56.101", 6640,  ovsdbBridgeName);
246         InstanceIdentifier<TerminationPoint> tpId = createTerminationPointInstanceIdentifier(
247             InstanceIdentifier.keyOf(bridgeIid.firstIdentifierOf(Node.class)), interfaceName);
248         TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
249         tpBuilder.setKey(InstanceIdentifier.keyOf(tpId));
250         OvsdbTerminationPointAugmentationBuilder tpAugmentationBuilder = new OvsdbTerminationPointAugmentationBuilder();
251
252         tpAugmentationBuilder.setName(interfaceName);
253         if (type != null) {
254             tpAugmentationBuilder.setInterfaceType(type);
255         }
256         List<InterfaceBfdStatus> interfaceBfdStatuses = Arrays.asList(new InterfaceBfdStatusBuilder()
257             .setBfdStatusKey("state").setBfdStatusValue("down").build());
258
259         tpAugmentationBuilder.setInterfaceBfdStatus(interfaceBfdStatuses);
260         tpBuilder.addAugmentation(OvsdbTerminationPointAugmentation.class, tpAugmentationBuilder.build());
261         WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
262         tx.merge(OPERATIONAL, tpId, tpBuilder.build(), true);
263         tx.submit().checkedGet();
264     }
265
266     public static NodeKey createNodeKey(String ip, Integer port) {
267         return new NodeKey(createNodeId(ip, port));
268     }
269
270     public static ConnectionInfo getConnectionInfo(final String addressStr, final String portStr) {
271         InetAddress inetAddress = null;
272         try {
273             inetAddress = InetAddress.getByName(addressStr);
274         } catch (UnknownHostException e) {
275             LOG.warn("Could not allocate InetAddress", e);
276         }
277
278         IpAddress address = createIpAddress(inetAddress);
279         PortNumber port = new PortNumber(Integer.parseInt(portStr));
280
281         LOG.info("connectionInfo: {}", new ConnectionInfoBuilder().setRemoteIp(address).setRemotePort(port).build());
282         return new ConnectionInfoBuilder().setRemoteIp(address).setRemotePort(port).build();
283     }
284
285     public ConnectionInfo getConnectionInfo(Node ovsdbNode) {
286         ConnectionInfo connectionInfo = null;
287         OvsdbNodeAugmentation ovsdbNodeAugmentation = extractOvsdbNode(ovsdbNode);
288         if (ovsdbNodeAugmentation != null) {
289             connectionInfo = ovsdbNodeAugmentation.getConnectionInfo();
290         }
291         return connectionInfo;
292     }
293
294     public OvsdbNodeAugmentation extractOvsdbNode(Node node) {
295         return node.getAugmentation(OvsdbNodeAugmentation.class);
296     }
297
298     public static IpAddress createIpAddress(InetAddress address) {
299         IpAddress ip = null;
300         if (address instanceof Inet4Address) {
301             ip = createIpAddress((Inet4Address) address);
302         } else if (address instanceof Inet6Address) {
303             ip = createIpAddress((Inet6Address) address);
304         }
305         return ip;
306     }
307
308     public static IpAddress createIpAddress(Inet4Address address) {
309         return IetfInetUtil.INSTANCE.ipAddressFor(address);
310     }
311
312     public static IpAddress createIpAddress(Inet6Address address) {
313         Ipv6Address ipv6 = new Ipv6Address(address.getHostAddress());
314         return new IpAddress(ipv6);
315     }
316
317     public static String connectionInfoToString(final ConnectionInfo connectionInfo) {
318         return String.valueOf(connectionInfo.getRemoteIp().getValue()) + ":"
319                 + connectionInfo.getRemotePort().getValue();
320     }
321
322     public boolean addOvsdbNode(final ConnectionInfo connectionInfo) {
323         return addOvsdbNode(connectionInfo, OVSDB_UPDATE_TIMEOUT);
324     }
325
326     public boolean addOvsdbNode(final ConnectionInfo connectionInfo, long timeout) {
327         boolean result = true;
328         // mdsalUtils.put(LogicalDatastoreType.CONFIGURATION,
329         // createInstanceIdentifier(connectionInfo),
330         // createNode(connectionInfo));
331         if (timeout != 0) {
332             try {
333                 Thread.sleep(timeout);
334             } catch (InterruptedException e) {
335                 LOG.warn("Interrupted while waiting after adding OVSDB node {}", connectionInfoToString(connectionInfo),
336                         e);
337             }
338         }
339         return result;
340     }
341
342     public Node getOvsdbNode(final ConnectionInfo connectionInfo) {
343         // return mdsalUtils.read(LogicalDatastoreType.OPERATIONAL,
344         // createInstanceIdentifier(connectionInfo));
345         return null;
346     }
347
348     public boolean deleteOvsdbNode(final ConnectionInfo connectionInfo) {
349         return deleteOvsdbNode(connectionInfo, OVSDB_UPDATE_TIMEOUT);
350     }
351
352     public boolean deleteOvsdbNode(final ConnectionInfo connectionInfo, long timeout) {
353         boolean result = true;
354         // mdsalUtils.delete(LogicalDatastoreType.CONFIGURATION,
355         // createInstanceIdentifier(connectionInfo));
356         if (timeout != 0) {
357             try {
358                 Thread.sleep(timeout);
359             } catch (InterruptedException e) {
360                 LOG.warn("Interrupted while waiting after deleting OVSDB node {}",
361                         connectionInfoToString(connectionInfo), e);
362             }
363         }
364         return result;
365     }
366
367     public Node connectOvsdbNode(final ConnectionInfo connectionInfo) {
368         return connectOvsdbNode(connectionInfo, OVSDB_UPDATE_TIMEOUT);
369     }
370
371     public Node connectOvsdbNode(final ConnectionInfo connectionInfo, long timeout) {
372         addOvsdbNode(connectionInfo, timeout);
373         Node node = getOvsdbNode(connectionInfo);
374         LOG.info("Connected to {}", connectionInfoToString(connectionInfo));
375         return node;
376     }
377
378     public boolean disconnectOvsdbNode(final ConnectionInfo connectionInfo) {
379         return disconnectOvsdbNode(connectionInfo, OVSDB_UPDATE_TIMEOUT);
380     }
381
382     public boolean disconnectOvsdbNode(final ConnectionInfo connectionInfo, long timeout) {
383         deleteOvsdbNode(connectionInfo, timeout);
384         LOG.info("Disconnected from {}", connectionInfoToString(connectionInfo));
385         return true;
386     }
387
388     public List<ControllerEntry> createControllerEntry(String controllerTarget) {
389         List<ControllerEntry> controllerEntriesList = new ArrayList<>();
390         controllerEntriesList.add(new ControllerEntryBuilder().setTarget(new Uri(controllerTarget)).build());
391         return controllerEntriesList;
392     }
393
394     public OvsdbNodeAugmentation extractNodeAugmentation(Node node) {
395         return node.getAugmentation(OvsdbNodeAugmentation.class);
396     }
397
398     public OvsdbBridgeAugmentation extractBridgeAugmentation(Node node) {
399         if (node == null) {
400             return null;
401         }
402         return node.getAugmentation(OvsdbBridgeAugmentation.class);
403     }
404 }