Unit tests to improve API test coverage

Change-Id: I2193b1b29968f2d2b7ba3ddb5947a38343c193c8
diff --git a/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java b/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java
index ca57944..300d915 100644
--- a/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/device/DefaultPortDescription.java
@@ -69,7 +69,7 @@
     }
 
     // Default constructor for serialization
-    private DefaultPortDescription() {
+    protected DefaultPortDescription() {
         this.number = null;
         this.isEnabled = false;
         this.portSpeed = DEFAULT_SPEED;
diff --git a/core/api/src/test/java/org/onosproject/net/DefaultDisjointPathTest.java b/core/api/src/test/java/org/onosproject/net/DefaultDisjointPathTest.java
new file mode 100644
index 0000000..4dd7f11
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/net/DefaultDisjointPathTest.java
@@ -0,0 +1,107 @@
+package org.onosproject.net;
+
+import java.util.List;
+
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.testing.EqualsTester;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.onosproject.net.NetTestTools.PID;
+
+/**
+ * Unit tests for the DefaultDisjointPathTest.
+ */
+public class DefaultDisjointPathTest {
+    private static DefaultLink link1 =
+            DefaultLink.builder()
+                    .type(Link.Type.DIRECT)
+                    .providerId(PID)
+                    .src(NetTestTools.connectPoint("dev1", 1))
+                    .dst(NetTestTools.connectPoint("dev2", 1)).build();
+
+    private static DefaultLink link2 =
+            DefaultLink.builder()
+                    .type(Link.Type.DIRECT)
+                    .providerId(PID)
+                    .src(NetTestTools.connectPoint("dev1", 1))
+                    .dst(NetTestTools.connectPoint("dev2", 1)).build();
+
+    private static DefaultLink link3 =
+            DefaultLink.builder()
+                    .type(Link.Type.DIRECT)
+                    .providerId(PID)
+                    .src(NetTestTools.connectPoint("dev2", 1))
+                    .dst(NetTestTools.connectPoint("dev3", 1)).build();
+
+    private static List<Link> links1 = ImmutableList.of(link1, link2);
+    private static DefaultPath path1 =
+            new DefaultPath(PID, links1, 1.0);
+
+    private static List<Link> links2 = ImmutableList.of(link2, link1);
+    private static DefaultPath path2 =
+            new DefaultPath(PID, links2, 2.0);
+
+    private static List<Link> links3 = ImmutableList.of(link1, link2, link3);
+    private static DefaultPath path3 =
+            new DefaultPath(PID, links3, 3.0);
+
+    private static DefaultDisjointPath disjointPath1 =
+            new DefaultDisjointPath(PID, path1, path2);
+    private static DefaultDisjointPath sameAsDisjointPath1 =
+            new DefaultDisjointPath(PID, path1, path2);
+    private static DefaultDisjointPath disjointPath2 =
+            new DefaultDisjointPath(PID, path2, path1);
+    private static DefaultDisjointPath disjointPath3 =
+            new DefaultDisjointPath(PID, path1, path3);
+    private static DefaultDisjointPath disjointPath4 =
+            new DefaultDisjointPath(PID, path1, null);
+
+
+    /**
+     * Tests construction and fetching of member data.
+     */
+    @Test
+    public void testConstruction() {
+        assertThat(disjointPath1.primary(), is(path1));
+        assertThat(disjointPath1.backup(), is(path2));
+        assertThat(disjointPath1.links(), is(links1));
+        assertThat(disjointPath1.cost(), is(1.0));
+    }
+
+    /**
+     * Tests switching to the backup path.
+     */
+    @Test
+    public void testUseBackup() {
+        disjointPath1.useBackup();
+        assertThat(disjointPath1.primary(), is(path1));
+        assertThat(disjointPath1.backup(), is(path2));
+        assertThat(disjointPath1.links(), is(links2));
+        assertThat(disjointPath1.cost(), is(2.0));
+
+        disjointPath1.useBackup();
+        assertThat(disjointPath1.links(), is(links1));
+        assertThat(disjointPath1.cost(), is(1.0));
+
+        assertThat(disjointPath4.primary(), is(path1));
+        assertThat(disjointPath4.backup(), is((DefaultDisjointPath) null));
+        disjointPath4.useBackup();
+        assertThat(disjointPath4.primary(), is(path1));
+        assertThat(disjointPath4.backup(), is((DefaultDisjointPath) null));
+    }
+
+    /**
+     * Tests equals(), hashCode(), and toString() methods.
+     */
+    @Test
+    public void testEquals() {
+        new EqualsTester()
+                .addEqualityGroup(disjointPath1, sameAsDisjointPath1, disjointPath2)
+                .addEqualityGroup(disjointPath3)
+                .addEqualityGroup(disjointPath4)
+                .testEquals();
+    }
+}
diff --git a/core/api/src/test/java/org/onosproject/net/config/basics/BasicLinkConfigTest.java b/core/api/src/test/java/org/onosproject/net/config/basics/BasicLinkConfigTest.java
new file mode 100644
index 0000000..563a6b9
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/net/config/basics/BasicLinkConfigTest.java
@@ -0,0 +1,55 @@
+package org.onosproject.net.config.basics;
+
+import java.time.Duration;
+
+import org.junit.Test;
+import org.onosproject.net.Link;
+import org.onosproject.net.LinkKey;
+import org.onosproject.net.NetTestTools;
+import org.onosproject.net.config.ConfigApplyDelegate;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+
+import static java.lang.Boolean.FALSE;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+/**
+ * Unit tests for the BasicLinkConfig class.
+ */
+
+public class BasicLinkConfigTest {
+    private static final long BANDWIDTH = 11;
+    private static final double METRIC = 3.0;
+    private static final Duration LATENCY =  Duration.ofNanos(5555);
+
+    /**
+     * Tests construction, setters and getters of a BasicLinkConfig object.
+     */
+    @Test
+    public void testConstruction() {
+        BasicLinkConfig config = new BasicLinkConfig();
+        ConfigApplyDelegate delegate = configApply -> { };
+        ObjectMapper mapper = new ObjectMapper();
+        LinkKey linkKey = LinkKey.linkKey(
+                NetTestTools.connectPoint("device1", 1),
+                NetTestTools.connectPoint("device2", 2));
+
+        config.init(linkKey, "KEY", JsonNodeFactory.instance.objectNode(), mapper, delegate);
+
+
+        config.bandwidth(BANDWIDTH)
+              .isDurable(FALSE)
+              .metric(METRIC)
+              .type(Link.Type.DIRECT)
+              .latency(LATENCY);
+
+        assertThat(config.bandwidth(), is(BANDWIDTH));
+        assertThat(config.isDurable(), is(FALSE));
+        assertThat(config.metric(), is(METRIC));
+        assertThat(config.type(), is(Link.Type.DIRECT));
+        assertThat(config.latency(), is(LATENCY));
+        assertThat(config.isValid(), is(true));
+    }
+}
diff --git a/core/api/src/test/java/org/onosproject/net/device/DefaultPortDescriptionTest.java b/core/api/src/test/java/org/onosproject/net/device/DefaultPortDescriptionTest.java
new file mode 100644
index 0000000..2069d6b
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/net/device/DefaultPortDescriptionTest.java
@@ -0,0 +1,63 @@
+package org.onosproject.net.device;
+
+import org.junit.Test;
+import org.onosproject.net.PortNumber;
+
+import com.google.common.testing.EqualsTester;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutableBaseClass;
+import static org.onosproject.net.Port.Type.COPPER;
+
+/**
+ * Unit tests for the DefaultPortDescription test.
+ */
+public class DefaultPortDescriptionTest {
+
+    private static PortNumber port1 = PortNumber.portNumber(1);
+    private static long portSpeed1 = 111L;
+    private static DefaultPortDescription portDescription1 =
+            new DefaultPortDescription(port1, true, COPPER, portSpeed1);
+
+    private static DefaultPortDescription sameAsPortDescription1 =
+            new DefaultPortDescription(portDescription1,
+                                       portDescription1.annotations());
+
+    private static PortNumber port2 = PortNumber.portNumber(2);
+    private static DefaultPortDescription portDescription2 =
+            new DefaultPortDescription(port2, true);
+
+    private static DefaultPortDescription portDescription3 =
+            new DefaultPortDescription();
+    /**
+     * Tests the immutability of {@link DefaultPortDescription}.
+     */
+    @Test
+    public void testImmutable() {
+        assertThatClassIsImmutableBaseClass(DefaultPortDescription.class);
+    }
+
+    /**
+     * Tests object construction and fetching of member data.
+     */
+    @Test
+    public void testConstruction() {
+        assertThat(portDescription1.portNumber(), is(port1));
+        assertThat(portDescription1.isEnabled(), is(true));
+        assertThat(portDescription1.portSpeed(), is(portSpeed1));
+        assertThat(portDescription1.type(), is(COPPER));
+    }
+
+    /**
+     * Tests equals(), hashCode(), and toString() methods.
+     */
+    @Test
+    public void testEquals() {
+        new EqualsTester()
+                .addEqualityGroup(portDescription1, sameAsPortDescription1)
+                .addEqualityGroup(portDescription2)
+                .addEqualityGroup(portDescription3)
+                .testEquals();
+    }
+}