Add a set of unit tests for openstack telemetry app

Change-Id: Ib5963c61ef0c0302a90a4f30d3dd1f0ec2862aea
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultFlowInfo.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultFlowInfo.java
index a631abc..6033483 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultFlowInfo.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultFlowInfo.java
@@ -205,6 +205,15 @@
     }
 
     /**
+     * Obtains a default flow info builder object.
+     *
+     * @return flow info builder object
+     */
+    public static Builder builder() {
+        return new DefaultBuilder();
+    }
+
+    /**
      * Builder class of DefaultFlowInfo.
      */
     public static final class DefaultBuilder implements FlowInfo.Builder {
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultInfluxRecord.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultInfluxRecord.java
index 8c45a60..d7ec2e1 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultInfluxRecord.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultInfluxRecord.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.openstacktelemetry.impl;
 
+import com.google.common.base.Strings;
 import org.onosproject.openstacktelemetry.api.InfluxRecord;
 
 import java.util.Objects;
@@ -22,14 +23,19 @@
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static org.onosproject.openstacktelemetry.api.Constants.DEFAULT_INFLUXDB_MEASUREMENT;
 
-
+/**
+ * A default implementation of influx record.
+ *
+ * @param <K> key of influx record
+ * @param <V> value of influx record
+ */
 public final class DefaultInfluxRecord<K, V> implements InfluxRecord<K, V> {
     public static final String MEASUREMENT_NAME = DEFAULT_INFLUXDB_MEASUREMENT;
     private final K measurement;
     private final V flowInfos;
 
     protected DefaultInfluxRecord(K measurement, V flowInfos) {
-        if ((measurement == null) || (measurement.equals(""))) {
+        if (Strings.isNullOrEmpty((String) measurement)) {
             this.measurement = (K) MEASUREMENT_NAME;
         } else {
             this.measurement = measurement;
@@ -66,6 +72,7 @@
         return Objects.hash(measurement, flowInfos);
     }
 
+    @Override
     public String toString() {
         return toStringHelper(this)
                 .add("measurement", measurement)
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultStatsFlowRule.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultStatsFlowRule.java
index 83c7519..2b2d7b6 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultStatsFlowRule.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultStatsFlowRule.java
@@ -20,6 +20,8 @@
 import org.onlab.packet.TpPort;
 import org.onosproject.openstacktelemetry.api.StatsFlowRule;
 
+import java.util.Objects;
+
 import static com.google.common.base.Preconditions.checkArgument;
 
 public final class DefaultStatsFlowRule implements StatsFlowRule {
@@ -79,10 +81,43 @@
                 .toString();
     }
 
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+
+        if (obj instanceof DefaultStatsFlowRule) {
+            final DefaultStatsFlowRule other = (DefaultStatsFlowRule) obj;
+            return Objects.equals(this.srcIpPrefix, other.srcIpPrefix) &&
+                    Objects.equals(this.dstIpPrefix, other.dstIpPrefix) &&
+                    Objects.equals(this.srcTpPort, other.srcTpPort) &&
+                    Objects.equals(this.dstTpPort, other.dstTpPort) &&
+                    Objects.equals(this.ipProtocol, other.ipProtocol);
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(srcIpPrefix, dstIpPrefix, srcTpPort, dstTpPort, ipProtocol);
+    }
+
+    /**
+     * Obtains a default stats flow rule builder object.
+     *
+     * @return flow rule builder object
+     */
     public static Builder builder() {
         return new Builder();
     }
 
+    /**
+     * Obtains the builder object existing flow rule.
+     *
+     * @param flowRule flow rule
+     * @return builder object
+     */
     public static Builder from(StatsFlowRule flowRule) {
         return new Builder()
                 .srcIpPrefix(flowRule.srcIpPrefix())
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/GrpcTelemetryManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/GrpcTelemetryManager.java
index 8812cca..0ea76dc 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/GrpcTelemetryManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/GrpcTelemetryManager.java
@@ -16,6 +16,7 @@
 package org.onosproject.openstacktelemetry.impl;
 
 import io.grpc.ManagedChannel;
+import io.grpc.ManagedChannelBuilder;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -24,6 +25,7 @@
 import org.apache.felix.scr.annotations.Service;
 import org.onosproject.openstacktelemetry.api.GrpcTelemetryAdminService;
 import org.onosproject.openstacktelemetry.api.OpenstackTelemetryService;
+import org.onosproject.openstacktelemetry.api.config.GrpcTelemetryConfig;
 import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -66,24 +68,22 @@
             return;
         }
 
-        // FIXME do not activate grpc service for now due to deps conflict
-//        GrpcTelemetryConfig grpcConfig = (GrpcTelemetryConfig) config;
-//        channel = ManagedChannelBuilder
-//                .forAddress(grpcConfig.address(), grpcConfig.port())
-//                .maxInboundMessageSize(grpcConfig.maxInboundMsgSize())
-//                .usePlaintext(grpcConfig.usePlaintext())
-//                .build();
+        GrpcTelemetryConfig grpcConfig = (GrpcTelemetryConfig) config;
+        channel = ManagedChannelBuilder
+                .forAddress(grpcConfig.address(), grpcConfig.port())
+                .maxInboundMessageSize(grpcConfig.maxInboundMsgSize())
+                .usePlaintext(grpcConfig.usePlaintext())
+                .build();
 
         log.info("gRPC producer has Started");
     }
 
     @Override
     public void stop() {
-        // FIXME do not activate grpc service for now due to deps conflict
-//        if (channel != null) {
-//            channel.shutdown();
-//            channel = null;
-//        }
+        if (channel != null) {
+            channel.shutdown();
+            channel = null;
+        }
 
         log.info("gRPC producer has Stopped");
     }
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OpenstackTelemetryManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OpenstackTelemetryManager.java
index e19a579..7d8a233 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OpenstackTelemetryManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/OpenstackTelemetryManager.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.openstacktelemetry.impl;
 
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -94,6 +95,11 @@
         });
     }
 
+    @Override
+    public Set<TelemetryService> telemetryServices() {
+        return ImmutableSet.copyOf(telemetryServices);
+    }
+
     private void invokeGrpcPublisher(GrpcTelemetryService service, Set<FlowInfo> flowInfos) {
         // TODO: need provide implementation
     }