2 * Copyright (c) 2015 Red Hat, 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.ovsdb.openstack.netvirt.it;
10 import static org.junit.Assert.assertNotNull;
11 import static org.junit.Assert.fail;
12 import static org.ops4j.pax.exam.CoreOptions.maven;
13 import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.editConfigurationFilePut;
14 import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.features;
16 import com.google.common.collect.ImmutableBiMap;
17 import com.google.common.collect.Lists;
18 import com.google.common.collect.ObjectArrays;
19 import java.net.InetAddress;
20 import java.net.UnknownHostException;
21 import java.util.ArrayList;
22 import java.util.HashSet;
23 import java.util.List;
24 import java.util.Properties;
27 import javax.inject.Inject;
29 import org.junit.Assert;
30 import org.junit.Assume;
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.junit.runner.RunWith;
34 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
35 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
36 import org.opendaylight.ovsdb.southbound.SouthboundConstants;
37 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
38 import org.opendaylight.ovsdb.southbound.SouthboundProvider;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentationBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeProtocolBase;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbPortInterfaceAttributes.VlanMode;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentationBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntry;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.bridge.attributes.ProtocolEntryBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfo;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ConnectionInfoBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.InterfaceTypeEntryBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.OpenvswitchOtherConfigs;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIds;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceExternalIdsBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceOtherConfigs;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.InterfaceOtherConfigsBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Options;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.OptionsBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortExternalIds;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortExternalIdsBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortOtherConfigs;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.PortOtherConfigsBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.Trunks;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.TrunksBuilder;
69 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
70 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
71 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
72 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
73 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
74 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
75 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder;
76 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
77 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder;
78 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointKey;
79 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
80 import org.ops4j.pax.exam.Configuration;
81 import org.ops4j.pax.exam.Option;
82 import org.ops4j.pax.exam.junit.PaxExam;
83 import org.ops4j.pax.exam.karaf.options.LogLevelOption;
84 import org.ops4j.pax.exam.options.MavenUrlReference;
85 import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
86 import org.ops4j.pax.exam.spi.reactors.PerClass;
87 import org.osgi.framework.Bundle;
88 import org.osgi.framework.BundleContext;
89 import org.slf4j.Logger;
90 import org.slf4j.LoggerFactory;
93 * Integration tests for southbound-impl
95 * @author Sam Hague (shague@redhat.com)
97 @RunWith(PaxExam.class)
98 @ExamReactorStrategy(PerClass.class)
99 public class SouthboundIT extends AbstractMdsalTestBase {
100 private static final Logger LOG = LoggerFactory.getLogger(SouthboundIT.class);
101 private static final int OVSDB_UPDATE_TIMEOUT = 1000;
102 private static DataBroker dataBroker = null;
103 private static String addressStr;
104 private static String portStr;
105 private static String connectionType;
106 private static Boolean setup = false;
107 private static MdsalUtils mdsalUtils = null;
108 private static String extras = "true";
109 private static final String NETVIRT = "org.opendaylight.ovsdb.openstack.net-virt";
110 private static final String NETVIRTPROVIDERS = "org.opendaylight.ovsdb.openstack.net-virt-providers";
113 private BundleContext bundleContext;
116 public Option[] config() {
117 return super.config();
121 public String getModuleName() {
122 return "southbound-impl";
126 public String getInstanceName() {
127 return "southbound-default";
131 public MavenUrlReference getFeatureRepo() {
133 .groupId("org.opendaylight.ovsdb")
134 //.artifactId("southbound-features")
135 .artifactId("features-ovsdb")
136 .classifier("features")
138 .versionAsInProject();
142 public String getFeatureName() {
143 return "odl-ovsdb-southbound-impl-ui";
146 protected String usage() {
147 return "Integration Test needs a valid connection configuration as follows :\n"
148 + "active connection : mvn -Dovsdbserver.ipaddress=x.x.x.x -Dovsdbserver.port=yyyy verify\n"
149 + "passive connection : mvn -Dovsdbserver.connection=passive verify\n";
153 public Option[] getFeaturesOptions() {
154 /*if (extras.equals("true")) {
155 Option[] options = new Option[] {
156 features("mvn:org.opendaylight.ovsdb/features-ovsdb/1.1.0-SNAPSHOT/xml/features",
157 "odl-ovsdb-openstack-sb")};
160 return new Option[]{};
165 public Option[] getLoggingOptions() {
166 Option[] options = new Option[] {
167 editConfigurationFilePut(SouthboundITConstants.ORG_OPS4J_PAX_LOGGING_CFG,
168 "log4j.logger.org.opendaylight.ovsdb",
169 LogLevelOption.LogLevel.DEBUG.name()),
170 /*editConfigurationFilePut(SouthboundITConstants.ORG_OPS4J_PAX_LOGGING_CFG,
171 "log4j.logger.org.opendaylight.ovsdb.southbound-impl",
172 LogLevelOption.LogLevel.DEBUG.name())*/
175 LOG.info("getLoggingOptions extras: {}", extras);
176 if (extras.equals("true")) {
177 Option[] extraOptions = new Option[] {
178 editConfigurationFilePut(SouthboundITConstants.ORG_OPS4J_PAX_LOGGING_CFG,
179 "log4j.logger.org.opendaylight.ovsdb",
180 LogLevelOption.LogLevel.DEBUG.name()),
181 /*editConfigurationFilePut(SouthboundITConstants.ORG_OPS4J_PAX_LOGGING_CFG,
182 "log4j.logger.org.opendaylight.ovsdb.openstack.net-virt",
183 LogLevelOption.LogLevel.DEBUG.name())*/
185 options = ObjectArrays.concat(options, extraOptions, Option.class);
188 options = ObjectArrays.concat(options, super.getLoggingOptions(), Option.class);
193 public Option[] getPropertiesOptions() {
194 Properties props = new Properties(System.getProperties());
195 String addressStr = props.getProperty(SouthboundITConstants.SERVER_IPADDRESS,
196 SouthboundITConstants.DEFAULT_SERVER_IPADDRESS);
197 String portStr = props.getProperty(SouthboundITConstants.SERVER_PORT,
198 SouthboundITConstants.DEFAULT_SERVER_PORT);
199 String connectionType = props.getProperty(SouthboundITConstants.CONNECTION_TYPE,
200 SouthboundITConstants.CONNECTION_TYPE_ACTIVE);
201 String extras = props.getProperty(SouthboundITConstants.SERVER_EXTRAS,
202 SouthboundITConstants.DEFAULT_SERVER_EXTRAS);
204 LOG.info("getPropertiesOptions: Using the following properties: mode= {}, ip:port= {}:{}, extras= {}",
205 connectionType, addressStr, portStr, extras);
207 Option[] options = new Option[] {
208 editConfigurationFilePut(SouthboundITConstants.CUSTOM_PROPERTIES,
209 SouthboundITConstants.SERVER_IPADDRESS, addressStr),
210 editConfigurationFilePut(SouthboundITConstants.CUSTOM_PROPERTIES,
211 SouthboundITConstants.SERVER_PORT, portStr),
212 editConfigurationFilePut(SouthboundITConstants.CUSTOM_PROPERTIES,
213 SouthboundITConstants.CONNECTION_TYPE, connectionType),
214 editConfigurationFilePut(SouthboundITConstants.CUSTOM_PROPERTIES,
215 SouthboundITConstants.SERVER_EXTRAS, extras)
221 public void setExtras() {
222 Properties props = new Properties(System.getProperties());
223 extras = props.getProperty(SouthboundITConstants.SERVER_EXTRAS,
224 SouthboundITConstants.DEFAULT_SERVER_EXTRAS);
225 LOG.info("setExtras: {}", extras);
226 System.out.println("setExtras: " + extras);
230 public void setUp() throws InterruptedException {
232 LOG.info("Skipping setUp, already initialized");
238 } catch (Exception e) {
241 dataBroker = getSession().getSALService(DataBroker.class);
243 //dataBroker = SouthboundProvider.getDb();
244 Assert.assertNotNull("db should not be null", dataBroker);
246 addressStr = bundleContext.getProperty(SouthboundITConstants.SERVER_IPADDRESS);
247 portStr = bundleContext.getProperty(SouthboundITConstants.SERVER_PORT);
248 connectionType = bundleContext.getProperty(SouthboundITConstants.CONNECTION_TYPE);
250 LOG.info("setUp: Using the following properties: mode= {}, ip:port= {}:{}, extras= {}",
251 connectionType, addressStr, portStr, extras);
252 if (connectionType.equalsIgnoreCase(SouthboundITConstants.CONNECTION_TYPE_ACTIVE)) {
253 if (addressStr == null) {
258 mdsalUtils = new MdsalUtils(dataBroker);
262 LOG.info("setUp: extras: {}", extras);
263 if (extras.equals("true")) {
264 isBundleReady(bundleContext, NETVIRT);
265 isBundleReady(bundleContext, NETVIRTPROVIDERS);
270 * Test passive connection mode. The southbound starts in a listening mode waiting for connections on port
271 * 6640. This test will wait for incoming connections for {@link SouthboundITConstants.CONNECTION_INIT_TIMEOUT} ms.
273 * @throws InterruptedException
276 public void testPassiveNode() throws InterruptedException {
277 if (connectionType.equalsIgnoreCase(SouthboundITConstants.CONNECTION_TYPE_PASSIVE)) {
278 //Wait for CONNECTION_INIT_TIMEOUT for the Passive connection to be initiated by the ovsdb-server.
279 Thread.sleep(SouthboundITConstants.CONNECTION_INIT_TIMEOUT);
283 private ConnectionInfo getConnectionInfo(String addressStr, String portStr) {
284 InetAddress inetAddress = null;
286 inetAddress = InetAddress.getByName(addressStr);
287 } catch (UnknownHostException e) {
288 fail("Could not allocate InetAddress: " + e);
291 IpAddress address = SouthboundMapper.createIpAddress(inetAddress);
292 PortNumber port = new PortNumber(Integer.parseInt(portStr));
294 LOG.info("connectionInfo: {}", new ConnectionInfoBuilder()
295 .setRemoteIp(address)
298 return new ConnectionInfoBuilder()
299 .setRemoteIp(address)
304 private String connectionInfoToString(ConnectionInfo connectionInfo) {
305 return new String(connectionInfo.getRemoteIp().getValue()) + ":" + connectionInfo.getRemotePort().getValue();
309 public void testNetworkTopology() throws InterruptedException {
310 NetworkTopology networkTopology = mdsalUtils.read(LogicalDatastoreType.CONFIGURATION,
311 InstanceIdentifier.create(NetworkTopology.class));
312 Assert.assertNotNull("NetworkTopology could not be found in " + LogicalDatastoreType.CONFIGURATION,
315 networkTopology = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL,
316 InstanceIdentifier.create(NetworkTopology.class));
317 Assert.assertNotNull("NetworkTopology could not be found in " + LogicalDatastoreType.OPERATIONAL,
322 public void testOvsdbTopology() throws InterruptedException {
323 InstanceIdentifier<Topology> path = InstanceIdentifier
324 .create(NetworkTopology.class)
325 .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID));
327 Topology topology = mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, path);
328 Assert.assertNotNull("Topology could not be found in " + LogicalDatastoreType.CONFIGURATION,
331 topology = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, path);
333 Assert.assertNotNull("Topology could not be found in " + LogicalDatastoreType.OPERATIONAL,
337 private boolean addOvsdbNode(ConnectionInfo connectionInfo) throws InterruptedException {
338 boolean result = mdsalUtils.put(LogicalDatastoreType.CONFIGURATION,
339 SouthboundMapper.createInstanceIdentifier(connectionInfo),
340 SouthboundMapper.createNode(connectionInfo));
341 Thread.sleep(OVSDB_UPDATE_TIMEOUT);
345 private Node getOvsdbNode(ConnectionInfo connectionInfo) {
346 Node node = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL,
347 SouthboundMapper.createInstanceIdentifier(connectionInfo));
351 private boolean deleteOvsdbNode(ConnectionInfo connectionInfo) throws InterruptedException {
352 boolean result = mdsalUtils.delete(LogicalDatastoreType.CONFIGURATION,
353 SouthboundMapper.createInstanceIdentifier(connectionInfo));
354 Thread.sleep(OVSDB_UPDATE_TIMEOUT);
358 private Node connectOvsdbNode(ConnectionInfo connectionInfo) throws InterruptedException {
359 Assert.assertTrue(addOvsdbNode(connectionInfo));
360 Node node = getOvsdbNode(connectionInfo);
361 Assert.assertNotNull(node);
362 LOG.info("Connected to {}", connectionInfoToString(connectionInfo));
366 private boolean disconnectOvsdbNode(ConnectionInfo connectionInfo) throws InterruptedException {
367 Assert.assertTrue(deleteOvsdbNode(connectionInfo));
368 Node node = getOvsdbNode(connectionInfo);
369 //Assert.assertNull(node);
370 Assume.assumeNotNull(node);
371 LOG.info("Disconnected from {}", connectionInfoToString(connectionInfo));
376 public void testAddDeleteOvsdbNode() throws InterruptedException {
377 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
378 Node ovsdbNode = connectOvsdbNode(connectionInfo);
379 //Assert.assertFalse(disconnectOvsdbNode(connectionInfo));
380 Assume.assumeTrue(disconnectOvsdbNode(connectionInfo));
384 public void testOvsdbNodeOvsVersion() throws InterruptedException {
385 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
386 Node ovsdbNode = connectOvsdbNode(connectionInfo);
387 OvsdbNodeAugmentation augment = ovsdbNode.getAugmentation(OvsdbNodeAugmentation.class);
388 assertNotNull(augment.getOvsVersion());
389 Assume.assumeTrue(disconnectOvsdbNode(connectionInfo));
393 public void testOpenVSwitchOtherConfig() throws InterruptedException {
394 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
395 Node ovsdbNode = connectOvsdbNode(connectionInfo);
396 OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode.getAugmentation(OvsdbNodeAugmentation.class);
397 assertNotNull(ovsdbNodeAugmentation);
398 List<OpenvswitchOtherConfigs> otherConfigsList = ovsdbNodeAugmentation.getOpenvswitchOtherConfigs();
399 if (otherConfigsList != null) {
400 for (OpenvswitchOtherConfigs otherConfig : otherConfigsList) {
401 if (otherConfig.getOtherConfigKey().equals("local_ip")) {
402 LOG.info("local_ip: {}", otherConfig.getOtherConfigValue());
405 LOG.info("other_config {}:{}", otherConfig.getOtherConfigKey(), otherConfig.getOtherConfigValue());
409 LOG.info("other_config is not present");
411 //Assert.assertFalse(disconnectOvsdbNode(connectionInfo));
412 Assume.assumeTrue(disconnectOvsdbNode(connectionInfo));
415 private void setManagedBy(OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder,
416 ConnectionInfo connectionInfo) {
417 InstanceIdentifier<Node> connectionNodePath = SouthboundMapper.createInstanceIdentifier(connectionInfo);
418 ovsdbBridgeAugmentationBuilder.setManagedBy(new OvsdbNodeRef(connectionNodePath));
421 private List<ProtocolEntry> createMdsalProtocols() {
422 List<ProtocolEntry> protocolList = new ArrayList<ProtocolEntry>();
423 ImmutableBiMap<String, Class<? extends OvsdbBridgeProtocolBase>> mapper =
424 SouthboundConstants.OVSDB_PROTOCOL_MAP.inverse();
425 protocolList.add(new ProtocolEntryBuilder().
426 setProtocol((Class<? extends OvsdbBridgeProtocolBase>) mapper.get("OpenFlow13")).build());
430 private OvsdbTerminationPointAugmentationBuilder createGenericOvsdbTerminationPointAugmentationBuilder() {
431 OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointAugmentationBuilder =
432 new OvsdbTerminationPointAugmentationBuilder();
433 ovsdbTerminationPointAugmentationBuilder.setInterfaceType(
434 new InterfaceTypeEntryBuilder()
436 SouthboundMapper.createInterfaceType("internal"))
437 .build().getInterfaceType());
438 return ovsdbTerminationPointAugmentationBuilder;
441 private boolean addTerminationPoint(NodeId bridgeNodeId, String portName,
442 OvsdbTerminationPointAugmentationBuilder ovsdbTerminationPointAugmentationBuilder)
443 throws InterruptedException {
445 InstanceIdentifier<Node> portIid = SouthboundMapper.createInstanceIdentifier(bridgeNodeId);
446 NodeBuilder portNodeBuilder = new NodeBuilder();
447 NodeId portNodeId = SouthboundMapper.createManagedNodeId(portIid);
448 portNodeBuilder.setNodeId(portNodeId);
449 TerminationPointBuilder entry = new TerminationPointBuilder();
450 entry.setKey(new TerminationPointKey(new TpId(portName)));
451 entry.addAugmentation(
452 OvsdbTerminationPointAugmentation.class,
453 ovsdbTerminationPointAugmentationBuilder.build());
454 portNodeBuilder.setTerminationPoint(Lists.newArrayList(entry.build()));
455 boolean result = mdsalUtils.merge(LogicalDatastoreType.CONFIGURATION,
456 portIid, portNodeBuilder.build());
457 Thread.sleep(OVSDB_UPDATE_TIMEOUT);
461 private boolean addBridge(ConnectionInfo connectionInfo, String bridgeName) throws InterruptedException {
462 //Node node = SouthboundMapper.createNode(connectionInfo);
463 NodeBuilder bridgeNodeBuilder = new NodeBuilder();
464 InstanceIdentifier<Node> bridgeIid =
465 SouthboundMapper.createInstanceIdentifier(connectionInfo, new OvsdbBridgeName(bridgeName));
466 NodeId bridgeNodeId = SouthboundMapper.createManagedNodeId(bridgeIid);
467 bridgeNodeBuilder.setNodeId(bridgeNodeId);
468 OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
469 ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(bridgeName));
470 ovsdbBridgeAugmentationBuilder.setProtocolEntry(createMdsalProtocols());
471 ovsdbBridgeAugmentationBuilder.setFailMode(
472 SouthboundConstants.OVSDB_FAIL_MODE_MAP.inverse().get("secure"));
473 setManagedBy(ovsdbBridgeAugmentationBuilder, connectionInfo);
474 bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, ovsdbBridgeAugmentationBuilder.build());
476 LOG.debug("Built with the intent to store bridge data {}",
477 ovsdbBridgeAugmentationBuilder.toString());
479 boolean result = mdsalUtils.merge(LogicalDatastoreType.CONFIGURATION,
480 bridgeIid, bridgeNodeBuilder.build());
481 Thread.sleep(OVSDB_UPDATE_TIMEOUT);
485 private OvsdbBridgeAugmentation getBridge(ConnectionInfo connectionInfo) {
486 InstanceIdentifier<Node> bridgeIid =
487 SouthboundMapper.createInstanceIdentifier(connectionInfo,
488 new OvsdbBridgeName(SouthboundITConstants.BRIDGE_NAME));
489 Node bridgeNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, bridgeIid);
490 Assert.assertNotNull(bridgeNode);
491 OvsdbBridgeAugmentation ovsdbBridgeAugmentation = bridgeNode.getAugmentation(OvsdbBridgeAugmentation.class);
492 Assert.assertNotNull(ovsdbBridgeAugmentation);
493 return ovsdbBridgeAugmentation;
496 private boolean deleteBridge(ConnectionInfo connectionInfo) throws InterruptedException {
497 boolean result = mdsalUtils.delete(LogicalDatastoreType.CONFIGURATION,
498 SouthboundMapper.createInstanceIdentifier(connectionInfo,
499 new OvsdbBridgeName(SouthboundITConstants.BRIDGE_NAME)));
500 Thread.sleep(OVSDB_UPDATE_TIMEOUT);
505 public void testAddDeleteBridge() throws InterruptedException {
506 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
507 Node ovsdbNode = connectOvsdbNode(connectionInfo);
509 Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
510 OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
511 Assert.assertNotNull(bridge);
512 LOG.info("bridge: {}", bridge);
514 Assert.assertTrue(deleteBridge(connectionInfo));
516 //Assert.assertFalse(disconnectOvsdbNode(connectionInfo));
517 Assume.assumeTrue(disconnectOvsdbNode(connectionInfo));
520 private InstanceIdentifier<Node> getTpIid(ConnectionInfo connectionInfo, OvsdbBridgeAugmentation bridge) {
521 return SouthboundMapper.createInstanceIdentifier(connectionInfo,
522 bridge.getBridgeName());
526 public void testTerminationPointOfPort() throws InterruptedException {
527 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
528 connectOvsdbNode(connectionInfo);
530 Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
531 OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
532 Assert.assertNotNull(bridge);
533 LOG.info("bridge: {}", bridge);
534 NodeId nodeId = SouthboundMapper.createManagedNodeId(SouthboundMapper.createInstanceIdentifier(
535 connectionInfo, bridge.getBridgeName()));
536 OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
537 createGenericOvsdbTerminationPointAugmentationBuilder();
538 String portName = "testOfPort";
539 ovsdbTerminationBuilder.setName(portName);
540 Long ofPortExpected = new Long(45002);
541 ovsdbTerminationBuilder.setOfport(ofPortExpected);
542 Assert.assertTrue(addTerminationPoint(nodeId, portName, ovsdbTerminationBuilder));
543 InstanceIdentifier<Node> terminationPointIid = getTpIid(connectionInfo, bridge);
544 Node terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid);
545 Assert.assertNotNull(terminationPointNode);
547 List<TerminationPoint> terminationPoints = terminationPointNode.getTerminationPoint();
548 for (TerminationPoint terminationPoint : terminationPoints) {
549 OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation =
550 terminationPoint.getAugmentation(OvsdbTerminationPointAugmentation.class);
551 if (ovsdbTerminationPointAugmentation.getName().equals(portName)) {
552 Long ofPort = ovsdbTerminationPointAugmentation.getOfport();
553 // if ephemeral port 45002 is in use, ofPort is set to 1
554 Assert.assertTrue(ofPort.equals(ofPortExpected) || ofPort.equals(new Long(1)));
555 LOG.info("ofPort: {}", ofPort);
558 Assert.assertTrue(deleteBridge(connectionInfo));
562 public void testTerminationPointOfPortRequest() throws InterruptedException {
563 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
564 connectOvsdbNode(connectionInfo);
565 Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
566 OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
567 Assert.assertNotNull(bridge);
568 NodeId nodeId = SouthboundMapper.createManagedNodeId(SouthboundMapper.createInstanceIdentifier(
569 connectionInfo, bridge.getBridgeName()));
570 OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
571 createGenericOvsdbTerminationPointAugmentationBuilder();
572 String portName = "testOfPortRequest";
573 ovsdbTerminationBuilder.setName(portName);
574 Long ofPortExpected = new Long(45008);
575 Integer ofPortRequestExpected = ofPortExpected.intValue();
576 Long ofPortInput = new Long(45008);
577 ovsdbTerminationBuilder.setOfport(ofPortInput);
578 ovsdbTerminationBuilder.setOfportRequest(ofPortRequestExpected);
579 Assert.assertTrue(addTerminationPoint(nodeId, portName, ovsdbTerminationBuilder));
580 InstanceIdentifier<Node> terminationPointIid = getTpIid(connectionInfo, bridge);
581 Node terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid);
582 Assert.assertNotNull(terminationPointNode);
584 List<TerminationPoint> terminationPoints = terminationPointNode.getTerminationPoint();
585 for (TerminationPoint terminationPoint : terminationPoints) {
586 OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation =
587 terminationPoint.getAugmentation(OvsdbTerminationPointAugmentation.class);
588 if (ovsdbTerminationPointAugmentation.getName().equals(portName)) {
589 Long ofPort = ovsdbTerminationPointAugmentation.getOfport();
590 // if ephemeral port 45002 is in use, ofPort is set to 1
591 Assert.assertTrue(ofPort.equals(ofPortExpected) || ofPort.equals(new Long(1)));
592 LOG.info("ofPort: {}", ofPort);
594 Integer ofPortRequest = ovsdbTerminationPointAugmentation.getOfportRequest();
595 Assert.assertTrue(ofPortRequest.equals(ofPortRequestExpected));
596 LOG.info("ofPortRequest: {}", ofPortRequest);
599 Assert.assertTrue(deleteBridge(connectionInfo));
603 public void testTerminationPointPortExternalIds() throws InterruptedException {
604 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
605 connectOvsdbNode(connectionInfo);
606 Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
607 OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
608 Assert.assertNotNull(bridge);
609 NodeId nodeId = SouthboundMapper.createManagedNodeId(SouthboundMapper.createInstanceIdentifier(
610 connectionInfo, bridge.getBridgeName()));
611 OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
612 createGenericOvsdbTerminationPointAugmentationBuilder();
613 String portName = "testPortExternalIds";
614 ovsdbTerminationBuilder.setName(portName);
616 PortExternalIdsBuilder externalIdsBuilder1 = new PortExternalIdsBuilder();
617 externalIdsBuilder1.setExternalIdKey("portExternalIdKey1");
618 externalIdsBuilder1.setExternalIdValue("portExternalIdValue1");
619 PortExternalIdsBuilder externalIdsBuilder2 = new PortExternalIdsBuilder();
620 externalIdsBuilder2.setExternalIdKey("portExternalIdKey2");
621 externalIdsBuilder2.setExternalIdValue("portExternalIdValue2");
622 List<PortExternalIds> portExternalIds = Lists.newArrayList(externalIdsBuilder1.build(),
623 externalIdsBuilder2.build());
624 ovsdbTerminationBuilder.setPortExternalIds(portExternalIds);
626 Assert.assertTrue(addTerminationPoint(nodeId, portName, ovsdbTerminationBuilder));
627 InstanceIdentifier<Node> terminationPointIid = getTpIid(connectionInfo, bridge);
628 Node terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid);
629 Assert.assertNotNull(terminationPointNode);
631 List<TerminationPoint> terminationPoints = terminationPointNode.getTerminationPoint();
632 for (TerminationPoint terminationPoint : terminationPoints) {
633 OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation =
634 terminationPoint.getAugmentation(OvsdbTerminationPointAugmentation.class);
635 if (ovsdbTerminationPointAugmentation.getName().equals(portName)) {
636 List<PortExternalIds> actualPortExternalIds = ovsdbTerminationPointAugmentation.getPortExternalIds();
637 Assert.assertTrue((portExternalIds.size() == actualPortExternalIds.size()));
638 for (PortExternalIds portExternalId : portExternalIds) {
639 Assert.assertTrue(actualPortExternalIds.contains(portExternalId));
643 Assert.assertTrue(deleteBridge(connectionInfo));
647 public void testTerminationPointInterfaceExternalIds() throws InterruptedException {
648 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
649 connectOvsdbNode(connectionInfo);
650 Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
651 OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
652 Assert.assertNotNull(bridge);
653 NodeId nodeId = SouthboundMapper.createManagedNodeId(SouthboundMapper.createInstanceIdentifier(
654 connectionInfo, bridge.getBridgeName()));
655 OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
656 createGenericOvsdbTerminationPointAugmentationBuilder();
657 String portName = "testInterfaceExternalIds";
658 ovsdbTerminationBuilder.setName(portName);
660 InterfaceExternalIdsBuilder externalIdsBuilder1 = new InterfaceExternalIdsBuilder();
661 externalIdsBuilder1.setExternalIdKey("interfaceExternalIdKey1");
662 externalIdsBuilder1.setExternalIdValue("interfaceExternalIdValue1");
663 InterfaceExternalIdsBuilder externalIdsBuilder2 = new InterfaceExternalIdsBuilder();
664 externalIdsBuilder2.setExternalIdKey("interfaceExternalIdKey2");
665 externalIdsBuilder2.setExternalIdValue("interfaceExternalIdValue2");
666 List<InterfaceExternalIds> interfaceExternalIds = Lists.newArrayList(externalIdsBuilder1.build(),
667 externalIdsBuilder2.build());
668 ovsdbTerminationBuilder.setInterfaceExternalIds(interfaceExternalIds);
670 Assert.assertTrue(addTerminationPoint(nodeId, portName, ovsdbTerminationBuilder));
671 InstanceIdentifier<Node> terminationPointIid = getTpIid(connectionInfo, bridge);
672 Node terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid);
673 Assert.assertNotNull(terminationPointNode);
675 List<TerminationPoint> terminationPoints = terminationPointNode.getTerminationPoint();
676 for (TerminationPoint terminationPoint : terminationPoints) {
677 OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation =
678 terminationPoint.getAugmentation(OvsdbTerminationPointAugmentation.class);
679 if (ovsdbTerminationPointAugmentation.getName().equals(portName)) {
680 List<InterfaceExternalIds> actualInterfaceExternalIds = ovsdbTerminationPointAugmentation.
681 getInterfaceExternalIds();
682 Assert.assertTrue((interfaceExternalIds.size() == actualInterfaceExternalIds.size()));
683 for (InterfaceExternalIds interfaceExternalId : interfaceExternalIds) {
684 Assert.assertTrue(actualInterfaceExternalIds.contains(interfaceExternalId));
688 Assert.assertTrue(deleteBridge(connectionInfo));
692 public void testTerminationPointOptions() throws InterruptedException {
693 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
694 connectOvsdbNode(connectionInfo);
695 Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
696 OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
697 Assert.assertNotNull(bridge);
698 NodeId nodeId = SouthboundMapper.createManagedNodeId(SouthboundMapper.createInstanceIdentifier(
699 connectionInfo, bridge.getBridgeName()));
700 OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
701 createGenericOvsdbTerminationPointAugmentationBuilder();
702 String portName = "testInterfaceOptions";
703 ovsdbTerminationBuilder.setName(portName);
705 OptionsBuilder optionsBuilder1 = new OptionsBuilder();
706 optionsBuilder1.setOption("option1");
707 optionsBuilder1.setValue("optionValue1");
708 OptionsBuilder optionsBuilder2 = new OptionsBuilder();
709 optionsBuilder2.setOption("option2");
710 optionsBuilder2.setValue("optionValue2");
711 List<Options> options = Lists.newArrayList(optionsBuilder1.build(),
712 optionsBuilder2.build());
713 ovsdbTerminationBuilder.setOptions(options);
715 Assert.assertTrue(addTerminationPoint(nodeId, portName, ovsdbTerminationBuilder));
716 InstanceIdentifier<Node> terminationPointIid = getTpIid(connectionInfo, bridge);
717 Node terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid);
718 Assert.assertNotNull(terminationPointNode);
720 List<TerminationPoint> terminationPoints = terminationPointNode.getTerminationPoint();
721 for (TerminationPoint terminationPoint : terminationPoints) {
722 OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation =
723 terminationPoint.getAugmentation(OvsdbTerminationPointAugmentation.class);
724 if (ovsdbTerminationPointAugmentation.getName().equals(portName)) {
725 List<Options> actualOptions = ovsdbTerminationPointAugmentation.
727 Assert.assertTrue((options.size() == actualOptions.size()));
728 for (Options option : options) {
729 Assert.assertTrue(actualOptions.contains(option));
733 Assert.assertTrue(deleteBridge(connectionInfo));
737 public void testTerminationPointInterfaceOtherConfigs() throws InterruptedException {
738 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
739 connectOvsdbNode(connectionInfo);
740 Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
741 OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
742 Assert.assertNotNull(bridge);
743 NodeId nodeId = SouthboundMapper.createManagedNodeId(SouthboundMapper.createInstanceIdentifier(
744 connectionInfo, bridge.getBridgeName()));
745 OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
746 createGenericOvsdbTerminationPointAugmentationBuilder();
747 String portName = "testInterfaceOtherConfigs";
748 ovsdbTerminationBuilder.setName(portName);
750 InterfaceOtherConfigsBuilder interfaceBuilder1 = new InterfaceOtherConfigsBuilder();
751 interfaceBuilder1.setOtherConfigKey("interfaceOtherConfigsKey1");
752 interfaceBuilder1.setOtherConfigValue("interfaceOtherConfigsValue1");
753 InterfaceOtherConfigsBuilder interfaceBuilder2 = new InterfaceOtherConfigsBuilder();
754 interfaceBuilder2.setOtherConfigKey("interfaceOtherConfigsKey2");
755 interfaceBuilder2.setOtherConfigValue("interfaceOtherConfigsValue2");
756 List<InterfaceOtherConfigs> interfaceOtherConfigs = Lists.newArrayList(interfaceBuilder1.build(),
757 interfaceBuilder2.build());
758 ovsdbTerminationBuilder.setInterfaceOtherConfigs(interfaceOtherConfigs);
760 Assert.assertTrue(addTerminationPoint(nodeId, portName, ovsdbTerminationBuilder));
762 InstanceIdentifier<Node> terminationPointIid = getTpIid(connectionInfo, bridge);
763 Node terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid);
764 Assert.assertNotNull(terminationPointNode);
766 List<TerminationPoint> terminationPoints = terminationPointNode.getTerminationPoint();
767 for (TerminationPoint terminationPoint : terminationPoints) {
768 OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation =
769 terminationPoint.getAugmentation(OvsdbTerminationPointAugmentation.class);
770 if (ovsdbTerminationPointAugmentation.getName().equals(portName)) {
771 List<InterfaceOtherConfigs> actualInterfaceOtherConfigs = ovsdbTerminationPointAugmentation.
772 getInterfaceOtherConfigs();
773 Assert.assertNotNull(actualInterfaceOtherConfigs);
774 Assert.assertNotNull(interfaceOtherConfigs);
775 Assert.assertTrue(interfaceOtherConfigs.size() == actualInterfaceOtherConfigs.size());
776 for (InterfaceOtherConfigs interfaceOtherConfig : interfaceOtherConfigs) {
777 Assert.assertTrue(actualInterfaceOtherConfigs.contains(interfaceOtherConfig));
781 Assert.assertTrue(deleteBridge(connectionInfo));
785 public void testTerminationPointPortOtherConfigs() throws InterruptedException {
786 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
787 connectOvsdbNode(connectionInfo);
788 Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
789 OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
790 Assert.assertNotNull(bridge);
791 NodeId nodeId = SouthboundMapper.createManagedNodeId(SouthboundMapper.createInstanceIdentifier(
792 connectionInfo, bridge.getBridgeName()));
793 OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
794 createGenericOvsdbTerminationPointAugmentationBuilder();
795 String portName = "testPortOtherConfigs";
796 ovsdbTerminationBuilder.setName(portName);
798 PortOtherConfigsBuilder portBuilder1 = new PortOtherConfigsBuilder();
799 portBuilder1.setOtherConfigKey("portOtherConfigsKey1");
800 portBuilder1.setOtherConfigValue("portOtherConfigsValue1");
801 PortOtherConfigsBuilder portBuilder2 = new PortOtherConfigsBuilder();
802 portBuilder2.setOtherConfigKey("portOtherConfigsKey2");
803 portBuilder2.setOtherConfigValue("portOtherConfigsValue2");
804 List<PortOtherConfigs> portOtherConfigs = Lists.newArrayList(portBuilder1.build(),
805 portBuilder2.build());
806 ovsdbTerminationBuilder.setPortOtherConfigs(portOtherConfigs);
808 Assert.assertTrue(addTerminationPoint(nodeId, portName, ovsdbTerminationBuilder));
809 InstanceIdentifier<Node> terminationPointIid = getTpIid(connectionInfo, bridge);
810 Node terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid);
811 Assert.assertNotNull(terminationPointNode);
813 List<TerminationPoint> terminationPoints = terminationPointNode.getTerminationPoint();
814 for (TerminationPoint terminationPoint : terminationPoints) {
815 OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation =
816 terminationPoint.getAugmentation(OvsdbTerminationPointAugmentation.class);
817 if (ovsdbTerminationPointAugmentation.getName().equals(portName)) {
818 List<PortOtherConfigs> actualPortOtherConfigs = ovsdbTerminationPointAugmentation.
819 getPortOtherConfigs();
820 Assert.assertTrue((portOtherConfigs.size() == actualPortOtherConfigs.size()));
821 for (PortOtherConfigs portOtherConfig : portOtherConfigs) {
822 Assert.assertTrue(actualPortOtherConfigs.contains(portOtherConfig));
826 Assert.assertTrue(deleteBridge(connectionInfo));
830 public void testTerminationPointVlan() throws InterruptedException {
831 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
832 connectOvsdbNode(connectionInfo);
833 Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
834 OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
835 Assert.assertNotNull(bridge);
836 NodeId nodeId = SouthboundMapper.createManagedNodeId(SouthboundMapper.createInstanceIdentifier(
837 connectionInfo, bridge.getBridgeName()));
838 OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
839 createGenericOvsdbTerminationPointAugmentationBuilder();
840 String portName = "testTerminationPointVlanId";
841 ovsdbTerminationBuilder.setName(portName);
843 Integer vlanId = new Integer(4000);
844 ovsdbTerminationBuilder.setVlanTag(new VlanId(vlanId));
846 Assert.assertTrue(addTerminationPoint(nodeId, portName, ovsdbTerminationBuilder));
847 InstanceIdentifier<Node> terminationPointIid = getTpIid(connectionInfo, bridge);
848 Node terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid);
849 Assert.assertNotNull(terminationPointNode);
851 List<TerminationPoint> terminationPoints = terminationPointNode.getTerminationPoint();
852 for (TerminationPoint terminationPoint : terminationPoints) {
853 OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation =
854 terminationPoint.getAugmentation(OvsdbTerminationPointAugmentation.class);
855 if (ovsdbTerminationPointAugmentation.getName().equals(portName)) {
857 VlanId actualVlanId = ovsdbTerminationPointAugmentation.getVlanTag();
858 Assert.assertNotNull(actualVlanId);
859 Integer actualVlanIdInt = actualVlanId.getValue();
860 Assert.assertTrue(actualVlanIdInt.equals(vlanId));
863 Assert.assertTrue(deleteBridge(connectionInfo));
867 public void testTerminationPointVlanModes() throws InterruptedException {
868 VlanMode []vlanModes = VlanMode.values();
869 for (VlanMode vlanMode : vlanModes) {
870 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
871 connectOvsdbNode(connectionInfo);
872 Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
873 OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
874 Assert.assertNotNull(bridge);
875 NodeId nodeId = SouthboundMapper.createManagedNodeId(SouthboundMapper.createInstanceIdentifier(
876 connectionInfo, bridge.getBridgeName()));
877 OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
878 createGenericOvsdbTerminationPointAugmentationBuilder();
879 String portName = "testTerminationPointVlanMode" + vlanMode.toString();
880 ovsdbTerminationBuilder.setName(portName);
882 ovsdbTerminationBuilder.setVlanMode(vlanMode);
883 Assert.assertTrue(addTerminationPoint(nodeId, portName, ovsdbTerminationBuilder));
884 InstanceIdentifier<Node> terminationPointIid = getTpIid(connectionInfo, bridge);
885 Node terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid);
886 Assert.assertNotNull(terminationPointNode);
888 List<TerminationPoint> terminationPoints = terminationPointNode.getTerminationPoint();
889 for (TerminationPoint terminationPoint : terminationPoints) {
890 OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation =
891 terminationPoint.getAugmentation(OvsdbTerminationPointAugmentation.class);
892 if (ovsdbTerminationPointAugmentation.getName().equals(portName)) {
894 Assert.assertTrue(ovsdbTerminationPointAugmentation.getVlanMode().equals(vlanMode));
897 Assert.assertTrue(deleteBridge(connectionInfo));
901 private ArrayList<Set<Integer>> generateVlanSets() {
902 ArrayList<Set<Integer>> vlanSets = new ArrayList<Set<Integer>>();
904 Set<Integer> emptySet = new HashSet<Integer>();
905 vlanSets.add(emptySet);
907 Set<Integer> singleSet = new HashSet<Integer>();
908 Integer single = new Integer(2222);
909 singleSet.add(single);
910 vlanSets.add(singleSet);
912 Set<Integer> minMaxMiddleSet = new HashSet<Integer>();
913 Integer min = new Integer(0);
914 minMaxMiddleSet.add(min);
915 Integer max = new Integer(4095);
916 minMaxMiddleSet.add(max);
917 Integer minPlusOne = new Integer(min + 1);
918 minMaxMiddleSet.add(minPlusOne);
919 Integer maxMinusOne = new Integer(max - 1);
920 minMaxMiddleSet.add(maxMinusOne);
921 Integer middle = new Integer((max - min) / 2);
922 minMaxMiddleSet.add(middle);
923 vlanSets.add(minMaxMiddleSet);
928 private List<Trunks> buildTrunkList(Set<Integer> trunkSet) {
929 List<Trunks> trunkList = Lists.newArrayList();
930 for (Integer trunk : trunkSet) {
931 TrunksBuilder trunkBuilder = new TrunksBuilder();
932 trunkBuilder.setTrunk(new VlanId(trunk));
933 trunkList.add(trunkBuilder.build());
939 public void testTerminationPointVlanTrunks() throws InterruptedException {
940 ArrayList<Set<Integer>> vlanSets = generateVlanSets();
942 for (Set<Integer> vlanSet : vlanSets) {
944 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
945 connectOvsdbNode(connectionInfo);
946 Assert.assertTrue(addBridge(connectionInfo, SouthboundITConstants.BRIDGE_NAME));
947 OvsdbBridgeAugmentation bridge = getBridge(connectionInfo);
948 Assert.assertNotNull(bridge);
949 NodeId nodeId = SouthboundMapper.createManagedNodeId(SouthboundMapper.createInstanceIdentifier(
950 connectionInfo, bridge.getBridgeName()));
951 OvsdbTerminationPointAugmentationBuilder ovsdbTerminationBuilder =
952 createGenericOvsdbTerminationPointAugmentationBuilder();
953 String portName = "testTerminationPointVlanTrunks" + testCase;
954 ovsdbTerminationBuilder.setName(portName);
956 List<Trunks> trunks = buildTrunkList(vlanSet);
957 ovsdbTerminationBuilder.setTrunks(trunks);
958 Assert.assertTrue(addTerminationPoint(nodeId, portName, ovsdbTerminationBuilder));
959 InstanceIdentifier<Node> terminationPointIid = getTpIid(connectionInfo, bridge);
960 Node terminationPointNode = mdsalUtils.read(LogicalDatastoreType.OPERATIONAL, terminationPointIid);
961 Assert.assertNotNull(terminationPointNode);
963 List<TerminationPoint> terminationPoints = terminationPointNode.getTerminationPoint();
964 for (TerminationPoint terminationPoint : terminationPoints) {
965 OvsdbTerminationPointAugmentation ovsdbTerminationPointAugmentation =
966 terminationPoint.getAugmentation(OvsdbTerminationPointAugmentation.class);
967 if (ovsdbTerminationPointAugmentation.getName().equals(portName)) {
968 List<Trunks> actualTrunks = ovsdbTerminationPointAugmentation.getTrunks();
969 for (Trunks trunk : trunks) {
970 Assert.assertTrue(actualTrunks.contains(trunk));
974 Assert.assertTrue(deleteBridge(connectionInfo));
979 * isBundleReady is used to check if the requested bundle is Active
981 public void isBundleReady(BundleContext bundleContext, String bundleName) throws InterruptedException {
982 boolean ready = false;
985 int state = Bundle.UNINSTALLED;
986 Bundle[] bundles = bundleContext.getBundles();
987 for (Bundle element : bundles) {
988 if (element.getSymbolicName().equals(bundleName)) {
989 state = element.getState();
990 LOG.info(">>>>> bundle is ready {}", bundleName);
994 if (state != Bundle.ACTIVE) {
995 LOG.info(">>>>> bundle not ready {}", bundleName);
1004 public void testNetVirt() throws InterruptedException {
1005 LOG.info(">>>>> waiting");
1006 Thread.sleep(10000);
1007 LOG.info(">>>>> back");
1009 ConnectionInfo connectionInfo = getConnectionInfo(addressStr, portStr);
1010 Node ovsdbNode = connectOvsdbNode(connectionInfo);
1011 //Assert.assertFalse(disconnectOvsdbNode(connectionInfo));
1012 Assume.assumeTrue(disconnectOvsdbNode(connectionInfo));