diff --git a/core/api/src/test/java/org/onosproject/net/link/DefaultLinkDescriptionTest.java b/core/api/src/test/java/org/onosproject/net/link/DefaultLinkDescriptionTest.java
index 90b0459..6ade7f92 100644
--- a/core/api/src/test/java/org/onosproject/net/link/DefaultLinkDescriptionTest.java
+++ b/core/api/src/test/java/org/onosproject/net/link/DefaultLinkDescriptionTest.java
@@ -16,10 +16,15 @@
 package org.onosproject.net.link;
 
 import org.junit.Test;
+import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.Link;
+import org.onosproject.net.NetTestTools;
 import org.onosproject.net.PortNumber;
 
+import com.google.common.testing.EqualsTester;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.onosproject.net.DefaultLinkTest.cp;
@@ -44,7 +49,48 @@
         assertEquals("incorrect src", cp(DID1, P1), desc.src());
         assertEquals("incorrect dst", cp(DID2, P1), desc.dst());
         assertEquals("incorrect type", DIRECT, desc.type());
-        assertTrue("incorrect annotatios", desc.toString().contains("Key=Value"));
+        assertTrue("incorrect annotations", desc.toString().contains("Key=Value"));
     }
 
+    /**
+     * Tests the equals(), hashCode() and toString() methods.
+     */
+    @Test
+    public void testEquals() {
+        ConnectPoint connectPoint1 = NetTestTools.connectPoint("sw1", 1);
+        ConnectPoint connectPoint2 = NetTestTools.connectPoint("sw2", 2);
+        ConnectPoint connectPoint3 = NetTestTools.connectPoint("sw3", 3);
+
+        DefaultLinkDescription link1 =
+                new DefaultLinkDescription(connectPoint1, connectPoint2,
+                                           Link.Type.DIRECT);
+        DefaultLinkDescription sameAsLink1 =
+                new DefaultLinkDescription(connectPoint1, connectPoint2,
+                                           Link.Type.DIRECT);
+        DefaultLinkDescription link2 =
+                new DefaultLinkDescription(connectPoint1, connectPoint2,
+                                           Link.Type.INDIRECT);
+        DefaultLinkDescription link3 =
+                new DefaultLinkDescription(connectPoint1, connectPoint3,
+                                           Link.Type.DIRECT);
+        DefaultLinkDescription link4 =
+                new DefaultLinkDescription(connectPoint2, connectPoint3,
+                                           Link.Type.DIRECT);
+        DefaultLinkDescription link5 =
+                new DefaultLinkDescription(connectPoint1, connectPoint2,
+                                           Link.Type.DIRECT, false);
+        DefaultLinkDescription link6 =
+                new DefaultLinkDescription(connectPoint2, connectPoint3,
+                                           Link.Type.DIRECT, DA);
+
+        new EqualsTester()
+                .addEqualityGroup(link1, sameAsLink1)
+                .addEqualityGroup(link2)
+                .addEqualityGroup(link3)
+                .addEqualityGroup(link4)
+                .addEqualityGroup(link5)
+                .addEqualityGroup(link6)
+                .testEquals();
+
+    }
 }
diff --git a/core/api/src/test/java/org/onosproject/net/link/LinkProviderRegistryAdapter.java b/core/api/src/test/java/org/onosproject/net/link/LinkProviderRegistryAdapter.java
new file mode 100644
index 0000000..00cb58b
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/net/link/LinkProviderRegistryAdapter.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.net.link;
+
+import java.util.Set;
+
+import org.onosproject.net.provider.ProviderId;
+
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * Testing adapter for the LinkProviderRegistry API.
+ */
+public class LinkProviderRegistryAdapter implements LinkProviderRegistry {
+
+    LinkProviderServiceAdapter providerService = null;
+
+    @Override
+    public LinkProviderService register(LinkProvider provider) {
+        providerService = new LinkProviderServiceAdapter(provider);
+        return providerService;
+    }
+
+    @Override
+    public void unregister(LinkProvider provider) {
+    }
+
+    @Override
+    public Set<ProviderId> getProviders() {
+        return ImmutableSet.of(providerService.provider().id());
+    }
+
+    public LinkProviderServiceAdapter registeredProvider() {
+        return providerService;
+    }
+}
diff --git a/core/api/src/test/java/org/onosproject/net/link/LinkProviderServiceAdapter.java b/core/api/src/test/java/org/onosproject/net/link/LinkProviderServiceAdapter.java
new file mode 100644
index 0000000..7e37fae
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/net/link/LinkProviderServiceAdapter.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.net.link;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.LinkKey;
+import org.onosproject.net.provider.AbstractProviderService;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+public class LinkProviderServiceAdapter
+        extends AbstractProviderService<LinkProvider>
+        implements LinkProviderService {
+
+    List<DeviceId> vanishedDpid = Lists.newLinkedList();
+    List<Long> vanishedPort = Lists.newLinkedList();
+    Map<DeviceId, DeviceId> discoveredLinks = Maps.newHashMap();
+    Map<LinkKey, LinkDescription> discoveredLinkDescriptions = new HashMap<>();
+
+    protected LinkProviderServiceAdapter(LinkProvider provider) {
+        super(provider);
+    }
+
+    @Override
+    public void linkDetected(LinkDescription linkDescription) {
+        LinkKey key = LinkKey.linkKey(linkDescription.src(), linkDescription.dst());
+        discoveredLinkDescriptions.put(key, linkDescription);
+        DeviceId sDid = linkDescription.src().deviceId();
+        DeviceId dDid = linkDescription.dst().deviceId();
+        discoveredLinks.put(sDid, dDid);
+    }
+
+    @Override
+    public void linkVanished(LinkDescription linkDescription) {
+        LinkKey key = LinkKey.linkKey(linkDescription.src(), linkDescription.dst());
+        discoveredLinkDescriptions.remove(key);
+    }
+
+    @Override
+    public void linksVanished(ConnectPoint connectPoint) {
+        vanishedPort.add(connectPoint.port().toLong());
+
+    }
+
+    @Override
+    public void linksVanished(DeviceId deviceId) {
+        vanishedDpid.add(deviceId);
+    }
+
+    public List<DeviceId> vanishedDpid() {
+        return vanishedDpid;
+    }
+
+    public List<Long> vanishedPort() {
+        return vanishedPort;
+    }
+
+    public Map<DeviceId, DeviceId> discoveredLinks() {
+        return discoveredLinks;
+    }
+
+    public Map<LinkKey, LinkDescription> discoveredLinkDescriptions() {
+        return discoveredLinkDescriptions;
+    }
+}
