Initial stc tests for distributed primitives
Change-Id: I82a2911df9a4852cb851732e220d498f9332e005
diff --git a/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/LeaderElectorTestCommand.java b/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/LeaderElectorTestCommand.java
new file mode 100644
index 0000000..b7464c2
--- /dev/null
+++ b/apps/test/distributed-primitives/src/main/java/org/onosproject/distributedprimitives/cli/LeaderElectorTestCommand.java
@@ -0,0 +1,64 @@
+package org.onosproject.distributedprimitives.cli;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.cluster.ClusterService;
+import org.onosproject.cluster.Leadership;
+import org.onosproject.cluster.NodeId;
+import org.onosproject.store.service.LeaderElector;
+import org.onosproject.store.service.StorageService;
+
+import com.google.common.base.Joiner;
+
+@Command(scope = "onos", name = "leader-test",
+description = "LeaderElector test cli fixture")
+public class LeaderElectorTestCommand extends AbstractShellCommand {
+ @Argument(index = 0, name = "name",
+ description = "leader elector name",
+ required = true, multiValued = false)
+ String name = null;
+
+ @Argument(index = 1, name = "operation",
+ description = "operation",
+ required = true, multiValued = false)
+ String operation = null;
+
+
+ @Argument(index = 2, name = "topic",
+ description = "topic name",
+ required = false, multiValued = false)
+ String topic = null;
+
+ LeaderElector leaderElector;
+
+ @Override
+ protected void execute() {
+ StorageService storageService = get(StorageService.class);
+ ClusterService clusterService = get(ClusterService.class);
+ NodeId localNodeId = clusterService.getLocalNode().id();
+ leaderElector = storageService.leaderElectorBuilder()
+ .withName(name)
+ .build()
+ .asLeaderElector();
+ if (operation.equals("run")) {
+ print(leaderElector.run(topic, localNodeId));
+ } else if (operation.equals("withdraw")) {
+ leaderElector.withdraw(topic);
+ } else if (operation.equals("show")) {
+ print(leaderElector.getLeadership(topic));
+ }
+ }
+
+ private void print(Leadership leadership) {
+ if (leadership.leader() != null) {
+ print("leader=%s#term=%d#candidates=%s",
+ leadership.leaderNodeId(),
+ leadership.leader().term(),
+ leadership.candidates().isEmpty() ? "none" : Joiner.on(",").join(leadership.candidates()));
+ } else {
+ print("leader=none#candidates=%s",
+ leadership.candidates().isEmpty() ? "none" : Joiner.on(",").join(leadership.candidates()));
+ }
+ }
+}