[SDFAB-705] Fix GUI for the control and data plane resiliency
Additionally, fix similar issues in GUI2 and add initial
support for ports with name in GUI/GUI2.
This is also the first step towards supporting port with name widely in ONOS
Change-Id: Ib04f780bf0b7171e82a6beb69b39c0aaeb4be957
diff --git a/core/api/src/main/java/org/onosproject/net/ConnectPoint.java b/core/api/src/main/java/org/onosproject/net/ConnectPoint.java
index 7a311aa..ac04a05 100644
--- a/core/api/src/main/java/org/onosproject/net/ConnectPoint.java
+++ b/core/api/src/main/java/org/onosproject/net/ConnectPoint.java
@@ -178,14 +178,25 @@
* - scheme:ip:port/path/cp
*
* The assumption is the last `/` will separate the device ID
- * from the connection point number.
+ * from the connection point number. If the cp is a named port
+ * `/` can be included in the port name. We use `[` as heuristic
+ * to separate the device ID from the port number.
*/
checkNotNull(string);
int idx = string.lastIndexOf("/");
checkArgument(idx != -1, NO_SEP_SPECIFIED);
- String id = string.substring(0, idx);
- String cp = string.substring(idx + 1);
+ String id = "";
+ String cp = "";
+ // deviceId/[ which means the id is 2 chars behind
+ int nameIdx = string.lastIndexOf("[");
+ if (nameIdx > 0) {
+ id = string.substring(0, nameIdx - 1);
+ cp = string.substring(nameIdx);
+ } else if (nameIdx < 0) {
+ id = string.substring(0, idx);
+ cp = string.substring(idx + 1);
+ }
checkArgument(!cp.isEmpty(), SEP_NO_VALUE);
return new ConnectPoint(DeviceId.deviceId(id), PortNumber.fromString(cp));
diff --git a/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java b/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java
index 85c51f6..ae9d445 100644
--- a/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java
+++ b/core/api/src/main/java/org/onosproject/ui/topo/NodeSelection.java
@@ -36,7 +36,7 @@
import java.util.Set;
import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.onosproject.net.ConnectPoint.deviceConnectPoint;
+import static org.onosproject.net.ConnectPoint.fromString;
import static org.onosproject.net.DeviceId.deviceId;
import static org.onosproject.net.HostId.hostId;
@@ -301,8 +301,8 @@
continue;
}
- cpSrc = deviceConnectPoint(connectPoints[0]);
- cpDst = deviceConnectPoint(connectPoints[1]);
+ cpSrc = fromString(connectPoints[0]);
+ cpDst = fromString(connectPoints[1]);
link = linkService.getLink(cpSrc, cpDst);
if (link != null) {
diff --git a/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java b/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java
index 73dfe79..0a7516d 100644
--- a/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java
+++ b/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java
@@ -71,14 +71,47 @@
}
@Test
- public void testParseFromString() {
+ public void testParseFromStringOF() {
+ String cp = "of:0011223344556677/1";
+
+ ConnectPoint connectPoint = ConnectPoint.fromString(cp);
+ assertEquals("of:0011223344556677", connectPoint.deviceId().toString());
+ assertEquals("1", connectPoint.port().toString());
+
+ expectStringParseException("[");
+ expectStringParseException("1/[");
+ expectStringParseException("1/[aasksk");
+ expectStringParseException("1/[alksas]");
+ }
+
+ @Test
+ public void testParseFromStringNetconf() {
String cp = "netconf:127.0.0.1/[TYPE](1)";
ConnectPoint connectPoint = ConnectPoint.fromString(cp);
assertEquals("netconf:127.0.0.1", connectPoint.deviceId().toString());
assertEquals("[TYPE](1)", connectPoint.port().toString());
assertEquals(connectPoint, ConnectPoint.fromString(connectPoint.toString()));
+ }
+ @Test
+ public void testParseFromStringBmv2() {
+ String cp = "device:leaf1/[leaf1-eth4](1)";
+
+ ConnectPoint connectPoint = ConnectPoint.fromString(cp);
+ assertEquals("device:leaf1", connectPoint.deviceId().toString());
+ assertEquals("[leaf1-eth4](1)", connectPoint.port().toString());
+ assertEquals(connectPoint, ConnectPoint.fromString(connectPoint.toString()));
+ }
+
+ @Test
+ public void testParseFromStringStratum() {
+ String cp = "device:leaf1/[3/0](1)";
+
+ ConnectPoint connectPoint = ConnectPoint.fromString(cp);
+ assertEquals("device:leaf1", connectPoint.deviceId().toString());
+ assertEquals("[3/0](1)", connectPoint.port().toString());
+ assertEquals(connectPoint, ConnectPoint.fromString(connectPoint.toString()));
}
/**
@@ -95,6 +128,20 @@
}
}
+ /**
+ * Parse a string connect point and expect an exception to be thrown.
+ *
+ * @param string string to parse
+ */
+ private static void expectStringParseException(String string) {
+ try {
+ ConnectPoint.fromString(string);
+ fail(String.format("Expected exception was not thrown for '%s'", string));
+ } catch (Exception e) {
+ assertTrue(true);
+ }
+ }
+
@Test
public void testParseHostConnectPoint() {
String cp = "16:3A:BD:6E:31:E4/-1/1";