Finished unit tests for trivial link manager.
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkManager.java b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkManager.java
index 63fb2cc..6e7c567 100644
--- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkManager.java
+++ b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkManager.java
@@ -93,7 +93,7 @@
}
@Override
- public Set<Link> getDeviceInressLinks(DeviceId deviceId) {
+ public Set<Link> getDeviceIngressLinks(DeviceId deviceId) {
checkNotNull(deviceId, DEVICE_ID_NULL);
return store.getDeviceIngressLinks(deviceId);
}
@@ -112,17 +112,16 @@
}
@Override
- public Set<Link> getInressLinks(ConnectPoint connectPoint) {
+ public Set<Link> getIngressLinks(ConnectPoint connectPoint) {
checkNotNull(connectPoint, CONNECT_POINT_NULL);
return store.getIngressLinks(connectPoint);
}
@Override
- public Set<Link> getLinks(ConnectPoint src, ConnectPoint dst) {
+ public Link getLink(ConnectPoint src, ConnectPoint dst) {
checkNotNull(src, CONNECT_POINT_NULL);
checkNotNull(dst, CONNECT_POINT_NULL);
- return Sets.intersection(store.getEgressLinks(src),
- store.getIngressLinks(dst));
+ return store.getLink(src, dst);
}
@Override
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkStore.java b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkStore.java
index c1d6273..d10c3a4 100644
--- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkStore.java
+++ b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleLinkStore.java
@@ -18,6 +18,12 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import static org.onlab.onos.net.Link.Type.DIRECT;
+import static org.onlab.onos.net.Link.Type.INDIRECT;
+import static org.onlab.onos.net.link.LinkEvent.Type.LINK_ADDED;
+import static org.onlab.onos.net.link.LinkEvent.Type.LINK_REMOVED;
+import static org.onlab.onos.net.link.LinkEvent.Type.LINK_UPDATED;
+
/**
* Manages inventory of infrastructure links using trivial in-memory link
* implementation.
@@ -72,6 +78,17 @@
}
/**
+ * Returns the link between the two end-points.
+ *
+ * @param src source connection point
+ * @param dst destination connection point
+ * @return link or null if one not found between the end-points
+ */
+ Link getLink(ConnectPoint src, ConnectPoint dst) {
+ return links.get(new LinkKey(src, dst));
+ }
+
+ /**
* Returns all links egressing from the specified connection point.
*
* @param src source connection point
@@ -96,14 +113,13 @@
Set<Link> getIngressLinks(ConnectPoint dst) {
Set<Link> ingress = new HashSet<>();
for (Link link : dstLinks.get(dst.deviceId())) {
- if (link.src().equals(dst)) {
+ if (link.dst().equals(dst)) {
ingress.add(link);
}
}
return ingress;
}
-
/**
* Creates a new link, or updates an existing one, based on the given
* information.
@@ -119,7 +135,7 @@
if (link == null) {
return createLink(providerId, key, linkDescription);
}
- return updateLink(link, linkDescription);
+ return updateLink(providerId, link, key, linkDescription);
}
// Creates and stores the link and returns the appropriate event.
@@ -132,11 +148,26 @@
srcLinks.put(link.src().deviceId(), link);
dstLinks.put(link.dst().deviceId(), link);
}
- return new LinkEvent(LinkEvent.Type.LINK_ADDED, link);
+ return new LinkEvent(LINK_ADDED, link);
}
// Updates, if necessary the specified link and returns the appropriate event.
- private LinkEvent updateLink(DefaultLink link, LinkDescription linkDescription) {
+ private LinkEvent updateLink(ProviderId providerId, DefaultLink link,
+ LinkKey key, LinkDescription linkDescription) {
+ if (link.type() == INDIRECT && linkDescription.type() == DIRECT) {
+ synchronized (this) {
+ srcLinks.remove(link.src().deviceId(), link);
+ dstLinks.remove(link.dst().deviceId(), link);
+
+ DefaultLink updated =
+ new DefaultLink(providerId, link.src(), link.dst(),
+ linkDescription.type());
+ links.put(key, updated);
+ srcLinks.put(link.src().deviceId(), updated);
+ dstLinks.put(link.dst().deviceId(), updated);
+ return new LinkEvent(LINK_UPDATED, updated);
+ }
+ }
return null;
}
@@ -150,9 +181,12 @@
LinkEvent removeLink(ConnectPoint src, ConnectPoint dst) {
synchronized (this) {
Link link = links.remove(new LinkKey(src, dst));
- srcLinks.remove(link.src().deviceId(), link);
- dstLinks.remove(link.dst().deviceId(), link);
- return link == null ? null : new LinkEvent(LinkEvent.Type.LINK_REMOVED, link);
+ if (link != null) {
+ srcLinks.remove(link.src().deviceId(), link);
+ dstLinks.remove(link.dst().deviceId(), link);
+ return new LinkEvent(LINK_REMOVED, link);
+ }
+ return null;
}
}