LeadershipStore updates:
 - Now tracking leader and candidates for a topic using a single map.
 - Using term numbers that are incremented by one every time a new leader is elected.
 - Introduced a separate LeadershipStore to conform to the  manager-store pattern

Change-Id: I1d03a6c5e8ff0e68ef0c1e3a6c2d425c4856e470
diff --git a/core/api/src/test/java/org/onosproject/cluster/LeadershipEventTest.java b/core/api/src/test/java/org/onosproject/cluster/LeadershipEventTest.java
index be0321b..792d295 100644
--- a/core/api/src/test/java/org/onosproject/cluster/LeadershipEventTest.java
+++ b/core/api/src/test/java/org/onosproject/cluster/LeadershipEventTest.java
@@ -15,6 +15,8 @@
  */
 package org.onosproject.cluster;
 
+import java.util.Arrays;
+
 import org.junit.Test;
 
 import com.google.common.testing.EqualsTester;
@@ -28,10 +30,11 @@
 public class LeadershipEventTest {
     private final NodeId node1 = new NodeId("1");
     private final NodeId node2 = new NodeId("2");
-    private final Leadership lead1 = new Leadership("topic1", node1, 1L, 2L);
-    private final Leadership lead2 = new Leadership("topic1", node2, 1L, 2L);
+    private final Leadership lead1 = new Leadership("topic1", new Leader(node1, 1L, 2L), Arrays.asList(node1));
+    private final Leadership lead2 = new Leadership("topic1", new Leader(node1, 1L, 2L), Arrays.asList(node1, node2));
+    private final Leadership lead3 = new Leadership("topic1", new Leader(node2, 1L, 2L), Arrays.asList(node2));
     private final LeadershipEvent event1 =
-            new LeadershipEvent(LeadershipEvent.Type.LEADER_ELECTED, lead1);
+            new LeadershipEvent(LeadershipEvent.Type.LEADER_CHANGED, lead1);
     private final long time = System.currentTimeMillis();
     private final LeadershipEvent event2 =
             new LeadershipEvent(LeadershipEvent.Type.CANDIDATES_CHANGED,
@@ -40,11 +43,9 @@
             new LeadershipEvent(LeadershipEvent.Type.CANDIDATES_CHANGED,
                     lead2, time);
     private final LeadershipEvent event3 =
-            new LeadershipEvent(LeadershipEvent.Type.LEADER_BOOTED, lead1);
+            new LeadershipEvent(LeadershipEvent.Type.LEADER_CHANGED, lead2);
     private final LeadershipEvent event4 =
-            new LeadershipEvent(LeadershipEvent.Type.LEADER_REELECTED, lead1);
-    private final LeadershipEvent event5 =
-            new LeadershipEvent(LeadershipEvent.Type.LEADER_REELECTED, lead2);
+            new LeadershipEvent(LeadershipEvent.Type.LEADER_AND_CANDIDATES_CHANGED, lead3);
 
     /**
      * Tests for proper operation of equals(), hashCode() and toString() methods.
@@ -56,7 +57,6 @@
                 .addEqualityGroup(event2, sameAsEvent2)
                 .addEqualityGroup(event3)
                 .addEqualityGroup(event4)
-                .addEqualityGroup(event5)
                 .testEquals();
     }
 
@@ -65,7 +65,7 @@
      */
     @Test
     public void checkConstruction() {
-        assertThat(event1.type(), is(LeadershipEvent.Type.LEADER_ELECTED));
+        assertThat(event1.type(), is(LeadershipEvent.Type.LEADER_CHANGED));
         assertThat(event1.subject(), is(lead1));
 
         assertThat(event2.time(), is(time));
diff --git a/core/api/src/test/java/org/onosproject/cluster/LeadershipServiceAdapter.java b/core/api/src/test/java/org/onosproject/cluster/LeadershipServiceAdapter.java
index e1d421d..72595e4 100644
--- a/core/api/src/test/java/org/onosproject/cluster/LeadershipServiceAdapter.java
+++ b/core/api/src/test/java/org/onosproject/cluster/LeadershipServiceAdapter.java
@@ -18,7 +18,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.CompletableFuture;
 
 /**
  * Test adapter for leadership service.
@@ -41,13 +40,12 @@
     }
 
     @Override
-    public CompletableFuture<Leadership> runForLeadership(String path) {
+    public Leadership runForLeadership(String path) {
         return null;
     }
 
     @Override
-    public CompletableFuture<Void> withdraw(String path) {
-        return null;
+    public void withdraw(String path) {
     }
 
     @Override
@@ -74,14 +72,4 @@
     public List<NodeId> getCandidates(String path) {
         return null;
     }
-
-    @Override
-    public boolean stepdown(String path) {
-        return false;
-    }
-
-    @Override
-    public boolean makeTopCandidate(String path, NodeId nodeId) {
-        return false;
-    }
 }
\ No newline at end of file
diff --git a/core/api/src/test/java/org/onosproject/cluster/LeadershipTest.java b/core/api/src/test/java/org/onosproject/cluster/LeadershipTest.java
index e2a8658..defc671 100644
--- a/core/api/src/test/java/org/onosproject/cluster/LeadershipTest.java
+++ b/core/api/src/test/java/org/onosproject/cluster/LeadershipTest.java
@@ -15,12 +15,13 @@
  */
 package org.onosproject.cluster;
 
+import java.util.Arrays;
+
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.testing.EqualsTester;
 
-import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
@@ -31,16 +32,14 @@
 public class LeadershipTest {
     private final NodeId node1 = new NodeId("1");
     private final NodeId node2 = new NodeId("2");
-    private final Leadership lead1 = new Leadership("topic1", node1, 1L, 2L);
-    private final Leadership sameAsLead1 = new Leadership("topic1", node1, 1L, 2L);
-    private final Leadership lead2 = new Leadership("topic2", node1, 1L, 2L);
-    private final Leadership lead3 = new Leadership("topic1", node1, 2L, 2L);
-    private final Leadership lead4 = new Leadership("topic1", node1, 3L, 2L);
-    private final Leadership lead5 = new Leadership("topic1", node1, 3L, 3L);
-    private final Leadership lead6 = new Leadership("topic1", node1,
-            ImmutableList.of(node2), 1L, 2L);
-    private final Leadership lead7 = new Leadership("topic1",
-            ImmutableList.of(node2), 1L, 2L);
+    private final Leadership lead1 = new Leadership("topic1", new Leader(node1, 1L, 2L), Arrays.asList(node1));
+    private final Leadership sameAsLead1 = new Leadership("topic1", new Leader(node1, 1L, 2L), Arrays.asList(node1));
+    private final Leadership lead2 = new Leadership("topic2", new Leader(node1, 1L, 2L), Arrays.asList(node1));
+    private final Leadership lead3 = new Leadership("topic1", new Leader(node1, 2L, 2L), Arrays.asList(node1));
+    private final Leadership lead4 = new Leadership("topic1", new Leader(node1, 3L, 2L), Arrays.asList(node1));
+    private final Leadership lead5 = new Leadership("topic1", new Leader(node1, 3L, 3L), Arrays.asList(node1));
+    private final Leadership lead6 = new Leadership("topic1", new Leader(node2, 1L, 2L), Arrays.asList(node2, node1));
+    private final Leadership lead7 = new Leadership("topic1", null, ImmutableList.of());
 
     /**
      * Tests for proper operation of equals(), hashCode() and toString() methods.
@@ -64,12 +63,10 @@
      */
     @Test
     public void checkConstruction() {
-        assertThat(lead6.electedTime(), is(2L));
-        assertThat(lead6.epoch(), is(1L));
-        assertThat(lead6.leader(), is(node1));
+        assertThat(lead6.leader(), is(new Leader(node2, 1L, 2L)));
         assertThat(lead6.topic(), is("topic1"));
-        assertThat(lead6.candidates(), hasSize(1));
-        assertThat(lead6.candidates(), contains(node2));
+        assertThat(lead6.candidates(), hasSize(2));
+        assertThat(lead6.candidates().get(1), is(node1));
+        assertThat(lead6.candidates().get(0), is(node2));
     }
-
 }