Refactor: move telemetry config from componentCfg to configs.xml

1. Support to export the metrics to multiple targets
2. Add a set of properties to kafka config (key, topic, etc.)
3. Add distributedStore to manage telemetry configs
4. Add CLI to query stored telemetry configs
5. Add a set of telemetry loaders to import xml definitions
6. Add unit tests for telemetry cfg, xml cfg loader and dist store
7. Add missing javadoc for a set of implementation classes

Change-Id: I39480c9a6ac07357184d2e1094b9c9f4d36fd8b1
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultGrpcTelemetryConfigTest.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultGrpcTelemetryConfigTest.java
index 1a7f752..c56247f 100644
--- a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultGrpcTelemetryConfigTest.java
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultGrpcTelemetryConfigTest.java
@@ -15,17 +15,27 @@
  */
 package org.onosproject.openstacktelemetry.config;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
 import com.google.common.testing.EqualsTester;
 import org.junit.Before;
 import org.junit.Test;
 import org.onosproject.openstacktelemetry.api.config.GrpcTelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
+import org.onosproject.openstacktelemetry.impl.DefaultTelemetryConfig;
 
 import java.util.Map;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.GRPC;
+import static org.onosproject.openstacktelemetry.config.DefaultGrpcTelemetryConfig.ADDRESS;
+import static org.onosproject.openstacktelemetry.config.DefaultGrpcTelemetryConfig.MAX_INBOUND_MSG_SIZE;
+import static org.onosproject.openstacktelemetry.config.DefaultGrpcTelemetryConfig.PORT;
+import static org.onosproject.openstacktelemetry.config.DefaultGrpcTelemetryConfig.USE_PLAINTEXT;
+import static org.onosproject.openstacktelemetry.config.DefaultGrpcTelemetryConfig.fromTelemetryConfig;
 
 /**
  * Unit tests for DefaultGrpcTelemetryConfig class.
@@ -45,9 +55,11 @@
     private static final boolean USE_PLAIN_TEXT_2 = true;
 
     private static final Map<String, Object> CONFIG_MAP_1 =
-                                    ImmutableMap.of("key1", "value1");
+            ImmutableMap.of("key1", "value1");
     private static final Map<String, Object> CONFIG_MAP_2 =
-                                    ImmutableMap.of("key2", "value2");
+            ImmutableMap.of("key2", "value2");
+
+    private static final String DUMMY = "dummy";
 
     private GrpcTelemetryConfig config1;
     private GrpcTelemetryConfig sameAsConfig1;
@@ -122,4 +134,24 @@
         assertThat(config.usePlaintext(), is(USE_PLAIN_TEXT_1));
         assertThat(config.configMap(), is(CONFIG_MAP_1));
     }
-}
+
+    /**
+     * Tests props extraction.
+     */
+    @Test
+    public void testPropsExtraction() {
+        Map<String, String> props = Maps.newConcurrentMap();
+        props.put(ADDRESS, IP_ADDRESS_1);
+        props.put(PORT, String.valueOf(PORT_1));
+        props.put(MAX_INBOUND_MSG_SIZE, String.valueOf(MSG_SIZE_1));
+        props.put(USE_PLAINTEXT, String.valueOf(USE_PLAIN_TEXT_1));
+        TelemetryConfig config = new DefaultTelemetryConfig(DUMMY, GRPC,
+                ImmutableList.of(), DUMMY, DUMMY, false, props);
+
+        GrpcTelemetryConfig grpcConfig = fromTelemetryConfig(config);
+        assertThat(grpcConfig.address(), is(IP_ADDRESS_1));
+        assertThat(grpcConfig.port(), is(PORT_1));
+        assertThat(grpcConfig.maxInboundMsgSize(), is(MSG_SIZE_1));
+        assertThat(grpcConfig.usePlaintext(), is(USE_PLAIN_TEXT_1));
+    }
+}
\ No newline at end of file
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultInfluxDbTelemetryConfigTest.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultInfluxDbTelemetryConfigTest.java
index 2357fec..cd4a973 100644
--- a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultInfluxDbTelemetryConfigTest.java
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultInfluxDbTelemetryConfigTest.java
@@ -15,17 +15,30 @@
  */
 package org.onosproject.openstacktelemetry.config;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
 import com.google.common.testing.EqualsTester;
 import org.junit.Before;
 import org.junit.Test;
 import org.onosproject.openstacktelemetry.api.config.InfluxDbTelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
+import org.onosproject.openstacktelemetry.impl.DefaultTelemetryConfig;
 
 import java.util.Map;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.INFLUXDB;
+import static org.onosproject.openstacktelemetry.config.DefaultInfluxDbTelemetryConfig.ADDRESS;
+import static org.onosproject.openstacktelemetry.config.DefaultInfluxDbTelemetryConfig.DATABASE;
+import static org.onosproject.openstacktelemetry.config.DefaultInfluxDbTelemetryConfig.ENABLE_BATCH;
+import static org.onosproject.openstacktelemetry.config.DefaultInfluxDbTelemetryConfig.MEASUREMENT;
+import static org.onosproject.openstacktelemetry.config.DefaultInfluxDbTelemetryConfig.PASSWORD;
+import static org.onosproject.openstacktelemetry.config.DefaultInfluxDbTelemetryConfig.PORT;
+import static org.onosproject.openstacktelemetry.config.DefaultInfluxDbTelemetryConfig.USERNAME;
+import static org.onosproject.openstacktelemetry.config.DefaultInfluxDbTelemetryConfig.fromTelemetryConfig;
 
 /**
  * Unit tests for DefaultInfluxDbTelemetryConfig class.
@@ -58,6 +71,8 @@
     private static final Map<String, Object> CONFIG_MAP_2 =
             ImmutableMap.of("key2", "value2");
 
+    private static final String DUMMY = "dummy";
+
     private InfluxDbTelemetryConfig config1;
     private InfluxDbTelemetryConfig sameAsConfig1;
     private InfluxDbTelemetryConfig config2;
@@ -143,4 +158,31 @@
         assertThat(config.enableBatch(), is(ENABLE_BATCH_1));
         assertThat(config.configMap(), is(CONFIG_MAP_1));
     }
-}
+
+    /**
+     * Tests props extraction.
+     */
+    @Test
+    public void testPropsExtraction() {
+        Map<String, String> props = Maps.newConcurrentMap();
+        props.put(ADDRESS, IP_ADDRESS_1);
+        props.put(PORT, String.valueOf(PORT_1));
+        props.put(USERNAME, USERNAME_1);
+        props.put(PASSWORD, PASSWORD_1);
+        props.put(DATABASE, DATABASE_1);
+        props.put(ENABLE_BATCH, String.valueOf(ENABLE_BATCH_1));
+        props.put(MEASUREMENT, MEASUREMENT_1);
+
+        TelemetryConfig config = new DefaultTelemetryConfig(DUMMY, INFLUXDB,
+                ImmutableList.of(), DUMMY, DUMMY, false, props);
+
+        InfluxDbTelemetryConfig influxDbConfig = fromTelemetryConfig(config);
+        assertThat(influxDbConfig.address(), is(IP_ADDRESS_1));
+        assertThat(influxDbConfig.port(), is(PORT_1));
+        assertThat(influxDbConfig.database(), is(DATABASE_1));
+        assertThat(influxDbConfig.measurement(), is(MEASUREMENT_1));
+        assertThat(influxDbConfig.username(), is(USERNAME_1));
+        assertThat(influxDbConfig.password(), is(PASSWORD_1));
+        assertThat(influxDbConfig.enableBatch(), is(ENABLE_BATCH_1));
+    }
+}
\ No newline at end of file
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultKafkaTelemetryConfigTest.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultKafkaTelemetryConfigTest.java
index d3958fe..ba9b34b 100644
--- a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultKafkaTelemetryConfigTest.java
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultKafkaTelemetryConfigTest.java
@@ -15,17 +15,35 @@
  */
 package org.onosproject.openstacktelemetry.config;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
 import com.google.common.testing.EqualsTester;
 import org.junit.Before;
 import org.junit.Test;
 import org.onosproject.openstacktelemetry.api.config.KafkaTelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
+import org.onosproject.openstacktelemetry.impl.DefaultTelemetryConfig;
 
 import java.util.Map;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.KAFKA;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.ADDRESS;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.BATCH_SIZE;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.CODEC;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.KEY;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.KEY_SERIALIZER;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.LINGER_MS;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.MEMORY_BUFFER;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.PORT;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.REQUIRED_ACKS;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.RETRIES;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.TOPIC;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.VALUE_SERIALIZER;
+import static org.onosproject.openstacktelemetry.config.DefaultKafkaTelemetryConfig.fromTelemetryConfig;
 
 public final class DefaultKafkaTelemetryConfigTest {
 
@@ -55,11 +73,22 @@
     private static final String VALUE_SERIALIZER_1 = "valueserializer1";
     private static final String VALUE_SERIALIZER_2 = "valueserializer2";
 
+    private static final String KEY_1 = "key1";
+    private static final String KEY_2 = "key2";
+
+    private static final String TOPIC_1 = "topic1";
+    private static final String TOPIC_2 = "topic2";
+
+    private static final String CODEC_1 = "codec1";
+    private static final String CODEC_2 = "codec2";
+
     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 static final String DUMMY = "dummy";
+
     private KafkaTelemetryConfig config1;
     private KafkaTelemetryConfig sameAsConfig1;
     private KafkaTelemetryConfig config2;
@@ -87,6 +116,9 @@
                 .withLingerMs(LINGER_MS_1)
                 .withKeySerializer(KEY_SERIALIZER_1)
                 .withValueSerializer(VALUE_SERIALIZER_1)
+                .withKey(KEY_1)
+                .withTopic(TOPIC_1)
+                .withCodec(CODEC_1)
                 .withConfigMap(CONFIG_MAP_1)
                 .build();
 
@@ -100,6 +132,9 @@
                 .withLingerMs(LINGER_MS_1)
                 .withKeySerializer(KEY_SERIALIZER_1)
                 .withValueSerializer(VALUE_SERIALIZER_1)
+                .withKey(KEY_1)
+                .withTopic(TOPIC_1)
+                .withCodec(CODEC_1)
                 .withConfigMap(CONFIG_MAP_1)
                 .build();
 
@@ -113,6 +148,9 @@
                 .withLingerMs(LINGER_MS_2)
                 .withKeySerializer(KEY_SERIALIZER_2)
                 .withValueSerializer(VALUE_SERIALIZER_2)
+                .withKey(KEY_2)
+                .withTopic(TOPIC_2)
+                .withCodec(CODEC_2)
                 .withConfigMap(CONFIG_MAP_2)
                 .build();
     }
@@ -151,6 +189,46 @@
         assertThat(config.lingerMs(), is(LINGER_MS_1));
         assertThat(config.keySerializer(), is(KEY_SERIALIZER_1));
         assertThat(config.valueSerializer(), is(VALUE_SERIALIZER_1));
+        assertThat(config.key(), is(KEY_1));
+        assertThat(config.topic(), is(TOPIC_1));
+        assertThat(config.codec(), is(CODEC_1));
         assertThat(config.configMap(), is(CONFIG_MAP_1));
     }
-}
+
+    /**
+     * Tests props extraction.
+     */
+    @Test
+    public void testPropsExtraction() {
+        Map<String, String> props = Maps.newConcurrentMap();
+        props.put(ADDRESS, IP_ADDRESS_1);
+        props.put(PORT, String.valueOf(PORT_1));
+        props.put(RETRIES, String.valueOf(RETRIES_1));
+        props.put(BATCH_SIZE, String.valueOf(BATCH_SIZE_1));
+        props.put(MEMORY_BUFFER, String.valueOf(MEMORY_BUFFER_1));
+        props.put(REQUIRED_ACKS, REQUIRED_ACKS_1);
+        props.put(LINGER_MS, String.valueOf(LINGER_MS_1));
+        props.put(KEY_SERIALIZER, KEY_SERIALIZER_1);
+        props.put(VALUE_SERIALIZER, VALUE_SERIALIZER_1);
+        props.put(KEY, KEY_1);
+        props.put(TOPIC, TOPIC_1);
+        props.put(CODEC, CODEC_1);
+
+        TelemetryConfig config = new DefaultTelemetryConfig(DUMMY, KAFKA,
+                ImmutableList.of(), DUMMY, DUMMY, false, props);
+
+        KafkaTelemetryConfig kafkaConfig = fromTelemetryConfig(config);
+        assertThat(kafkaConfig.address(), is(IP_ADDRESS_1));
+        assertThat(kafkaConfig.port(), is(PORT_1));
+        assertThat(kafkaConfig.retries(), is(RETRIES_1));
+        assertThat(kafkaConfig.batchSize(), is(BATCH_SIZE_1));
+        assertThat(kafkaConfig.memoryBuffer(), is(MEMORY_BUFFER_1));
+        assertThat(kafkaConfig.requiredAcks(), is(REQUIRED_ACKS_1));
+        assertThat(kafkaConfig.lingerMs(), is(LINGER_MS_1));
+        assertThat(kafkaConfig.keySerializer(), is(KEY_SERIALIZER_1));
+        assertThat(kafkaConfig.valueSerializer(), is(VALUE_SERIALIZER_1));
+        assertThat(kafkaConfig.key(), is(KEY_1));
+        assertThat(kafkaConfig.topic(), is(TOPIC_1));
+        assertThat(kafkaConfig.codec(), is(CODEC_1));
+    }
+}
\ No newline at end of file
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfigTest.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfigTest.java
index 7012ee8..de94f83 100644
--- a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfigTest.java
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultPrometheusTelemetryConfigTest.java
@@ -15,36 +15,43 @@
  */
 package org.onosproject.openstacktelemetry.config;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
 import com.google.common.testing.EqualsTester;
 import org.junit.Before;
 import org.junit.Test;
 import org.onosproject.openstacktelemetry.api.config.PrometheusTelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
+import org.onosproject.openstacktelemetry.impl.DefaultTelemetryConfig;
 
 import java.util.Map;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
-import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_PROMETHEUS_EXPORTER_PORT_DEFAULT;
-import static org.onosproject.openstacktelemetry.impl.OsgiPropertyConstants.PROP_PROMETHEUS_EXPORTER_ADDRESS_DEFAULT;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.PROMETHEUS;
+import static org.onosproject.openstacktelemetry.config.DefaultPrometheusTelemetryConfig.ADDRESS;
+import static org.onosproject.openstacktelemetry.config.DefaultPrometheusTelemetryConfig.PORT;
+import static org.onosproject.openstacktelemetry.config.DefaultPrometheusTelemetryConfig.fromTelemetryConfig;
 
 /**
  * Unit tests for DefaultPrometheusTelemetryConfig class.
  */
 public class DefaultPrometheusTelemetryConfigTest {
-
-    private static final String IP_ADDRESS_1 = PROP_PROMETHEUS_EXPORTER_ADDRESS_DEFAULT;
+    private static final String IP_ADDRESS_1 = "10.10.1.1";
     private static final String IP_ADDRESS_2 = "10.10.1.2";
 
-    private static final int PORT_1 = PROP_PROMETHEUS_EXPORTER_PORT_DEFAULT;
-    private static final int PORT_2 = PROP_PROMETHEUS_EXPORTER_PORT_DEFAULT + 1;
+    private static final int PORT_1 = 50050;
+    private static final int PORT_2 = 50051;
 
     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 static final String DUMMY = "dummy";
+
     private PrometheusTelemetryConfig config1;
     private PrometheusTelemetryConfig sameAsConfig1;
     private PrometheusTelemetryConfig config2;
@@ -110,4 +117,21 @@
         assertThat(config.port(), is(PORT_1));
         assertThat(config.configMap(), is(CONFIG_MAP_1));
     }
-}
+
+    /**
+     * Tests props extraction.
+     */
+    @Test
+    public void testPropsExtraction() {
+        Map<String, String> props = Maps.newConcurrentMap();
+        props.put(ADDRESS, IP_ADDRESS_1);
+        props.put(PORT, String.valueOf(PORT_1));
+
+        TelemetryConfig config = new DefaultTelemetryConfig(DUMMY, PROMETHEUS,
+                ImmutableList.of(), DUMMY, DUMMY, false, props);
+
+        PrometheusTelemetryConfig prometheusConfig = fromTelemetryConfig(config);
+        assertThat(prometheusConfig.address(), is(IP_ADDRESS_1));
+        assertThat(prometheusConfig.port(), is(PORT_1));
+    }
+}
\ No newline at end of file
diff --git a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfigTest.java b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfigTest.java
index 3e8bac06..c78bb63 100644
--- a/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfigTest.java
+++ b/apps/openstacktelemetry/app/src/test/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfigTest.java
@@ -15,17 +15,28 @@
  */
 package org.onosproject.openstacktelemetry.config;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
 import com.google.common.testing.EqualsTester;
 import org.junit.Before;
 import org.junit.Test;
 import org.onosproject.openstacktelemetry.api.config.RestTelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
+import org.onosproject.openstacktelemetry.impl.DefaultTelemetryConfig;
 
 import java.util.Map;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.REST;
+import static org.onosproject.openstacktelemetry.config.DefaultRestTelemetryConfig.ADDRESS;
+import static org.onosproject.openstacktelemetry.config.DefaultRestTelemetryConfig.ENDPOINT;
+import static org.onosproject.openstacktelemetry.config.DefaultRestTelemetryConfig.METHOD;
+import static org.onosproject.openstacktelemetry.config.DefaultRestTelemetryConfig.PORT;
+import static org.onosproject.openstacktelemetry.config.DefaultRestTelemetryConfig.REQUEST_MEDIA_TYPE;
+import static org.onosproject.openstacktelemetry.config.DefaultRestTelemetryConfig.RESPONSE_MEDIA_TYPE;
 
 public final class DefaultRestTelemetryConfigTest {
 
@@ -52,6 +63,8 @@
     private static final Map<String, Object> CONFIG_MAP_2 =
             ImmutableMap.of("key2", "value2");
 
+    private static final String DUMMY = "dummy";
+
     private RestTelemetryConfig config1;
     private RestTelemetryConfig sameAsConfig1;
     private RestTelemetryConfig config2;
@@ -133,4 +146,28 @@
         assertThat(config.responseMediaType(), is(RESPONSE_MEDIA_TYPE_1));
         assertThat(config.configMap(), is(CONFIG_MAP_1));
     }
-}
+
+    /**
+     * Tests props extraction.
+     */
+    @Test
+    public void testPropsExtraction() {
+        Map<String, String> props = Maps.newConcurrentMap();
+        props.put(ADDRESS, IP_ADDRESS_1);
+        props.put(PORT, String.valueOf(PORT_1));
+        props.put(ENDPOINT, ENDPOINT_1);
+        props.put(METHOD, METHOD_1);
+        props.put(REQUEST_MEDIA_TYPE, REQUEST_MEDIA_TYPE_1);
+        props.put(RESPONSE_MEDIA_TYPE, RESPONSE_MEDIA_TYPE_1);
+
+        TelemetryConfig config = new DefaultTelemetryConfig(DUMMY, REST,
+                ImmutableList.of(), DUMMY, DUMMY, false, props);
+        RestTelemetryConfig restConfig = DefaultRestTelemetryConfig.fromTelemetryConfig(config);
+        assertThat(restConfig.address(), is(IP_ADDRESS_1));
+        assertThat(restConfig.port(), is(PORT_1));
+        assertThat(restConfig.endpoint(), is(ENDPOINT_1));
+        assertThat(restConfig.method(), is(METHOD_1));
+        assertThat(restConfig.requestMediaType(), is(REQUEST_MEDIA_TYPE_1));
+        assertThat(restConfig.responseMediaType(), is(RESPONSE_MEDIA_TYPE_1));
+    }
+}
\ No newline at end of file