[ONOS-7683] Add unit tests for a set of telemetry config classes

Change-Id: I73ad36e02044371a2fb87540e28ef2257a6dba92
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/GrpcTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/GrpcTelemetryConfig.java
index 56a364e..d7c8f62 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/GrpcTelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/GrpcTelemetryConfig.java
@@ -20,7 +20,7 @@
 /**
  * Configuration API of gRPC for publishing openstack telemetry.
  */
-public interface GrpcTelemetryConfig {
+public interface GrpcTelemetryConfig extends TelemetryConfig {
 
     /**
      * Obtains gRPC server IP address.
@@ -60,7 +60,7 @@
     /**
      * Builder class of GrpcTelemetryConfig.
      */
-    interface Builder {
+    interface Builder extends TelemetryConfig.Builder {
 
         /**
          * Sets gRPC server IP address.
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/InfluxDbTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/InfluxDbTelemetryConfig.java
index f0c34ca..de8a36f 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/InfluxDbTelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/InfluxDbTelemetryConfig.java
@@ -20,7 +20,7 @@
 /**
  * Configuration API of InfluxDB for publishing openstack telemetry.
  */
-public interface InfluxDbTelemetryConfig {
+public interface InfluxDbTelemetryConfig extends TelemetryConfig {
 
     /**
      * Obtains InfluxDB server IP address.
@@ -74,7 +74,7 @@
     /**
      * Builder class of InfluxDbTelemetryConfig.
      */
-    interface Builder {
+    interface Builder extends TelemetryConfig.Builder {
 
         /**
          * Sets InfluxDB server IP address.
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/KafkaTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/KafkaTelemetryConfig.java
index d3731bb..078433f 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/KafkaTelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/KafkaTelemetryConfig.java
@@ -20,7 +20,7 @@
 /**
  * Configuration API of Kafka for publishing openstack telemetry.
  */
-public interface KafkaTelemetryConfig {
+public interface KafkaTelemetryConfig extends TelemetryConfig {
 
     /**
      * Obtains kafka IP address.
@@ -95,7 +95,7 @@
     /**
      * Builder class of KafkaTelemetryConfig.
      */
-    interface Builder {
+    interface Builder extends TelemetryConfig.Builder {
 
         /**
          * Sets kafka IP address.
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/RestTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/RestTelemetryConfig.java
index 50643db2..0e9add5 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/RestTelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/RestTelemetryConfig.java
@@ -20,7 +20,7 @@
 /**
  * Configuration API of REST for publishing openstack telemetry.
  */
-public interface RestTelemetryConfig {
+public interface RestTelemetryConfig extends TelemetryConfig {
 
     /**
      * Obtains REST IP address.
@@ -74,7 +74,7 @@
     /**
      * Builder class for RestTelemetryConfig.
      */
-    interface Builder {
+    interface Builder extends TelemetryConfig.Builder {
 
         /**
          * Sets REST server IP address.
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfig.java
new file mode 100644
index 0000000..1d31c86
--- /dev/null
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfig.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.openstacktelemetry.api.config;
+
+/**
+ * An interface for telemetryconfig.
+ */
+public interface TelemetryConfig {
+
+    Builder createBuilder();
+
+    interface Builder {
+    }
+}
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultGrpcTelemetryConfig.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultGrpcTelemetryConfig.java
index 7b0433e..6cee737 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultGrpcTelemetryConfig.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultGrpcTelemetryConfig.java
@@ -18,6 +18,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import org.onosproject.openstacktelemetry.api.config.GrpcTelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
 
 import java.util.Map;
 import java.util.Objects;
@@ -96,10 +97,15 @@
         return Objects.hash(address, port, usePlaintext, maxInboundMsgSize, configMap);
     }
 
+    @Override
+    public TelemetryConfig.Builder createBuilder() {
+        return new DefaultBuilder();
+    }
+
     /**
      * Builder class of DefaultKafkaTelemetryConfig.
      */
-    public final class DefaultBuilder implements Builder {
+    public static final class DefaultBuilder implements Builder {
 
         private String address;
         private int port;
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultInfluxDbTelemetryConfig.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultInfluxDbTelemetryConfig.java
index a95517b..68b28c1 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultInfluxDbTelemetryConfig.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultInfluxDbTelemetryConfig.java
@@ -18,6 +18,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import org.onosproject.openstacktelemetry.api.config.InfluxDbTelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
 
 import java.util.Map;
 import java.util.Objects;
@@ -113,10 +114,15 @@
         return Objects.hash(address, port, username, password, database, enableBatch, configMap);
     }
 
+    @Override
+    public TelemetryConfig.Builder createBuilder() {
+        return new DefaultBuilder();
+    }
+
     /**
      * Builder class of DefaultInfluxDbTelemetryConfig.
      */
-    public final class DefaultBuilder implements Builder {
+    public static final class DefaultBuilder implements Builder {
 
         private String address;
         private int port;
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultKafkaTelemetryConfig.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultKafkaTelemetryConfig.java
index 9dc460a..efde9f5 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultKafkaTelemetryConfig.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultKafkaTelemetryConfig.java
@@ -18,6 +18,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import org.onosproject.openstacktelemetry.api.config.KafkaTelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
 
 import java.util.Map;
 import java.util.Objects;
@@ -140,10 +141,15 @@
                 lingerMs, memoryBuffer, keySerializer, valueSerializer, configMap);
     }
 
+    @Override
+    public TelemetryConfig.Builder createBuilder() {
+        return new DefaultBuilder();
+    }
+
     /**
      * Builder class of DefaultKafkaTelemetryConfig.
      */
-    public final class DefaultBuilder implements Builder {
+    public static final class DefaultBuilder implements Builder {
         private String address;
         private int port;
         private int retries;
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfig.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfig.java
index b11b14e..29e9a2a 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfig.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfig.java
@@ -18,6 +18,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import org.onosproject.openstacktelemetry.api.config.RestTelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
 
 import java.util.Map;
 import java.util.Objects;
@@ -114,10 +115,15 @@
                 responseMediaType, configMap);
     }
 
+    @Override
+    public TelemetryConfig.Builder createBuilder() {
+        return new DefaultBuilder();
+    }
+
     /**
      * Builder class of DefaultRestTelemetryConfig.
      */
-    public final class DefaultBuilder implements Builder {
+    public static final class DefaultBuilder implements Builder {
 
         private String address;
         private int port;
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/TestDefaultGrpcTelemetryConfig.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/TestDefaultGrpcTelemetryConfig.java
new file mode 100644
index 0000000..ba66f36
--- /dev/null
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/TestDefaultGrpcTelemetryConfig.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.openstacktelemetry.config;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.testing.EqualsTester;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.openstacktelemetry.api.config.GrpcTelemetryConfig;
+
+import java.util.Map;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+/**
+ * Unit tests for DefaultGrpcTelemetryConfig class.
+ */
+public final class TestDefaultGrpcTelemetryConfig {
+
+    private static final String IP_ADDRESS_1 = "10.10.10.1";
+    private static final String IP_ADDRESS_2 = "20.20.20.1";
+
+    private static final int PORT_1 = 80;
+    private static final int PORT_2 = 8080;
+
+    private static final int MSG_SIZE_1 = 1000;
+    private static final int MSG_SIZE_2 = 2000;
+
+    private static final boolean USE_PLAIN_TEXT_1 = true;
+    private static final boolean USE_PLAIN_TEXT_2 = true;
+
+    private static final Map<String, Object> CONFIG_MAP_1 =
+                                    ImmutableMap.of("key1", "value1");
+    private static final Map<String, Object> CONFIG_MAP_2 =
+                                    ImmutableMap.of("key2", "value2");
+
+    private GrpcTelemetryConfig config1;
+    private GrpcTelemetryConfig sameAsConfig1;
+    private GrpcTelemetryConfig config2;
+
+    @Before
+    public void setup() {
+
+        GrpcTelemetryConfig.Builder builder1 =
+                new DefaultGrpcTelemetryConfig.DefaultBuilder();
+        GrpcTelemetryConfig.Builder builder2 =
+                new DefaultGrpcTelemetryConfig.DefaultBuilder();
+        GrpcTelemetryConfig.Builder builder3 =
+                new DefaultGrpcTelemetryConfig.DefaultBuilder();
+
+        config1 = builder1
+                .withAddress(IP_ADDRESS_1)
+                .withPort(PORT_1)
+                .withMaxInboundMsgSize(MSG_SIZE_1)
+                .withUsePlaintext(USE_PLAIN_TEXT_1)
+                .withConfigMap(CONFIG_MAP_1)
+                .build();
+
+        sameAsConfig1 = builder2
+                .withAddress(IP_ADDRESS_1)
+                .withPort(PORT_1)
+                .withMaxInboundMsgSize(MSG_SIZE_1)
+                .withUsePlaintext(USE_PLAIN_TEXT_1)
+                .withConfigMap(CONFIG_MAP_1)
+                .build();
+
+        config2 = builder3
+                .withAddress(IP_ADDRESS_2)
+                .withPort(PORT_2)
+                .withMaxInboundMsgSize(MSG_SIZE_2)
+                .withUsePlaintext(USE_PLAIN_TEXT_2)
+                .withConfigMap(CONFIG_MAP_2)
+                .build();
+    }
+
+    @Test
+    public void testEquality() {
+        new EqualsTester()
+                .addEqualityGroup(config1, sameAsConfig1)
+                .addEqualityGroup(config2).testEquals();
+    }
+
+    @Test
+    public void testConstruction() {
+        GrpcTelemetryConfig config = config1;
+
+        assertThat(config.address(), is(IP_ADDRESS_1));
+        assertThat(config.port(), is(PORT_1));
+        assertThat(config.maxInboundMsgSize(), is(MSG_SIZE_1));
+        assertThat(config.usePlaintext(), is(USE_PLAIN_TEXT_1));
+        assertThat(config.configMap(), is(CONFIG_MAP_1));
+    }
+}
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/TestDefaultInfluxDbTelemetryConfig.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/TestDefaultInfluxDbTelemetryConfig.java
new file mode 100644
index 0000000..62c1a13
--- /dev/null
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/TestDefaultInfluxDbTelemetryConfig.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.openstacktelemetry.config;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.testing.EqualsTester;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.openstacktelemetry.api.config.InfluxDbTelemetryConfig;
+
+import java.util.Map;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+/**
+ * Unit tests for DefaultInfluxDbTelemetryConfig class.
+ */
+public final class TestDefaultInfluxDbTelemetryConfig {
+
+    private static final String IP_ADDRESS_1 = "10.10.10.1";
+    private static final String IP_ADDRESS_2 = "20.20.20.1";
+
+    private static final int PORT_1 = 80;
+    private static final int PORT_2 = 8080;
+
+    private static final String DATABASE_1 = "database1";
+    private static final String DATABASE_2 = "database2";
+
+    private static final String USERNAME_1 = "username1";
+    private static final String USERNAME_2 = "username2";
+
+    private static final String PASSWORD_1 = "password1";
+    private static final String PASSWORD_2 = "password2";
+
+    private static final boolean ENABLE_BATCH_1 = true;
+    private static final boolean ENABLE_BATCH_2 = false;
+
+    private static final Map<String, Object> CONFIG_MAP_1 =
+            ImmutableMap.of("key1", "value1");
+    private static final Map<String, Object> CONFIG_MAP_2 =
+            ImmutableMap.of("key2", "value2");
+
+    private InfluxDbTelemetryConfig config1;
+    private InfluxDbTelemetryConfig sameAsConfig1;
+    private InfluxDbTelemetryConfig config2;
+
+    @Before
+    public void setup() {
+
+        InfluxDbTelemetryConfig.Builder builder1 =
+                new DefaultInfluxDbTelemetryConfig.DefaultBuilder();
+        InfluxDbTelemetryConfig.Builder builder2 =
+                new DefaultInfluxDbTelemetryConfig.DefaultBuilder();
+        InfluxDbTelemetryConfig.Builder builder3 =
+                new DefaultInfluxDbTelemetryConfig.DefaultBuilder();
+
+        config1 = builder1
+                .withAddress(IP_ADDRESS_1)
+                .withPort(PORT_1)
+                .withDatabase(DATABASE_1)
+                .withUsername(USERNAME_1)
+                .withPassword(PASSWORD_1)
+                .withEnableBatch(ENABLE_BATCH_1)
+                .withConfigMap(CONFIG_MAP_1)
+                .build();
+
+        sameAsConfig1 = builder2
+                .withAddress(IP_ADDRESS_1)
+                .withPort(PORT_1)
+                .withDatabase(DATABASE_1)
+                .withUsername(USERNAME_1)
+                .withPassword(PASSWORD_1)
+                .withEnableBatch(ENABLE_BATCH_1)
+                .withConfigMap(CONFIG_MAP_1)
+                .build();
+
+        config2 = builder3
+                .withAddress(IP_ADDRESS_2)
+                .withPort(PORT_2)
+                .withDatabase(DATABASE_2)
+                .withUsername(USERNAME_2)
+                .withPassword(PASSWORD_2)
+                .withEnableBatch(ENABLE_BATCH_2)
+                .withConfigMap(CONFIG_MAP_2)
+                .build();
+    }
+
+    @Test
+    public void testEquality() {
+        new EqualsTester()
+                .addEqualityGroup(config1, sameAsConfig1)
+                .addEqualityGroup(config2).testEquals();
+    }
+
+    @Test
+    public void testConstruction() {
+        InfluxDbTelemetryConfig config = config1;
+
+        assertThat(config.address(), is(IP_ADDRESS_1));
+        assertThat(config.port(), is(PORT_1));
+        assertThat(config.database(), is(DATABASE_1));
+        assertThat(config.username(), is(USERNAME_1));
+        assertThat(config.password(), is(PASSWORD_1));
+        assertThat(config.enableBatch(), is(ENABLE_BATCH_1));
+        assertThat(config.configMap(), is(CONFIG_MAP_1));
+    }
+}
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/TestDefaultKafkaTelemetryConfig.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/TestDefaultKafkaTelemetryConfig.java
new file mode 100644
index 0000000..6faa0ab
--- /dev/null
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/TestDefaultKafkaTelemetryConfig.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.openstacktelemetry.config;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.testing.EqualsTester;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.openstacktelemetry.api.config.KafkaTelemetryConfig;
+
+import java.util.Map;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+public final class TestDefaultKafkaTelemetryConfig {
+
+    private static final String IP_ADDRESS_1 = "10.10.10.1";
+    private static final String IP_ADDRESS_2 = "20.20.20.1";
+
+    private static final int PORT_1 = 80;
+    private static final int PORT_2 = 8080;
+
+    private static final int RETRIES_1 = 1;
+    private static final int RETRIES_2 = 2;
+
+    private static final int BATCH_SIZE_1 = 100;
+    private static final int BATCH_SIZE_2 = 200;
+
+    private static final int MEMORY_BUFFER_1 = 1000;
+    private static final int MEMORY_BUFFER_2 = 2000;
+
+    private static final String REQUIRED_ACKS_1 = "all";
+    private static final String REQUIRED_ACKS_2 = "none";
+
+    private static final int LINGER_MS_1 = 1;
+    private static final int LINGER_MS_2 = 2;
+
+    private static final String KEY_SERIALIZER_1 = "keyserializer1";
+    private static final String KEY_SERIALIZER_2 = "keyserializer2";
+    private static final String VALUE_SERIALIZER_1 = "valueserializer1";
+    private static final String VALUE_SERIALIZER_2 = "valueserializer2";
+
+    private static final Map<String, Object> CONFIG_MAP_1 =
+            ImmutableMap.of("key1", "value1");
+    private static final Map<String, Object> CONFIG_MAP_2 =
+            ImmutableMap.of("key2", "value2");
+
+    private KafkaTelemetryConfig config1;
+    private KafkaTelemetryConfig sameAsConfig1;
+    private KafkaTelemetryConfig config2;
+
+    @Before
+    public void setup() {
+
+        KafkaTelemetryConfig.Builder builder1 =
+                new DefaultKafkaTelemetryConfig.DefaultBuilder();
+        KafkaTelemetryConfig.Builder builder2 =
+                new DefaultKafkaTelemetryConfig.DefaultBuilder();
+        KafkaTelemetryConfig.Builder builder3 =
+                new DefaultKafkaTelemetryConfig.DefaultBuilder();
+
+        config1 = builder1
+                .withAddress(IP_ADDRESS_1)
+                .withPort(PORT_1)
+                .withRetries(RETRIES_1)
+                .withBatchSize(BATCH_SIZE_1)
+                .withMemoryBuffer(MEMORY_BUFFER_1)
+                .withRequiredAcks(REQUIRED_ACKS_1)
+                .withLingerMs(LINGER_MS_1)
+                .withKeySerializer(KEY_SERIALIZER_1)
+                .withValueSerializer(VALUE_SERIALIZER_1)
+                .withConfigMap(CONFIG_MAP_1)
+                .build();
+
+        sameAsConfig1 = builder2
+                .withAddress(IP_ADDRESS_1)
+                .withPort(PORT_1)
+                .withRetries(RETRIES_1)
+                .withBatchSize(BATCH_SIZE_1)
+                .withMemoryBuffer(MEMORY_BUFFER_1)
+                .withRequiredAcks(REQUIRED_ACKS_1)
+                .withLingerMs(LINGER_MS_1)
+                .withKeySerializer(KEY_SERIALIZER_1)
+                .withValueSerializer(VALUE_SERIALIZER_1)
+                .withConfigMap(CONFIG_MAP_1)
+                .build();
+
+        config2 = builder3
+                .withAddress(IP_ADDRESS_2)
+                .withPort(PORT_2)
+                .withRetries(RETRIES_2)
+                .withBatchSize(BATCH_SIZE_2)
+                .withMemoryBuffer(MEMORY_BUFFER_2)
+                .withRequiredAcks(REQUIRED_ACKS_2)
+                .withLingerMs(LINGER_MS_2)
+                .withKeySerializer(KEY_SERIALIZER_2)
+                .withValueSerializer(VALUE_SERIALIZER_2)
+                .withConfigMap(CONFIG_MAP_2)
+                .build();
+    }
+
+    @Test
+    public void testEquality() {
+        new EqualsTester()
+                .addEqualityGroup(config1, sameAsConfig1)
+                .addEqualityGroup(config2).testEquals();
+    }
+
+    @Test
+    public void testConstruction() {
+        KafkaTelemetryConfig config = config1;
+
+        assertThat(config.address(), is(IP_ADDRESS_1));
+        assertThat(config.port(), is(PORT_1));
+        assertThat(config.retries(), is(RETRIES_1));
+        assertThat(config.batchSize(), is(BATCH_SIZE_1));
+        assertThat(config.memoryBuffer(), is(MEMORY_BUFFER_1));
+        assertThat(config.requiredAcks(), is(REQUIRED_ACKS_1));
+        assertThat(config.lingerMs(), is(LINGER_MS_1));
+        assertThat(config.keySerializer(), is(KEY_SERIALIZER_1));
+        assertThat(config.valueSerializer(), is(VALUE_SERIALIZER_1));
+        assertThat(config.configMap(), is(CONFIG_MAP_1));
+    }
+}
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/TestDefaultRestTelemetryConfig.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/TestDefaultRestTelemetryConfig.java
new file mode 100644
index 0000000..b4b18f6
--- /dev/null
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/TestDefaultRestTelemetryConfig.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * 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.openstacktelemetry.config;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.testing.EqualsTester;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.openstacktelemetry.api.config.RestTelemetryConfig;
+
+import java.util.Map;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+public final class TestDefaultRestTelemetryConfig {
+
+    private static final String IP_ADDRESS_1 = "10.10.10.1";
+    private static final String IP_ADDRESS_2 = "20.20.20.1";
+
+    private static final int PORT_1 = 80;
+    private static final int PORT_2 = 8080;
+
+    private static final String ENDPOINT_1 = "telemetry";
+    private static final String ENDPOINT_2 = "configuration";
+
+    private static final String METHOD_1 = "POST";
+    private static final String METHOD_2 = "GET";
+
+    private static final String REQUEST_MEDIA_TYPE_1 = "JSON";
+    private static final String REQUEST_MEDIA_TYPE_2 = "XML";
+
+    private static final String RESPONSE_MEDIA_TYPE_1 = "JSON";
+    private static final String RESPONSE_MEDIA_TYPE_2 = "XML";
+
+    private static final Map<String, Object> CONFIG_MAP_1 =
+            ImmutableMap.of("key1", "value1");
+    private static final Map<String, Object> CONFIG_MAP_2 =
+            ImmutableMap.of("key2", "value2");
+
+    private RestTelemetryConfig config1;
+    private RestTelemetryConfig sameAsConfig1;
+    private RestTelemetryConfig config2;
+
+    @Before
+    public void setup() {
+
+        RestTelemetryConfig.Builder builder1 =
+                new DefaultRestTelemetryConfig.DefaultBuilder();
+        RestTelemetryConfig.Builder builder2 =
+                new DefaultRestTelemetryConfig.DefaultBuilder();
+        RestTelemetryConfig.Builder builder3 =
+                new DefaultRestTelemetryConfig.DefaultBuilder();
+
+        config1 = builder1
+                .withAddress(IP_ADDRESS_1)
+                .withPort(PORT_1)
+                .withEndpoint(ENDPOINT_1)
+                .withMethod(METHOD_1)
+                .withRequestMediaType(REQUEST_MEDIA_TYPE_1)
+                .withResponseMediaType(RESPONSE_MEDIA_TYPE_1)
+                .withConfigMap(CONFIG_MAP_1)
+                .build();
+
+        sameAsConfig1 = builder2
+                .withAddress(IP_ADDRESS_1)
+                .withPort(PORT_1)
+                .withEndpoint(ENDPOINT_1)
+                .withMethod(METHOD_1)
+                .withRequestMediaType(REQUEST_MEDIA_TYPE_1)
+                .withResponseMediaType(RESPONSE_MEDIA_TYPE_1)
+                .withConfigMap(CONFIG_MAP_1)
+                .build();
+
+        config2 = builder3
+                .withAddress(IP_ADDRESS_2)
+                .withPort(PORT_2)
+                .withEndpoint(ENDPOINT_2)
+                .withMethod(METHOD_2)
+                .withRequestMediaType(REQUEST_MEDIA_TYPE_2)
+                .withResponseMediaType(RESPONSE_MEDIA_TYPE_2)
+                .withConfigMap(CONFIG_MAP_2)
+                .build();
+    }
+
+    @Test
+    public void testEquality() {
+        new EqualsTester()
+                .addEqualityGroup(config1, sameAsConfig1)
+                .addEqualityGroup(config2).testEquals();
+    }
+
+    @Test
+    public void testConstruction() {
+        RestTelemetryConfig config = config1;
+
+        assertThat(config.address(), is(IP_ADDRESS_1));
+        assertThat(config.port(), is(PORT_1));
+        assertThat(config.endpoint(), is(ENDPOINT_1));
+        assertThat(config.method(), is(METHOD_1));
+        assertThat(config.requestMediaType(), is(REQUEST_MEDIA_TYPE_1));
+        assertThat(config.responseMediaType(), is(RESPONSE_MEDIA_TYPE_1));
+        assertThat(config.configMap(), is(CONFIG_MAP_1));
+    }
+}