Enhance DMaaP Adapter Configuration
Change-Id: I5385cf2710fc33a85da9a67d5f4d31dce1e460aa
Signed-off-by: Ryan Young <ry303t@att.com>
Issue-ID: APPC-658
diff --git a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/java/org/onap/appc/adapter/messaging/dmaap/impl/DmaapConsumerImpl.java b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/java/org/onap/appc/adapter/messaging/dmaap/impl/DmaapConsumerImpl.java
index 6f907ae..40ee1c7 100644
--- a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/java/org/onap/appc/adapter/messaging/dmaap/impl/DmaapConsumerImpl.java
+++ b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/java/org/onap/appc/adapter/messaging/dmaap/impl/DmaapConsumerImpl.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP : APPC
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Copyright (C) 2017 Amdocs
* =============================================================================
@@ -18,7 +18,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
* ============LICENSE_END=========================================================
*/
@@ -50,27 +49,26 @@
public class DmaapConsumerImpl implements Consumer {
- private static final EELFLogger LOG = EELFManager.getInstance().getLogger(DmaapConsumerImpl.class);
- private final Configuration configuration = ConfigurationFactory.getConfiguration();
+ private static final EELFLogger LOG = EELFManager.getInstance().getLogger(DmaapConsumerImpl.class);
+ private final Configuration configuration = ConfigurationFactory.getConfiguration();
// Default values
- private static final int DEFAULT_TIMEOUT_MS = 60000;
- private static final int DEFAULT_LIMIT = 1000;
- private String topic;
- private boolean isMetricEnabled = false;
- private boolean useHttps = false;
- private MetricRegistry metricRegistry;
- private MRConsumer client = null;
- private Properties props = null;
-
+ private static final int DEFAULT_TIMEOUT_MS = 60000;
+ private static final int DEFAULT_LIMIT = 1000;
+ private String topic;
+ private boolean isMetricEnabled = false;
+ private boolean useHttps = false;
+ private MetricRegistry metricRegistry;
+ private MRConsumer client = null;
+ private Properties props = null;
public DmaapConsumerImpl(Collection<String> urls, String topicName, String consumerGroupName, String consumerId,
- String user, String password) {
+ String user, String password) {
- this(urls, topicName, consumerGroupName, consumerId,user, password,null);
+ this(urls, topicName, consumerGroupName, consumerId, user, password, null);
}
public DmaapConsumerImpl(Collection<String> urls, String topicName, String consumerGroupName, String consumerId,
- String user, String password, String filter) {
+ String user, String password, String filter) {
this.topic = topicName;
this.props = new Properties();
@@ -78,8 +76,13 @@
props.setProperty("host", urlsStr);
props.setProperty("group", consumerGroupName);
props.setProperty("id", consumerId);
- props.setProperty("username", user);
- props.setProperty("password", password);
+ if (user != null && password != null) {
+ props.setProperty("username", user);
+ props.setProperty("password", password);
+ } else {
+ props.setProperty("TransportType", "HTTPNOAUTH");
+ }
+
if (filter != null) {
props.setProperty("filter", filter);
}
@@ -92,22 +95,17 @@
metricRegistry = metricService.createRegistry("APPC");
DmaapRequestCounterMetric dmaapKpiMetric = metricRegistry.metricBuilderFactory()
- .dmaapRequestCounterBuilder()
- .withName("DMAAP_KPI").withType(MetricType.COUNTER)
- .withRecievedMessage(0)
- .withPublishedMessage(0)
- .build();
+ .dmaapRequestCounterBuilder().withName("DMAAP_KPI").withType(MetricType.COUNTER)
+ .withRecievedMessage(0).withPublishedMessage(0).build();
if (metricRegistry.register(dmaapKpiMetric)) {
- Metric[] metrics = new Metric[]{dmaapKpiMetric};
+ Metric[] metrics = new Metric[] { dmaapKpiMetric };
LogPublisher logPublisher = new LogPublisher(metricRegistry, metrics);
LogPublisher[] logPublishers = new LogPublisher[1];
logPublishers[0] = logPublisher;
PublishingPolicy manuallyScheduledPublishingPolicy = metricRegistry.policyBuilderFactory()
- .scheduledPolicyBuilder().withPublishers(logPublishers)
- .withMetrics(metrics)
- .build();
+ .scheduledPolicyBuilder().withPublishers(logPublishers).withMetrics(metrics).build();
LOG.debug("Policy getting initialized");
manuallyScheduledPublishingPolicy.init();
@@ -121,12 +119,12 @@
*/
private synchronized MRConsumer getClient(int waitMs, int limit) {
try {
- props.setProperty("timeout",String.valueOf(waitMs));
- props.setProperty("limit",String.valueOf(limit));
- String topicProducerPropFileName = DmaapUtil.createConsumerPropFile(topic,props);
+ props.setProperty("timeout", String.valueOf(waitMs));
+ props.setProperty("limit", String.valueOf(limit));
+ String topicProducerPropFileName = DmaapUtil.createConsumerPropFile(topic, props);
return MRClientFactory.createConsumer(topicProducerPropFileName);
} catch (IOException e1) {
- LOG.error("failed to createConsumer",e1);
+ LOG.error("failed to createConsumer", e1);
return null;
}
}
@@ -134,8 +132,8 @@
@Override
public synchronized void updateCredentials(String key, String secret) {
LOG.info(String.format("Setting auth to %s for %s", key, this.toString()));
- props.setProperty("user",String.valueOf(key));
- props.setProperty("password",String.valueOf(secret));
+ props.setProperty("username", String.valueOf(key));
+ props.setProperty("password", String.valueOf(secret));
client = null;
}
@@ -227,4 +225,11 @@
}
}
+ public Properties getProperties() {
+ return props;
+ }
+
+ public boolean isHttps() {
+ return useHttps;
+ }
}
diff --git a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/java/org/onap/appc/adapter/messaging/dmaap/impl/DmaapProducerImpl.java b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/java/org/onap/appc/adapter/messaging/dmaap/impl/DmaapProducerImpl.java
index 3fbfc95..3a39a98 100644
--- a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/java/org/onap/appc/adapter/messaging/dmaap/impl/DmaapProducerImpl.java
+++ b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/java/org/onap/appc/adapter/messaging/dmaap/impl/DmaapProducerImpl.java
@@ -53,21 +53,20 @@
public class DmaapProducerImpl implements Producer {
- private static final EELFLogger LOG = EELFManager.getInstance().getLogger(DmaapProducerImpl.class);
- private static final Configuration configuration = ConfigurationFactory.getConfiguration();
+ private static final EELFLogger LOG = EELFManager.getInstance().getLogger(DmaapProducerImpl.class);
+ private static final Configuration configuration = ConfigurationFactory.getConfiguration();
- private Set<String> topics;
+ private Set<String> topics;
- private Properties props = null;
- private MetricRegistry metricRegistry;
- private boolean useHttps = false;
- private boolean isMetricEnabled = false;
-
- private Set<MRBatchingPublisher> clients;
+ private Properties props = null;
+ private MetricRegistry metricRegistry;
+ private boolean useHttps = false;
+ private boolean isMetricEnabled = false;
-
+ private Set<MRBatchingPublisher> clients;
+
public DmaapProducerImpl(Collection<String> urls, String topicName, String user, String password) {
- this(urls, (Set<String>)null, user, password);
+ this(urls, (Set<String>) null, user, password);
this.topics = new HashSet<>();
if (topicName != null) {
Collections.addAll(topics, topicName.split(","));
@@ -76,15 +75,19 @@
public DmaapProducerImpl(Collection<String> urls, Set<String> topicNames, String user, String password) {
topics = topicNames;
- if (urls == null || user == null || password == null) {
- throw new IllegalArgumentException("one of these mandaory argument is null: urls, user, password");
+ if (urls == null) {
+ throw new IllegalArgumentException("Mandaory argument is null: urls");
}
this.props = new Properties();
String urlsStr = StringUtils.join(urls, ',');
- props.setProperty("host",urlsStr);
+ props.setProperty("host", urlsStr);
props.setProperty("id", UUID.randomUUID().toString());
- props.setProperty("username",user);
- props.setProperty("password",password);
+ if (user != null && password != null) {
+ props.setProperty("username", user);
+ props.setProperty("password", password);
+ } else {
+ props.setProperty("TransportType", "HTTPNOAUTH");
+ }
}
private void initMetric() {
@@ -94,23 +97,17 @@
metricRegistry = metricService.createRegistry("APPC");
DmaapRequestCounterMetric dmaapKpiMetric = metricRegistry.metricBuilderFactory()
- .dmaapRequestCounterBuilder()
- .withName("DMAAP_KPI").withType(MetricType.COUNTER)
- .withRecievedMessage(0)
- .withPublishedMessage(0)
- .build();
+ .dmaapRequestCounterBuilder().withName("DMAAP_KPI").withType(MetricType.COUNTER)
+ .withRecievedMessage(0).withPublishedMessage(0).build();
if (metricRegistry.register(dmaapKpiMetric)) {
- Metric[] metrics = new Metric[]{dmaapKpiMetric};
+ Metric[] metrics = new Metric[] { dmaapKpiMetric };
LogPublisher logPublisher = new LogPublisher(metricRegistry, metrics);
LogPublisher[] logPublishers = new LogPublisher[1];
logPublishers[0] = logPublisher;
PublishingPolicy manuallyScheduledPublishingPolicy = metricRegistry.policyBuilderFactory()
- .scheduledPolicyBuilder()
- .withPublishers(logPublishers)
- .withMetrics(metrics)
- .build();
+ .scheduledPolicyBuilder().withPublishers(logPublishers).withMetrics(metrics).build();
LOG.debug("Policy getting initialized");
manuallyScheduledPublishingPolicy.init();
@@ -123,7 +120,7 @@
Set<MRBatchingPublisher> out = new HashSet<>();
for (String topic : topics) {
try {
- String topicProducerPropFileName = DmaapUtil.createProducerPropFile(topic,props);
+ String topicProducerPropFileName = DmaapUtil.createProducerPropFile(topic, props);
final MRBatchingPublisher client = MRClientFactory.createBatchingPublisher(topicProducerPropFileName);
out.add(client);
} catch (Exception e) {
@@ -136,7 +133,7 @@
@Override
public synchronized void updateCredentials(String key, String secret) {
LOG.info(String.format("Setting auth to %s for %s", key, this.toString()));
- props.setProperty("user", String.valueOf(key));
+ props.setProperty("username", String.valueOf(key));
props.setProperty("password", String.valueOf(secret));
clients = null;
}
@@ -145,20 +142,20 @@
public boolean post(String partition, String data) {
boolean success = true;
Properties properties = configuration.getProperties();
- if (properties != null && properties.getProperty("metric.enabled") != null ) {
+ if (properties != null && properties.getProperty("metric.enabled") != null) {
isMetricEnabled = Boolean.valueOf(properties.getProperty("metric.enabled"));
}
if (isMetricEnabled) {
initMetric();
}
-
- // Create clients once and reuse them on subsequent posts. This is
+
+ // Create clients once and reuse them on subsequent posts. This is
// to support failover to other servers in the Dmaap cluster.
if ((clients == null) || (clients.isEmpty())) {
LOG.info("Getting CambriaBatchingPublisher Clients ...");
clients = getClients();
}
-
+
for (MRBatchingPublisher client : clients) {
try {
LOG.debug(String.format("Posting %s to %s", data, client));
@@ -190,7 +187,7 @@
for (MRBatchingPublisher client : clients) {
try {
client.close(1, TimeUnit.SECONDS);
- } catch (IOException | InterruptedException e) {
+ } catch (IOException | InterruptedException e) {
LOG.warn(String.format("Failed to cleanly close Dmaap connection for [%s]", client), e);
}
}
@@ -214,4 +211,11 @@
}
}
+ public Properties getProperties() {
+ return props;
+ }
+
+ public boolean isHttps() {
+ return useHttps;
+ }
}
diff --git a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/java/org/onap/appc/adapter/messaging/dmaap/impl/DmaapUtil.java b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/java/org/onap/appc/adapter/messaging/dmaap/impl/DmaapUtil.java
index 7a65311..72e0a26 100644
--- a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/java/org/onap/appc/adapter/messaging/dmaap/impl/DmaapUtil.java
+++ b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/java/org/onap/appc/adapter/messaging/dmaap/impl/DmaapUtil.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP : APPC
* ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Copyright (C) 2017 Amdocs
* =============================================================================
@@ -18,72 +18,138 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
* ============LICENSE_END=========================================================
*/
package org.onap.appc.adapter.messaging.dmaap.impl;
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
+import org.onap.appc.configuration.Configuration;
+import org.onap.appc.configuration.ConfigurationFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
public class DmaapUtil {
- private static final char DELIMITER = '_';
+ private static final char DELIMITER = '_';
+
+ static final String DMAAP_PROPERTIES_PATH = "org.onap.appc.dmaap.profile.path";
+
+ private static final Logger log = LoggerFactory.getLogger(DmaapUtil.class);
private DmaapUtil() {
}
private static String createPreferredRouteFileIfNotExist(String topic) throws IOException {
String topicPreferredRouteFileName;
- topicPreferredRouteFileName = topic+"preferredRoute.properties";
- File fo= new File(topicPreferredRouteFileName);
- if(!fo.exists()) {
+ topicPreferredRouteFileName = topic + "preferredRoute.properties";
+ File fo = new File(topicPreferredRouteFileName);
+ if (!fo.exists()) {
ClassLoader classLoader = DmaapUtil.class.getClassLoader();
InputStream inputStream = classLoader.getResourceAsStream("preferredRoute.txt");
Properties props = new Properties();
props.load(inputStream);
- String fileName = topic != null ? topic+ DELIMITER +"MR1" : DELIMITER +"MR1";
+ String fileName = topic != null ? topic + DELIMITER + "MR1" : DELIMITER + "MR1";
props.setProperty("preferredRouteKey", fileName);
topicPreferredRouteFileName = topic + "preferredRoute.properties";
- props.store(new FileOutputStream(topicPreferredRouteFileName), "preferredRoute.properties file created on the fly for topic:" + topic + " on:" + System.currentTimeMillis());
+ props.store(new FileOutputStream(topicPreferredRouteFileName),
+ "preferredRoute.properties file created on the fly for topic:" + topic + " on:"
+ + System.currentTimeMillis());
}
return topicPreferredRouteFileName;
}
- public static String createConsumerPropFile(String topic, Properties props)throws IOException {
+ public static String createConsumerPropFile(String topic, Properties props) throws IOException {
String defaultProfFileName = "consumer.properties";
- return createConsumerProducerPropFile(topic, defaultProfFileName,props);
+
+ log.debug("Creating DMaaP Consumer Property File for topic " + topic);
+ return createConsumerProducerPropFile(topic, defaultProfFileName, props);
}
- public static String createProducerPropFile(String topic, Properties props)throws IOException {
+ public static String createProducerPropFile(String topic, Properties props) throws IOException {
String defaultProfFileName = "producer.properties";
- return createConsumerProducerPropFile(topic, defaultProfFileName,props);
+
+ log.debug("Creating DMaaP Producer Property File for topic " + topic);
+ return createConsumerProducerPropFile(topic, defaultProfFileName, props);
}
- private static String createConsumerProducerPropFile(String topic, String defaultProfFileName, Properties props) throws IOException {
- ClassLoader classLoader = DmaapUtil.class.getClassLoader();
- InputStream inputStream = classLoader.getResourceAsStream(defaultProfFileName);
- Properties defaultProps = new Properties();
- defaultProps.load(inputStream);
- defaultProps.setProperty("topic",topic);
+ private static String createConsumerProducerPropFile(String topic, String defaultProfFileName, Properties props)
+ throws IOException {
+ Properties defaultProps = getDefaultProperties(defaultProfFileName);
+
+ defaultProps.setProperty("topic", topic);
String preferredRouteFileName = DmaapUtil.createPreferredRouteFileIfNotExist(topic);
- if(props != null && !props.isEmpty()){
+ if (props != null && !props.isEmpty()) {
defaultProps.putAll(props);
}
- defaultProps.setProperty("topic",topic);
- defaultProps.setProperty("DME2preferredRouterFilePath",preferredRouteFileName);
+ defaultProps.setProperty("topic", topic);
+ defaultProps.setProperty("DME2preferredRouterFilePath", preferredRouteFileName);
String id = defaultProps.getProperty("id");
String topicConsumerPropFileName = defaultProfFileName;
- topicConsumerPropFileName = id != null ? id+ DELIMITER +topicConsumerPropFileName : DELIMITER +topicConsumerPropFileName;
- topicConsumerPropFileName = topic != null ? topic+ DELIMITER +topicConsumerPropFileName : DELIMITER +topicConsumerPropFileName;
+ topicConsumerPropFileName = id != null ? id + DELIMITER + topicConsumerPropFileName
+ : DELIMITER + topicConsumerPropFileName;
+ topicConsumerPropFileName = topic != null ? topic + DELIMITER + topicConsumerPropFileName
+ : DELIMITER + topicConsumerPropFileName;
- defaultProps.store(new FileOutputStream(topicConsumerPropFileName), defaultProfFileName+" file created on the fly for topic:"+topic+" on:"+System.currentTimeMillis());
+ defaultProps.store(new FileOutputStream(topicConsumerPropFileName), defaultProfFileName
+ + " file created on the fly for topic:" + topic + " on:" + System.currentTimeMillis());
return topicConsumerPropFileName;
}
+ private static Properties getDefaultProperties(String profileName) {
+ Properties props = new Properties();
+
+ // use appc configuration to get all properties which includes
+ // appc.properties and system properties
+ // allowing variable to be set in any location
+ Configuration config = ConfigurationFactory.getConfiguration();
+ String dmaapPropPath = config.getProperty(DMAAP_PROPERTIES_PATH);
+
+ if (dmaapPropPath != null) {
+ // load from file system
+
+ File profileFile = new File(dmaapPropPath, profileName);
+ FileInputStream inputStream = null;
+
+ log.info("Loading DMaaP Profile from " + profileFile.getAbsolutePath());
+
+ if (profileFile.exists()) {
+ try {
+ inputStream = new FileInputStream(profileFile);
+ props.load(inputStream);
+ } catch (IOException e) {
+ log.error("Exception loading DMaaP Profile from " + profileFile.getAbsolutePath(), e);
+ } finally {
+ try {
+ if (inputStream != null) {
+ inputStream.close();
+ }
+ } catch (IOException ex) {
+ log.warn("Exception closing DMaaP Profile file " + profileFile.getAbsolutePath(), ex);
+ }
+ }
+ }
+ }
+ if (props.isEmpty()) {
+ // load default Profile from class
+ log.info("Loading Default DMaaP Profile");
+
+ ClassLoader classLoader = DmaapUtil.class.getClassLoader();
+ InputStream inputStream = classLoader.getResourceAsStream(profileName);
+ try {
+ props.load(inputStream);
+ } catch (IOException e) {
+ log.error("Exception loading Default DMaaP Profile", e);
+ }
+ }
+
+ return props;
+ }
}
diff --git a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/resources/consumer.properties b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/resources/consumer.properties
index 39506fc..b19a335 100644
--- a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/resources/consumer.properties
+++ b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/resources/consumer.properties
@@ -2,7 +2,7 @@
# ============LICENSE_START=======================================================
# ONAP : APPC
# ================================================================================
-# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
# ================================================================================
# Copyright (C) 2017 Amdocs
# =============================================================================
@@ -18,12 +18,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
# ============LICENSE_END=========================================================
###
#TransportType-Specify which way user want to use. I.e. <HTTPAAF,DME2,HTTPAUTH >
-TransportType=HTTPAAF
+TransportType=HTTPNOAUTH
Latitude =50.000000
Longitude =-100.000000
Version =1.0
@@ -55,6 +54,3 @@
AFT_DME2_EP_READ_TIMEOUT_MS=50000
sessionstickinessrequired=NO
DME2preferredRouterFilePath=preferredRoute.txt
-
-
-
diff --git a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/resources/producer.properties b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/resources/producer.properties
index eb84178..129ec9c 100644
--- a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/resources/producer.properties
+++ b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/main/resources/producer.properties
@@ -2,7 +2,7 @@
# ============LICENSE_START=======================================================
# ONAP : APPC
# ================================================================================
-# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
# ================================================================================
# Copyright (C) 2017 Amdocs
# =============================================================================
@@ -18,12 +18,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
# ============LICENSE_END=========================================================
###
#TransportType-Specify which way user want to use. I.e. <HTTPAAF,DME2,HTTPAUTH >
-TransportType=HTTPAAF
+TransportType=HTTPNOAUTH
Latitude =50.000000
Longitude =-100.000000
Version =1.0
diff --git a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/impl/TestDmaapConsumerImpl.java b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/impl/TestDmaapConsumerImpl.java
new file mode 100644
index 0000000..25fac16
--- /dev/null
+++ b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/impl/TestDmaapConsumerImpl.java
@@ -0,0 +1,136 @@
+package org.onap.appc.adapter.messaging.dmaap.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Properties;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class TestDmaapConsumerImpl {
+ String[] hostList = { "192.168.1.1" };
+ Collection<String> hosts = new HashSet<String>(Arrays.asList(hostList));
+
+ String topic = "JunitTopicOne";
+ String group = "junit-client";
+ String id = "junit-consumer-one";
+ String key = "key";
+ String secret = "secret";
+ String filter = null;
+
+ @Test
+ public void testDmaapConsumerImplNoFilter() {
+
+ DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, key, secret);
+
+ assertNotNull(consumer);
+
+ Properties props = consumer.getProperties();
+
+ assertEquals("192.168.1.1", props.getProperty("host"));
+ assertEquals("key", props.getProperty("username"));
+ assertEquals("secret", props.getProperty("password"));
+ }
+
+ @Test
+ public void testDmaapConsumerImplwithFilter() {
+
+ DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, key, secret, filter);
+
+ assertNotNull(consumer);
+
+ }
+
+ @Test
+ public void testDmaapConsumerImplNoUserPassword() {
+
+ DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, null, null);
+
+ assertNotNull(consumer);
+
+ Properties props = consumer.getProperties();
+
+ assertEquals("192.168.1.1", props.getProperty("host"));
+ assertNull(props.getProperty("username"));
+ assertNull(props.getProperty("password"));
+ assertEquals("HTTPNOAUTH", props.getProperty("TransportType"));
+ }
+
+ @Test
+ public void testUpdateCredentials() {
+ DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, null, null);
+
+ assertNotNull(consumer);
+
+ Properties props = consumer.getProperties();
+
+ assertEquals("192.168.1.1", props.getProperty("host"));
+ assertNull(props.getProperty("username"));
+ assertNull(props.getProperty("password"));
+
+ consumer.updateCredentials(key, secret);
+
+ props = consumer.getProperties();
+ assertEquals("192.168.1.1", props.getProperty("host"));
+ assertEquals("key", props.getProperty("username"));
+ assertEquals("secret", props.getProperty("password"));
+ }
+
+ @Ignore
+ @Test
+ public void testFetch() {
+ fail("Not yet implemented");
+ }
+
+ @Ignore
+ @Test
+ public void testFetchIntInt() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testCloseNoClient() {
+ DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, key, secret);
+
+ assertNotNull(consumer);
+
+ consumer.close();
+ }
+
+ @Ignore
+ @Test
+ public void testCloseWithClient() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testToString() {
+ DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, null, null);
+
+ assertNotNull(consumer);
+
+ assertEquals("Consumer junit-client/junit-consumer-one listening to JunitTopicOne on [192.168.1.1]",
+ consumer.toString());
+ }
+
+ @Test
+ public void testUseHttps() {
+ DmaapConsumerImpl consumer = new DmaapConsumerImpl(hosts, topic, group, id, key, secret);
+
+ assertNotNull(consumer);
+
+ assertEquals(false, consumer.isHttps());
+
+ consumer.useHttps(true);
+
+ assertEquals(true, consumer.isHttps());
+
+ }
+
+}
diff --git a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/impl/TestDmaapProducerImpl.java b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/impl/TestDmaapProducerImpl.java
new file mode 100644
index 0000000..956d620
--- /dev/null
+++ b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/impl/TestDmaapProducerImpl.java
@@ -0,0 +1,133 @@
+package org.onap.appc.adapter.messaging.dmaap.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Set;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class TestDmaapProducerImpl {
+ String[] hostList = { "192.168.1.1" };
+ Collection<String> hosts = new HashSet<String>(Arrays.asList(hostList));
+
+ String topic = "JunitTopicOne";
+ String group = "junit-client";
+ String id = "junit-consumer-one";
+ String key = "key";
+ String secret = "secret";
+ String filter = null;
+
+ @Test
+ public void testDmaapProducerImplSingleTopic() {
+ DmaapProducerImpl producer = new DmaapProducerImpl(hosts, topic, key, secret);
+
+ assertNotNull(producer);
+
+ Properties props = producer.getProperties();
+
+ assertNotNull(props);
+
+ assertEquals("key", props.getProperty("username"));
+ assertEquals("secret", props.getProperty("password"));
+ }
+
+ @Test
+ public void testDmaapProducerImplMultipleTopic() {
+ String[] topicList = { "topic1", "topic2" };
+ Set<String> topicNames = new HashSet<String>(Arrays.asList(topicList));
+
+ DmaapProducerImpl producer = new DmaapProducerImpl(hosts, topicNames, key, secret);
+
+ assertNotNull(producer);
+
+ Properties props = producer.getProperties();
+
+ assertNotNull(props);
+
+ assertEquals("key", props.getProperty("username"));
+ assertEquals("secret", props.getProperty("password"));
+
+ }
+
+ @Test
+ public void testDmaapProducerImplNoUserPass() {
+ DmaapProducerImpl producer = new DmaapProducerImpl(hosts, topic, null, null);
+
+ assertNotNull(producer);
+
+ Properties props = producer.getProperties();
+
+ assertNotNull(props);
+
+ assertNull(props.getProperty("username"));
+ assertNull(props.getProperty("password"));
+ }
+
+ @Test
+ public void testUpdateCredentials() {
+ DmaapProducerImpl producer = new DmaapProducerImpl(hosts, topic, null, null);
+
+ assertNotNull(producer);
+
+ Properties props = producer.getProperties();
+
+ assertNotNull(props);
+
+ assertNull(props.getProperty("username"));
+ assertNull(props.getProperty("password"));
+
+ producer.updateCredentials(key, secret);
+
+ props = producer.getProperties();
+
+ assertNotNull(props);
+
+ assertEquals("key", props.getProperty("username"));
+ assertEquals("secret", props.getProperty("password"));
+
+ }
+
+ @Ignore
+ @Test
+ public void testPost() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testCloseNoClient() {
+ DmaapProducerImpl producer = new DmaapProducerImpl(hosts, topic, key, secret);
+
+ assertNotNull(producer);
+
+ producer.close();
+ }
+
+ @Ignore
+ @Test
+ public void testCloseWithClient() {
+ fail("Not yet implemented");
+ }
+
+ @Test
+ public void testUseHttps() {
+ DmaapProducerImpl producer = new DmaapProducerImpl(hosts, topic, key, secret);
+
+ assertNotNull(producer);
+
+ assertEquals(false, producer.isHttps());
+
+ producer.useHttps(true);
+
+ assertEquals(true, producer.isHttps());
+
+ }
+
+}
diff --git a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/impl/TestDmaapUtil.java b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/impl/TestDmaapUtil.java
new file mode 100644
index 0000000..03e6191
--- /dev/null
+++ b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/java/org/onap/appc/adapter/messaging/dmaap/impl/TestDmaapUtil.java
@@ -0,0 +1,268 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP : APPC
+ * ================================================================================
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Copyright (C) 2017 Amdocs
+ * =============================================================================
+ * 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.
+ *
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.appc.adapter.messaging.dmaap.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.util.Properties;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.appc.configuration.ConfigurationFactory;
+
+public class TestDmaapUtil {
+ private static Class<?> configurationFactoryClass;
+ private static Field configField;
+
+ @Test
+ public void testCreateConsumerPropFile() {
+ String topic = "JunitTopicOne";
+ Properties junitProps = new Properties();
+ junitProps.put("host", "192.168.10.10");
+ junitProps.put("group", "junit-client");
+ junitProps.put("id", "junit-consumer-one");
+ junitProps.put("filter", "none");
+
+ String junitFile = null;
+
+ // ensure file path property is not set
+ if (System.getProperty(DmaapUtil.DMAAP_PROPERTIES_PATH) != null) {
+ System.clearProperty(DmaapUtil.DMAAP_PROPERTIES_PATH);
+
+ // set configuration to null to force reloading of properties
+ try {
+ configField.set(null, null);
+ } catch (IllegalArgumentException | IllegalAccessException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ }
+ try {
+ junitFile = DmaapUtil.createConsumerPropFile(topic, junitProps);
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail("Exception creating consumer property file");
+ }
+
+ assertNotNull(junitFile);
+
+ // open file and verify properties
+ File testFile = new File(junitFile);
+ assertTrue(testFile.exists());
+
+ InputStream is = null;
+ Properties testProps = new Properties();
+ try {
+ is = new FileInputStream(testFile);
+ testProps.load(is);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ fail("Exception opening consumer property file");
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail("Exception opening consumer property file");
+ } finally {
+ try {
+ if (is != null) {
+ is.close();
+ }
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ fail("Exception closing consumer property file");
+ }
+ }
+
+ assertFalse(testProps.isEmpty());
+
+ assertEquals(testProps.get("host"), "192.168.10.10");
+ assertEquals(testProps.get("group"), "junit-client");
+ assertEquals(testProps.get("id"), "junit-consumer-one");
+ assertEquals(testProps.get("filter"), "none");
+ assertEquals(testProps.get("TransportType"), "HTTPNOAUTH");
+ }
+
+ @Test
+ public void testCreateConsumerPropFileWithCustomProfile() {
+ String topic = "JunitTopicOne";
+ Properties junitProps = new Properties();
+ junitProps.put("host", "192.168.10.10");
+ junitProps.put("group", "junit-client");
+ junitProps.put("id", "junit-consumer-two");
+ junitProps.put("filter", "none");
+
+ String junitFile = null;
+
+ // set property for DMaaP profile
+ System.setProperty(DmaapUtil.DMAAP_PROPERTIES_PATH, "src/test/resources/org/onap/appc");
+
+ // set configuration to null to force reloading of properties
+ try {
+ configField.set(null, null);
+ } catch (IllegalArgumentException | IllegalAccessException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+
+ try {
+ junitFile = DmaapUtil.createConsumerPropFile(topic, junitProps);
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail("Exception creating consumer property file");
+ }
+
+ assertNotNull(junitFile);
+
+ // open file and verify properties
+ File testFile = new File(junitFile);
+ assertTrue(testFile.exists());
+
+ InputStream is = null;
+ Properties testProps = new Properties();
+ try {
+ is = new FileInputStream(testFile);
+ testProps.load(is);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ fail("Exception opening consumer property file");
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail("Exception opening consumer property file");
+ } finally {
+ try {
+ if (is != null) {
+ is.close();
+ }
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ fail("Exception closing consumer property file");
+ }
+ }
+
+ assertFalse(testProps.isEmpty());
+
+ assertEquals(testProps.get("host"), "192.168.10.10");
+ assertEquals(testProps.get("group"), "junit-client");
+ assertEquals(testProps.get("id"), "junit-consumer-two");
+ assertEquals(testProps.get("filter"), "none");
+ assertEquals(testProps.get("TransportType"), "HTTPAAF");
+ }
+
+ @Test
+ public void testCreateProducerPropFile() {
+ String topic = "JunitTopicOne";
+ Properties junitProps = new Properties();
+ junitProps.put("host", "192.168.10.10");
+ junitProps.put("group", "junit-client");
+ junitProps.put("id", "junit-producer-one");
+ junitProps.put("filter", "none");
+
+ String junitFile = null;
+
+ // ensure file path property is not set
+ if (System.getProperty(DmaapUtil.DMAAP_PROPERTIES_PATH) != null) {
+ System.clearProperty(DmaapUtil.DMAAP_PROPERTIES_PATH);
+
+ // set configuration to null to force reloading of properties
+ try {
+ configField.set(null, null);
+ } catch (IllegalArgumentException | IllegalAccessException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ }
+
+ try {
+ junitFile = DmaapUtil.createProducerPropFile(topic, junitProps);
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail("Exception creating consumer property file");
+ }
+
+ assertNotNull(junitFile);
+
+ // open file and verify properties
+ File testFile = new File(junitFile);
+ assertTrue(testFile.exists());
+
+ InputStream is = null;
+ Properties testProps = new Properties();
+ try {
+ is = new FileInputStream(testFile);
+ testProps.load(is);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ fail("Exception opening consumer property file");
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail("Exception opening consumer property file");
+ } finally {
+ try {
+ if (is != null) {
+ is.close();
+ }
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ fail("Exception closing consumer property file");
+ }
+ }
+
+ assertFalse(testProps.isEmpty());
+
+ assertEquals(testProps.get("host"), "192.168.10.10");
+ assertEquals(testProps.get("group"), "junit-client");
+ assertEquals(testProps.get("id"), "junit-producer-one");
+ assertEquals(testProps.get("filter"), "none");
+ assertEquals("HTTPNOAUTH", testProps.get("TransportType"));
+ }
+
+ /**
+ * Use reflection to locate fields and methods so that they can be
+ * manipulated during the test to change the internal state accordingly.
+ *
+ * @throws NoSuchFieldException
+ * if the field(s) dont exist
+ * @throws SecurityException
+ * if reflective access is not allowed
+ * @throws NoSuchMethodException
+ * If the method(s) dont exist
+ */
+ @SuppressWarnings("nls")
+ @BeforeClass
+ public static void once() throws NoSuchFieldException, SecurityException, NoSuchMethodException {
+ configurationFactoryClass = ConfigurationFactory.class;
+
+ configField = configurationFactoryClass.getDeclaredField("config");
+ configField.setAccessible(true);
+ }
+}
diff --git a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/consumer.properties b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/consumer.properties
new file mode 100644
index 0000000..7096194
--- /dev/null
+++ b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/consumer.properties
@@ -0,0 +1,54 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Copyright (C) 2017 Amdocs
+# =============================================================================
+# 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.
+#
+# ============LICENSE_END=========================================================
+###
+
+#TransportType-Specify which way user want to use. I.e. <HTTPAAF,DME2,HTTPAUTH >
+TransportType=HTTPAAF
+Latitude =50.000000
+Longitude =-100.000000
+Version =1.0
+ServiceName =dmaap-v1.dev.dmaap.dt.saat.acsi.openecomp.org/events
+Environment =TEST
+Partner=BOT_R
+routeOffer=MR1
+SubContextPath =/
+Protocol =http
+MethodType =GET
+contenttype =application/json
+#authKey=01234567890abcde:01234567890abcdefghijklmn
+#authDate=2016-02-18T13:57:37-0800
+host=127.0.0.1
+topic=org.onap.appc.UNIT-TEST
+group=jmsgrp
+id=2
+timeout=15000
+limit=1000
+filter=
+AFT_DME2_EXCHANGE_REQUEST_HANDLERS=com.att.nsa.test.PreferredRouteRequestHandler
+AFT_DME2_EXCHANGE_REPLY_HANDLERS=com.att.nsa.test.PreferredRouteReplyHandler
+AFT_DME2_REQ_TRACE_ON=true
+AFT_ENVIRONMENT=AFTUAT
+AFT_DME2_EP_CONN_TIMEOUT=15000
+AFT_DME2_ROUNDTRIP_TIMEOUT_MS=240000
+AFT_DME2_EP_READ_TIMEOUT_MS=50000
+sessionstickinessrequired=NO
+DME2preferredRouterFilePath=preferredRoute.txt
diff --git a/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/producer.properties b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/producer.properties
new file mode 100644
index 0000000..9cc7f2e
--- /dev/null
+++ b/appc-adapters/appc-dmaap-adapter/appc-dmaap-adapter-bundle/src/test/resources/org/onap/appc/producer.properties
@@ -0,0 +1,52 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : APPC
+# ================================================================================
+# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Copyright (C) 2017 Amdocs
+# =============================================================================
+# 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.
+#
+# ============LICENSE_END=========================================================
+###
+
+#TransportType-Specify which way user want to use. I.e. <HTTPAAF,DME2,HTTPAUTH >
+TransportType=HTTPAAF
+Latitude =50.000000
+Longitude =-100.000000
+Version =1.0
+ServiceName =dmaap-v1.dev.dmaap.dt.saat.acsi.openecomp.org/events
+Environment =TEST
+Partner=BOT_R
+SubContextPath =/
+Protocol =http
+MethodType =POST
+contenttype = application/json
+authKey=01234567890abcde:01234567890abcdefghijklmn
+authDate=2016-07-20T11:30:56-0700
+host=127.0.0.1
+topic=org.onap.appc.UNIT-TEST
+partition=2
+maxBatchSize=100
+maxAgeMs=250
+AFT_DME2_EXCHANGE_REQUEST_HANDLERS=com.att.nsa.test.PreferredRouteRequestHandler
+AFT_DME2_EXCHANGE_REPLY_HANDLERS=com.att.nsa.test.PreferredRouteReplyHandler
+AFT_DME2_REQ_TRACE_ON=true
+AFT_ENVIRONMENT=AFTUAT
+AFT_DME2_EP_CONN_TIMEOUT=15000
+AFT_DME2_ROUNDTRIP_TIMEOUT_MS=240000
+AFT_DME2_EP_READ_TIMEOUT_MS=50000
+sessionstickinessrequired=NO
+DME2preferredRouterFilePath=preferredRoute.txt
+MessageSentThreadOccurance=50