From c489a2eb22484e798c39a978bc8b61821b92322f Mon Sep 17 00:00:00 2001 From: an4828 Date: Mon, 22 Jan 2018 17:17:34 -0500 Subject: TCA: Replace any openecomp reference by onap Change-Id: I7c6d812ab5c1d7b30c63653d1974b0b1abc099be Signed-off-by: an4828 Issue-ID: DCAEGEN2-224 Signed-off-by: an4828 --- .../analytics/it/cucumber/CucumberRunnerIT.java | 40 ++++ .../analytics/it/cucumber/steps/DMaaPMRSteps.java | 129 ++++++++++++ .../apod/analytics/it/dmaap/DMaaPMRCreator.java | 83 ++++++++ .../analytics/it/dmaap/DMaaPMRCreatorImpl.java | 225 +++++++++++++++++++++ .../it/module/AnalyticsITInjectorSource.java | 41 ++++ .../analytics/it/module/IntegrationTestModule.java | 126 ++++++++++++ .../it/plugins/BaseAnalyticsPluginsIT.java | 51 +++++ .../it/plugins/DMaaPMRSourcePluginIT.java | 204 +++++++++++++++++++ .../dcae/apod/analytics/it/util/StepUtils.java | 43 ++++ .../analytics/it/cucumber/CucumberRunnerIT.java | 40 ---- .../analytics/it/cucumber/steps/DMaaPMRSteps.java | 129 ------------ .../apod/analytics/it/dmaap/DMaaPMRCreator.java | 83 -------- .../analytics/it/dmaap/DMaaPMRCreatorImpl.java | 225 --------------------- .../it/module/AnalyticsITInjectorSource.java | 41 ---- .../analytics/it/module/IntegrationTestModule.java | 126 ------------ .../it/plugins/BaseAnalyticsPluginsIT.java | 51 ----- .../it/plugins/DMaaPMRSourcePluginIT.java | 204 ------------------- .../dcae/apod/analytics/it/util/StepUtils.java | 43 ---- 18 files changed, 942 insertions(+), 942 deletions(-) create mode 100644 dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/cucumber/CucumberRunnerIT.java create mode 100644 dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/cucumber/steps/DMaaPMRSteps.java create mode 100644 dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/dmaap/DMaaPMRCreator.java create mode 100644 dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/dmaap/DMaaPMRCreatorImpl.java create mode 100644 dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/module/AnalyticsITInjectorSource.java create mode 100644 dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/module/IntegrationTestModule.java create mode 100644 dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/plugins/BaseAnalyticsPluginsIT.java create mode 100644 dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/plugins/DMaaPMRSourcePluginIT.java create mode 100644 dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/util/StepUtils.java delete mode 100644 dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/cucumber/CucumberRunnerIT.java delete mode 100644 dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/cucumber/steps/DMaaPMRSteps.java delete mode 100644 dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/dmaap/DMaaPMRCreator.java delete mode 100644 dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/dmaap/DMaaPMRCreatorImpl.java delete mode 100644 dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/module/AnalyticsITInjectorSource.java delete mode 100644 dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/module/IntegrationTestModule.java delete mode 100644 dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/plugins/BaseAnalyticsPluginsIT.java delete mode 100644 dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/plugins/DMaaPMRSourcePluginIT.java delete mode 100644 dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/util/StepUtils.java (limited to 'dcae-analytics-it/src/test/java') diff --git a/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/cucumber/CucumberRunnerIT.java b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/cucumber/CucumberRunnerIT.java new file mode 100644 index 0000000..d459f36 --- /dev/null +++ b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/cucumber/CucumberRunnerIT.java @@ -0,0 +1,40 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcae.apod.analytics.it.cucumber; + +import cucumber.api.CucumberOptions; +import cucumber.api.SnippetType; +import cucumber.api.junit.Cucumber; +import org.junit.runner.RunWith; + +/** + * @author Rajiv Singla . Creation Date: 2/1/2017. + */ + +@RunWith(Cucumber.class) +@CucumberOptions( + plugin = {"pretty", "json:target/cucumber/cucumber.json", "html:target/cucumber"}, + features = {"src/test/resources/cucumber/features/dmaap"}, + glue = {"org.onap.dcae.apod.analytics.it.cucumber.steps"}, + snippets = SnippetType.CAMELCASE +) +public class CucumberRunnerIT { +} diff --git a/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/cucumber/steps/DMaaPMRSteps.java b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/cucumber/steps/DMaaPMRSteps.java new file mode 100644 index 0000000..c74cc8d --- /dev/null +++ b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/cucumber/steps/DMaaPMRSteps.java @@ -0,0 +1,129 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcae.apod.analytics.it.cucumber.steps; + +import com.google.inject.Inject; +import com.google.inject.name.Named; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Given; +import cucumber.api.java.en.Then; +import cucumber.api.java.en.When; +import org.onap.dcae.apod.analytics.common.utils.HTTPUtils; +import org.onap.dcae.apod.analytics.dmaap.domain.response.DMaaPMRPublisherResponse; +import org.onap.dcae.apod.analytics.dmaap.domain.response.DMaaPMRSubscriberResponse; +import org.onap.dcae.apod.analytics.dmaap.service.publisher.DMaaPMRPublisher; +import org.onap.dcae.apod.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; +import org.onap.dcae.apod.analytics.it.dmaap.DMaaPMRCreator; +import org.onap.dcae.apod.analytics.it.util.StepUtils; +import org.onap.dcae.apod.analytics.test.BaseDCAEAnalyticsIT; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +/** + * @author Rajiv Singla . Creation Date: 2/1/2017. + */ +public class DMaaPMRSteps extends BaseDCAEAnalyticsIT { + + private static final Logger LOG = LoggerFactory.getLogger(DMaaPMRSteps.class); + + private final DMaaPMRCreator dMaaPMRCreator; + private final String defaultPublisherTopicName; + + private static DMaaPMRSubscriberResponse subscriberResponse; + private static String messageToPublish; + private static String fetchedMessage; + + @Inject + public DMaaPMRSteps(DMaaPMRCreator dMaaPMRCreator, + @Named("dmaap.mr.publisher.topicName") String defaultPublisherTopicName) { + this.dMaaPMRCreator = dMaaPMRCreator; + this.defaultPublisherTopicName = defaultPublisherTopicName; + } + + + @Given("^DMaaP MR Service is up$") + public void dmaapMRServiceIsUp() throws Throwable { + final DMaaPMRSubscriber subscriber = + dMaaPMRCreator.getDMaaPMRSubscriberWithTopicName(defaultPublisherTopicName); + final DMaaPMRSubscriberResponse subscriberResponse = subscriber.fetchMessages(); + assertNotNull(subscriberResponse.getResponseCode()); + assertTrue(HTTPUtils.isSuccessfulResponseCode(subscriberResponse.getResponseCode())); + LOG.info("Subscriber is able to fetch messages successfully - Verified DMaaP MR Service is UP"); + } + + @When("^I publish json message to publisher topic name \"([^\"]*)\" in file \"([^\"]*)\"$") + public void iPublishJsonMessageToPublisherTopicNameInFile(String publisherTopicName, String fileLocation) + throws Throwable { + String publisherTopic; + if (StepUtils.isDefaultPublisherTopic(publisherTopicName)) { + publisherTopic = defaultPublisherTopicName; + } else { + publisherTopic = publisherTopicName; + } + final DMaaPMRPublisher publisher = dMaaPMRCreator.getDMaaPMRPublisherWithTopicName(publisherTopic); + messageToPublish = fromStream(fileLocation); + final DMaaPMRPublisherResponse publisherResponse = publisher.publish(Arrays.asList(messageToPublish)); + LOG.info("Publisher published messages to DMaaP MR Topic - Response: {}", publisherResponse); + assertTrue(HTTPUtils.isSuccessfulResponseCode(publisherResponse.getResponseCode())); + } + + @And("^wait for \"([^\"]*)\" seconds$") + public void waitForSeconds(Integer waitInSeconds) throws Throwable { + TimeUnit.SECONDS.sleep(waitInSeconds); + LOG.info("Waking up after sleep: {} seconds", waitInSeconds); + } + + @And("^subscriber fetch message from publisher topic name \"([^\"]*)\"$") + public void fetchMessageFrom(String publisherTopicName) throws Throwable { + String publisherTopic; + if (StepUtils.isDefaultPublisherTopic(publisherTopicName)) { + publisherTopic = defaultPublisherTopicName; + } else { + publisherTopic = publisherTopicName; + } + final DMaaPMRSubscriber subscriber = dMaaPMRCreator.getDMaaPMRSubscriberWithTopicName(publisherTopic); + subscriberResponse = subscriber.fetchMessages(); + LOG.info("Subscriber fetched messages to DMaaP MR Topic - Response: {}", subscriberResponse); + assertTrue(HTTPUtils.isSuccessfulResponseCode(subscriberResponse.getResponseCode())); + } + + @And("^compare fetched json message with published message$") + public void compareFetchedJsonMessageWithPublishedMessage() throws Throwable { + + fetchedMessage = subscriberResponse.getFetchedMessages().get(0); + LOG.info("Fetched Json Message: {}", fetchedMessage); + LOG.info("Published Json Message: {}", messageToPublish); + } + + @Then("^fetched message must be same as published message$") + public void fetchedMessageMustBeSameAsPublishedMessage() throws Throwable { + assertJson(messageToPublish, fetchedMessage); + } + + + +} diff --git a/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/dmaap/DMaaPMRCreator.java b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/dmaap/DMaaPMRCreator.java new file mode 100644 index 0000000..6bae6bc --- /dev/null +++ b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/dmaap/DMaaPMRCreator.java @@ -0,0 +1,83 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcae.apod.analytics.it.dmaap; + +import org.onap.dcae.apod.analytics.dmaap.service.publisher.DMaaPMRPublisher; +import org.onap.dcae.apod.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; + +import java.util.Map; + +/** + * Creates DMaaP MR Publisher and Subscriber Instances for Integration Testing purposes + *

+ * @author Rajiv Singla . Creation Date: 2/1/2017. + */ +public interface DMaaPMRCreator { + + /** + * Provides {@link DMaaPMRSubscriber} instance for Integration testing configured for the specific test + * environment + * + * @return DMaaP MR Subscriber instance for integration testing + */ + DMaaPMRSubscriber getDMaaPMRSubscriber(); + + + /** + * Provides {@link DMaaPMRSubscriber} instance for Integration testing configured with given topic name + * + * @param subscriberTopicName DMaaP MR Subscriber Topic Name + * @return DMaaP MR Subscriber instance which is subscriber to given subscriber topic + */ + DMaaPMRSubscriber getDMaaPMRSubscriberWithTopicName(String subscriberTopicName); + + /** + * Provides {@link DMaaPMRPublisher} instance for Integration testing configured for the specific test + * environment + * + * @return DMaaP MR Publisher instance for integration testing + */ + DMaaPMRPublisher getDMaaPMRPublisher(); + + + /** + * Provides {@link DMaaPMRPublisher} instance for Integration testing configured with given topic name + * + * @param publisherTopicName DMaaP MR publisher topic name + * @return DMaaP MR Publisher instance for integration testing + */ + DMaaPMRPublisher getDMaaPMRPublisherWithTopicName(String publisherTopicName); + + /** + * Provides a map of DMaaP subscriber config for Integration testing configured with given topic name + * + * @return Map of key-value pair of subscriber config + */ + Map getDMaaPMRSubscriberConfig(); + + /** + * Provides a map of DMaaP publisher config for Integration testing configured with given topic name + * + * @return Map of key-value pair of publisher config + */ + Map getDMaaPMRPublisherConfig(); + +} diff --git a/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/dmaap/DMaaPMRCreatorImpl.java b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/dmaap/DMaaPMRCreatorImpl.java new file mode 100644 index 0000000..1055fe2 --- /dev/null +++ b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/dmaap/DMaaPMRCreatorImpl.java @@ -0,0 +1,225 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcae.apod.analytics.it.dmaap; + +import com.google.inject.Inject; +import com.google.inject.name.Named; +import org.onap.dcae.apod.analytics.dmaap.DMaaPMRFactory; +import org.onap.dcae.apod.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; +import org.onap.dcae.apod.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; +import org.onap.dcae.apod.analytics.dmaap.service.publisher.DMaaPMRPublisher; +import org.onap.dcae.apod.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author Rajiv Singla . Creation Date: 2/1/2017. + */ +public class DMaaPMRCreatorImpl implements DMaaPMRCreator { + + private final String subscriberHostName; + + private final Integer subscriberHostPort; + + private final String subscriberTopicName; + + private final String subscriberProtocol; + + private final String subscriberUserName; + + private final String subscriberUserPassword; + + private final String subscriberContentType; + + private final String subscriberConsumerId; + + private final String subscriberConsumerGroup; + + private final Integer subscriberTimeoutMS; + + private final Integer subscriberMessageLimit; + + private final Integer subscriberPollingInterval; + + // publisher preferences + private final String publisherHostName; + + private final Integer publisherHostPort; + + private final String publisherTopicName; + + private final String publisherProtocol; + + private final String publisherUserName; + + private final String publisherUserPassword; + + private final String publisherContentType; + + private final Integer publisherPollingInterval; + + private final Integer publisherMaxBatchSize; + + private final Integer publisherMaxRecoveryQueueSize; + + + private final DMaaPMRFactory dMaaPMRFactory; + + @Inject + public DMaaPMRCreatorImpl(@Named("dmaap.mr.subscriber.hostname") String subscriberHostName, + @Named("dmaap.mr.subscriber.portNumber") Integer subscriberHostPort, + @Named("dmaap.mr.subscriber.topicName") String subscriberTopicName, + @Named("dmaap.mr.subscriber.protocol") String subscriberProtocol, + @Named("dmaap.mr.subscriber.username") String subscriberUserName, + @Named("dmaap.mr.subscriber.userPassword") String subscriberUserPassword, + @Named("dmaap.mr.subscriber.contentType") String subscriberContentType, + @Named("dmaap.mr.subscriber.consumerId") String subscriberConsumerId, + @Named("dmaap.mr.subscriber.consumerGroup") String subscriberConsumerGroup, + @Named("dmaap.mr.subscriber.timeoutMS") Integer subscriberTimeoutMS, + @Named("dmaap.mr.subscriber.messageLimit") Integer subscriberMessageLimit, + @Named("dmaap.mr.subscriber.pollingInterval") Integer subscriberPollingInterval, + @Named("dmaap.mr.publisher.hostname") String publisherHostName, + @Named("dmaap.mr.publisher.portNumber") Integer publisherHostPort, + @Named("dmaap.mr.publisher.topicName") String publisherTopicName, + @Named("dmaap.mr.publisher.protocol") String publisherProtocol, + @Named("dmaap.mr.publisher.username") String publisherUserName, + @Named("dmaap.mr.publisher.userPassword") String publisherUserPassword, + @Named("dmaap.mr.publisher.contentType") String publisherContentType, + @Named("dmaap.mr.publisher.pollingInterval") Integer publisherPollingInterval, + @Named("dmaap.mr.publisher.maxBatchSize") Integer publisherMaxBatchSize, + @Named("dmaap.mr.publisher.maxRecoveryQueueSize") Integer publisherMaxRecoveryQueueSize) { + this.subscriberHostName = subscriberHostName; + this.subscriberHostPort = subscriberHostPort; + this.subscriberTopicName = subscriberTopicName; + this.subscriberProtocol = subscriberProtocol; + this.subscriberUserName = subscriberUserName; + this.subscriberUserPassword = subscriberUserPassword; + this.subscriberContentType = subscriberContentType; + this.subscriberConsumerId = subscriberConsumerId; + this.subscriberConsumerGroup = subscriberConsumerGroup; + this.subscriberTimeoutMS = subscriberTimeoutMS; + this.subscriberMessageLimit = subscriberMessageLimit; + this.subscriberPollingInterval = subscriberPollingInterval; + this.publisherHostName = publisherHostName; + this.publisherHostPort = publisherHostPort; + this.publisherTopicName = publisherTopicName; + this.publisherProtocol = publisherProtocol; + this.publisherUserName = publisherUserName; + this.publisherUserPassword = publisherUserPassword; + this.publisherContentType = publisherContentType; + this.publisherPollingInterval = publisherPollingInterval; + this.publisherMaxBatchSize = publisherMaxBatchSize; + this.publisherMaxRecoveryQueueSize = publisherMaxRecoveryQueueSize; + + this.dMaaPMRFactory = DMaaPMRFactory.create(); + } + + + @Override + public DMaaPMRSubscriber getDMaaPMRSubscriber() { + final DMaaPMRSubscriberConfig subscriberConfig = + new DMaaPMRSubscriberConfig.Builder(subscriberHostName, subscriberTopicName) + .setPortNumber(subscriberHostPort) + .setProtocol(subscriberProtocol) + .setUserName(subscriberUserName) + .setUserPassword(subscriberUserPassword) + .setContentType(subscriberContentType) + .setMessageLimit(subscriberMessageLimit) + .setTimeoutMS(subscriberTimeoutMS) + .setConsumerId(subscriberConsumerId) + .setConsumerGroup(subscriberConsumerGroup) + .build(); + return dMaaPMRFactory.createSubscriber(subscriberConfig); + } + + @Override + public DMaaPMRPublisher getDMaaPMRPublisher() { + final DMaaPMRPublisherConfig publisherConfig = + new DMaaPMRPublisherConfig.Builder(publisherHostName, publisherTopicName) + .setPortNumber(publisherHostPort) + .setProtocol(publisherProtocol) + .setUserName(publisherUserName) + .setUserPassword(publisherUserPassword) + .setContentType(publisherContentType) + .setMaxBatchSize(publisherMaxBatchSize) + .setMaxRecoveryQueueSize(publisherMaxRecoveryQueueSize) + .build(); + return dMaaPMRFactory.createPublisher(publisherConfig); + } + + @Override + public DMaaPMRSubscriber getDMaaPMRSubscriberWithTopicName(String subscriberTopicName) { + final DMaaPMRSubscriberConfig subscriberConfig = + new DMaaPMRSubscriberConfig.Builder(subscriberHostName, subscriberTopicName) + .setPortNumber(subscriberHostPort) + .setProtocol(subscriberProtocol) + .setUserName(subscriberUserName) + .setUserPassword(subscriberUserPassword) + .setContentType(subscriberContentType) + .setMessageLimit(subscriberMessageLimit) + .setTimeoutMS(subscriberTimeoutMS) + .setConsumerId(subscriberConsumerId) + .setConsumerGroup(subscriberConsumerGroup) + .build(); + return dMaaPMRFactory.createSubscriber(subscriberConfig); + } + + + @Override + public DMaaPMRPublisher getDMaaPMRPublisherWithTopicName(String publisherTopicName) { + final DMaaPMRPublisherConfig publisherConfig = + new DMaaPMRPublisherConfig.Builder(publisherHostName, publisherTopicName) + .setPortNumber(publisherHostPort) + .setProtocol(publisherProtocol) + .setUserName(publisherUserName) + .setUserPassword(publisherUserPassword) + .setContentType(publisherContentType) + .setMaxBatchSize(publisherMaxBatchSize) + .setMaxRecoveryQueueSize(publisherMaxRecoveryQueueSize) + .build(); + return dMaaPMRFactory.createPublisher(publisherConfig); + } + + @Override + public Map getDMaaPMRSubscriberConfig() { + Map sourceConfigurationMap = new HashMap<>(); + sourceConfigurationMap.put("referenceName", "source-referenceName"); + sourceConfigurationMap.put("hostName", subscriberHostName); + sourceConfigurationMap.put("portNumber", subscriberHostPort.toString()); + sourceConfigurationMap.put("topicName", subscriberTopicName); + sourceConfigurationMap.put("pollingInterval", subscriberPollingInterval.toString()); + sourceConfigurationMap.put("protocol", subscriberProtocol); + sourceConfigurationMap.put("userName", subscriberUserName); + sourceConfigurationMap.put("userPassword", subscriberUserPassword); + sourceConfigurationMap.put("contentType", subscriberContentType); + sourceConfigurationMap.put("consumerId", subscriberConsumerId); + sourceConfigurationMap.put("consumerGroup", subscriberConsumerGroup); + sourceConfigurationMap.put("timeoutMS", subscriberTimeoutMS.toString()); + sourceConfigurationMap.put("messageLimit", subscriberMessageLimit.toString()); + return sourceConfigurationMap; + } + + @Override + public Map getDMaaPMRPublisherConfig() { + return null; + } +} diff --git a/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/module/AnalyticsITInjectorSource.java b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/module/AnalyticsITInjectorSource.java new file mode 100644 index 0000000..6f3b303 --- /dev/null +++ b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/module/AnalyticsITInjectorSource.java @@ -0,0 +1,41 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcae.apod.analytics.it.module; + +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Stage; +import cucumber.api.guice.CucumberModules; +import cucumber.runtime.java.guice.InjectorSource; + +/** + * Provides Injector for Analytics Integration testing + * + * @author Rajiv Singla . Creation Date: 2/1/2017. + */ +public class AnalyticsITInjectorSource implements InjectorSource { + + @Override + public Injector getInjector() { + return Guice.createInjector(Stage.PRODUCTION, CucumberModules.SCENARIO, new IntegrationTestModule()); + } + +} diff --git a/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/module/IntegrationTestModule.java b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/module/IntegrationTestModule.java new file mode 100644 index 0000000..08ddf6d --- /dev/null +++ b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/module/IntegrationTestModule.java @@ -0,0 +1,126 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcae.apod.analytics.it.module; + +import com.google.inject.Binder; +import com.google.inject.Module; +import com.google.inject.name.Names; +import org.onap.dcae.apod.analytics.common.exception.DCAEAnalyticsRuntimeException; +import org.onap.dcae.apod.analytics.it.dmaap.DMaaPMRCreator; +import org.onap.dcae.apod.analytics.it.dmaap.DMaaPMRCreatorImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; +import java.util.Properties; + +/** + * @author Rajiv Singla . Creation Date: 2/1/2017. + */ +public class IntegrationTestModule implements Module { + + private static final Logger LOG = LoggerFactory.getLogger(IntegrationTestModule.class); + + public static final String ANALYTICS_SYSTEM_VARIABLE_KEY_NAME = "analytics.it.env"; + public static final String DEFAULT_ENVIRONMENT = "dev"; + public static final String ENVIRONMENT_PROPERTIES_FILE_LOCATION = "env"; + + @Override + public void configure(Binder binder) { + final Properties envProperties = loadPropertiesFile(); + Names.bindProperties(binder, envProperties); + binder.bind(DMaaPMRCreator.class).to(DMaaPMRCreatorImpl.class); + } + + + /** + * Load environment specific properties file + * + * @return environment properties + */ + private Properties loadPropertiesFile() { + final String currentEnvironment = getCurrentEnvironment().toLowerCase(); + final String envPropertiesFileName = currentEnvironment + ".properties"; + final Properties envProperties = new Properties(); + final String fileLocation = ENVIRONMENT_PROPERTIES_FILE_LOCATION + "/" + envPropertiesFileName; + LOG.info("===>>> EFFECTIVE ENV: {}, EFFECTIVE PROPERTIES FILE: {} <<<====", currentEnvironment, fileLocation); + try { + final InputStream propertiesFileInputStream = + IntegrationTestModule.class.getClassLoader().getResourceAsStream(fileLocation); + envProperties.load(propertiesFileInputStream); + } catch (FileNotFoundException e) { + final String errorMessage = String.format("Unable to find env properties file: %s.", fileLocation); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } catch (IOException e) { + final String errorMessage = String.format("I/O Exception during loading env properties file: %s", + fileLocation); + throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); + } + + final Properties systemProperties = System.getProperties(); + for (Object envProperty : envProperties.keySet()) { + final String systemPropertyValue = systemProperties.getProperty(envProperty.toString()); + if (systemPropertyValue != null) { + LOG.info("Overriding System property name: {} with env property value: {}", + envProperty.toString(), systemPropertyValue); + envProperties.setProperty(envProperty.toString(), systemPropertyValue); + } + } + + LOG.info("Printing Effective Environment Properties =============== >>>"); + for (Map.Entry envPropertyEntry : envProperties.entrySet()) { + LOG.info("{}={}", envPropertyEntry.getKey(), envPropertyEntry.getValue()); + } + + return envProperties; + } + + + private static String getCurrentEnvironment() { + // First look in environment variables + LOG.info("Looking for IT variable name: {} in Environment variables", ANALYTICS_SYSTEM_VARIABLE_KEY_NAME); + final String itEnvironmentVariable = System.getenv(ANALYTICS_SYSTEM_VARIABLE_KEY_NAME); + if (itEnvironmentVariable != null) { + LOG.info("Found value in Environment variables: {} for IT Environment variable", itEnvironmentVariable); + return itEnvironmentVariable; + } else { + LOG.info("Unable to find IT variable name: {} in Environment variable", ANALYTICS_SYSTEM_VARIABLE_KEY_NAME); + } + + // Second look inside system properties + LOG.info("Looking for IT variable name: {} in System variables", ANALYTICS_SYSTEM_VARIABLE_KEY_NAME); + + final String itSystemProperty = System.getProperty(ANALYTICS_SYSTEM_VARIABLE_KEY_NAME); + if (itSystemProperty != null) { + LOG.info("Found value for System variables: {} in System variable", itSystemProperty); + return itSystemProperty; + } else { + LOG.info("Unable to find IT variable name: {} in System variable", ANALYTICS_SYSTEM_VARIABLE_KEY_NAME); + } + + // return default enviroment + LOG.warn("Unable to find IT environment variable. Choosing default environment: {}", DEFAULT_ENVIRONMENT); + return DEFAULT_ENVIRONMENT; + } +} diff --git a/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/plugins/BaseAnalyticsPluginsIT.java b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/plugins/BaseAnalyticsPluginsIT.java new file mode 100644 index 0000000..f8097f4 --- /dev/null +++ b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/plugins/BaseAnalyticsPluginsIT.java @@ -0,0 +1,51 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcae.apod.analytics.it.plugins; + +import co.cask.cdap.etl.mock.test.HydratorTestBase; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +import static com.google.common.collect.ImmutableList.of; + +/** + * Base class for all the Hydrator test base , where the utility and common code for integration testing is written + *

+ * @author Manjesh Gowda. Creation Date: 2/3/2017. + */ + +public abstract class BaseAnalyticsPluginsIT extends HydratorTestBase { + private static final Logger LOG = LoggerFactory.getLogger(BaseAnalyticsPluginsIT.class); + + /** + * Provides two simple messages for testing of Plugin + *

+ * + * @return + */ + protected static List getTwoSampleMessage() { + String message1 = "{ \"message\" : \"Test Message 1 from DMaaP source Plugin\"}"; + String message2 = "{ \"message\" : \"Test Message 2 from DMaaP source Plugin\"}"; + return of(message1, message2); + } +} diff --git a/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/plugins/DMaaPMRSourcePluginIT.java b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/plugins/DMaaPMRSourcePluginIT.java new file mode 100644 index 0000000..fbfac7f --- /dev/null +++ b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/plugins/DMaaPMRSourcePluginIT.java @@ -0,0 +1,204 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcae.apod.analytics.it.plugins; + +import co.cask.cdap.api.data.format.StructuredRecord; +import co.cask.cdap.api.dataset.table.Table; +import co.cask.cdap.api.plugin.PluginClass; +import co.cask.cdap.api.plugin.PluginPropertyField; +import co.cask.cdap.common.utils.Tasks; +import co.cask.cdap.datastreams.DataStreamsApp; +import co.cask.cdap.datastreams.DataStreamsSparkLauncher; +import co.cask.cdap.etl.api.streaming.StreamingSource; +import co.cask.cdap.etl.mock.batch.MockSink; +import co.cask.cdap.etl.proto.v2.DataStreamsConfig; +import co.cask.cdap.etl.proto.v2.ETLPlugin; +import co.cask.cdap.etl.proto.v2.ETLStage; +import co.cask.cdap.proto.artifact.AppRequest; +import co.cask.cdap.proto.artifact.ArtifactSummary; +import co.cask.cdap.proto.id.ApplicationId; +import co.cask.cdap.proto.id.ArtifactId; +import co.cask.cdap.proto.id.NamespaceId; +import co.cask.cdap.test.ApplicationManager; +import co.cask.cdap.test.DataSetManager; +import co.cask.cdap.test.SparkManager; +import com.google.common.base.Joiner; +import com.google.common.collect.ImmutableSet; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.dcae.apod.analytics.cdap.plugins.domain.config.dmaap.DMaaPMRSourcePluginConfig; +import org.onap.dcae.apod.analytics.cdap.plugins.streaming.dmaap.DMaaPMRReceiver; +import org.onap.dcae.apod.analytics.cdap.plugins.streaming.dmaap.DMaaPMRSource; +import org.onap.dcae.apod.analytics.it.dmaap.DMaaPMRCreator; +import org.onap.dcae.apod.analytics.it.module.AnalyticsITInjectorSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; + +/** + * Performs integration testing on DMaaP source plugin , where 2 sample messages are posted and verified + *

+ * @author Manjesh Gowda. Creation Date: 2/3/2017. + */ +public class DMaaPMRSourcePluginIT extends BaseAnalyticsPluginsIT { + + private static final Logger LOG = LoggerFactory.getLogger(DMaaPMRSourcePluginIT.class); + protected static final ArtifactId DATASTREAMS_ARTIFACT_ID = NamespaceId.DEFAULT.artifact("data-streams", "3.2.0"); + protected static final ArtifactSummary DATASTREAMS_ARTIFACT = new ArtifactSummary("data-streams", "3.2.0"); + + /** + * Streaming artifacts are added to the hydrator pipeline. Important. Make sure you explicitly add all the custom + * class that you have written in the plugin artifact, if not you will get incompatible type error + * + * @throws Exception + */ + @BeforeClass + public static void setupTest() throws Exception { + setupStreamingArtifacts(DATASTREAMS_ARTIFACT_ID, DataStreamsApp.class); + +// Set parents = ImmutableSet.of( +// new ArtifactRange(NamespaceId.DEFAULT.toId(), DATASTREAMS_ARTIFACT_ID.getArtifact(), +// new ArtifactVersion(DATASTREAMS_ARTIFACT_ID.getVersion()), true, +// new ArtifactVersion(DATASTREAMS_ARTIFACT_ID.getVersion()), true) +// ); + + ArtifactId dcaeAnalyticsCdapPluginsArtifact = NamespaceId.DEFAULT.artifact( + "dcae-analytics-cdap-plugins", "2.0-SNAPSHOT"); + addPluginArtifact(dcaeAnalyticsCdapPluginsArtifact, DATASTREAMS_ARTIFACT_ID, ImmutableSet.of(getPluginClass()), + DMaaPMRSource.class, DMaaPMRSourcePluginConfig.class, DMaaPMRReceiver.class); + +// addPluginArtifact(NamespaceId.DEFAULT.artifact("spark-plugins", "1.0.0"), parents, +// DMaaPMRSource.class, DMaaPMRReceiver.class, DMaaPMRSourcePluginConfig.class); + } + + private static PluginClass getPluginClass() { + HashMap properties = new HashMap<>(); + properties.put("referenceName", new PluginPropertyField("referenceName", "", "string", false, false)); + properties.put("hostName", new PluginPropertyField("hostName", "", "string", false, false)); + properties.put("topicName", new PluginPropertyField("topicName", "", "string", false, false)); + properties.put("protocol", new PluginPropertyField("protocol", "", "string", false, false)); + properties.put("userName", new PluginPropertyField("userName", "", "string", false, false)); + properties.put("userPassword", new PluginPropertyField("userPassword", "", "string", false, false)); + properties.put("contentType", new PluginPropertyField("contentType", "", "string", false, false)); + properties.put("consumerId", new PluginPropertyField("consumerId", "", "string", false, false)); + properties.put("consumerGroup", new PluginPropertyField("consumerGroup", "", "string", false, false)); + + properties.put("portNumber", new PluginPropertyField("portNumber", "", "long", false, false)); + properties.put("timeoutMS", new PluginPropertyField("timeoutMS", "", "long", false, false)); + properties.put("messageLimit", new PluginPropertyField("messageLimit", "", "long", false, false)); + properties.put("pollingInterval", new PluginPropertyField("pollingInterval", "", "long", false, false)); + + return new PluginClass("streamingsource", "DMaaPMRSource", "", DMaaPMRSource.class.getName(), + "pluginConfig", properties); + } + + @AfterClass + public static void cleanup() { + } + + /** + * Build a pipeline with a mock-sink. After that publish coupe of messages to the subscriber topic, and verify in + * the mock sink + * + * @throws Exception + */ + @Test + public void testDMaaPMRSourcePlugin() throws Exception { + AnalyticsITInjectorSource analyticsITInjectorSource = new AnalyticsITInjectorSource(); + + final DMaaPMRCreator dMaaPMRCreator = analyticsITInjectorSource.getInjector().getInstance(DMaaPMRCreator.class); + Map dmaapSourceProperties = dMaaPMRCreator.getDMaaPMRSubscriberConfig(); + dmaapSourceProperties.put("consumerId", UUID.randomUUID().toString().replace("-", "")); + dmaapSourceProperties.put("consumerGroup", UUID.randomUUID().toString().replace("-", "")); + final String subscriberTopicName = dmaapSourceProperties.get("topicName"); + + DataStreamsConfig dmaaPMRSourcePipeline = DataStreamsConfig.builder() + .addStage(new ETLStage("source", new ETLPlugin( + "DMaaPMRSource", StreamingSource.PLUGIN_TYPE, dmaapSourceProperties, null))) + .addStage(new ETLStage("sink", MockSink.getPlugin("dmaapOutput"))) + .addConnection("source", "sink") + .setBatchInterval("20s") + .build(); + + AppRequest appRequest = new AppRequest<>(DATASTREAMS_ARTIFACT, dmaaPMRSourcePipeline); + ApplicationId appId = NamespaceId.DEFAULT.app("DMaaPMRSourceIntegrationTestingApp"); + ApplicationManager appManager = deployApplication(appId.toId(), appRequest); + + SparkManager sparkManager = appManager.getSparkManager(DataStreamsSparkLauncher.NAME); + sparkManager.start(); + sparkManager.waitForStatus(true, 1, 100); + + final DataSetManager outputManager = getDataset("dmaapOutput"); + final List dmaapContents = new LinkedList<>(); + + // Publish message to source + + new Thread() { + @Override + public void run() { + try { + TimeUnit.MILLISECONDS.sleep(30000); + dMaaPMRCreator.getDMaaPMRPublisherWithTopicName(subscriberTopicName).publish(getTwoSampleMessage()); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }.start(); + + try { + Tasks.waitFor(true, new Callable() { + boolean initialized = false; + + @Override + public Boolean call() throws Exception { + try { + outputManager.flush(); + for (StructuredRecord record : MockSink.readOutput(outputManager)) { + dmaapContents.add((String) record.get("message")); + } + return dmaapContents.size() >= 2; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + }, + 90, TimeUnit.SECONDS); + } catch (Exception e) { + e.printStackTrace(); + } + sparkManager.stop(); + + Assert.assertTrue(dmaapContents.size() == 2); + String allMessages = Joiner.on(",").join(dmaapContents); + Assert.assertTrue(allMessages.contains("Message 1")); + Assert.assertTrue(allMessages.contains("Message 2")); + } +} diff --git a/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/util/StepUtils.java b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/util/StepUtils.java new file mode 100644 index 0000000..3de3771 --- /dev/null +++ b/dcae-analytics-it/src/test/java/org/onap/dcae/apod/analytics/it/util/StepUtils.java @@ -0,0 +1,43 @@ +/* + * ===============================LICENSE_START====================================== + * dcae-analytics + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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.dcae.apod.analytics.it.util; + +/** + * @author Rajiv Singla . Creation Date: 2/2/2017. + */ +public abstract class StepUtils { + + + /** + * Determines if step should use default publisher topic as configured in environment properties file + * + * @param topicName step passed topic name + * @return true if default publisher topic + */ + public static boolean isDefaultPublisherTopic(final String topicName) { + if (topicName.equalsIgnoreCase("default")) { + return true; + } else { + return false; + } + } + +} diff --git a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/cucumber/CucumberRunnerIT.java b/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/cucumber/CucumberRunnerIT.java deleted file mode 100644 index 83153a0..0000000 --- a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/cucumber/CucumberRunnerIT.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * ===============================LICENSE_START====================================== - * dcae-analytics - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.openecomp.dcae.apod.analytics.it.cucumber; - -import cucumber.api.CucumberOptions; -import cucumber.api.SnippetType; -import cucumber.api.junit.Cucumber; -import org.junit.runner.RunWith; - -/** - * @author Rajiv Singla . Creation Date: 2/1/2017. - */ - -@RunWith(Cucumber.class) -@CucumberOptions( - plugin = {"pretty", "json:target/cucumber/cucumber.json", "html:target/cucumber"}, - features = {"src/test/resources/cucumber/features/dmaap"}, - glue = {"org.openecomp.dcae.apod.analytics.it.cucumber.steps"}, - snippets = SnippetType.CAMELCASE -) -public class CucumberRunnerIT { -} diff --git a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/cucumber/steps/DMaaPMRSteps.java b/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/cucumber/steps/DMaaPMRSteps.java deleted file mode 100644 index c341c2a..0000000 --- a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/cucumber/steps/DMaaPMRSteps.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * ===============================LICENSE_START====================================== - * dcae-analytics - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.openecomp.dcae.apod.analytics.it.cucumber.steps; - -import com.google.inject.Inject; -import com.google.inject.name.Named; -import cucumber.api.java.en.And; -import cucumber.api.java.en.Given; -import cucumber.api.java.en.Then; -import cucumber.api.java.en.When; -import org.openecomp.dcae.apod.analytics.common.utils.HTTPUtils; -import org.openecomp.dcae.apod.analytics.dmaap.domain.response.DMaaPMRPublisherResponse; -import org.openecomp.dcae.apod.analytics.dmaap.domain.response.DMaaPMRSubscriberResponse; -import org.openecomp.dcae.apod.analytics.dmaap.service.publisher.DMaaPMRPublisher; -import org.openecomp.dcae.apod.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; -import org.openecomp.dcae.apod.analytics.it.dmaap.DMaaPMRCreator; -import org.openecomp.dcae.apod.analytics.it.util.StepUtils; -import org.openecomp.dcae.apod.analytics.test.BaseDCAEAnalyticsIT; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Arrays; -import java.util.concurrent.TimeUnit; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -/** - * @author Rajiv Singla . Creation Date: 2/1/2017. - */ -public class DMaaPMRSteps extends BaseDCAEAnalyticsIT { - - private static final Logger LOG = LoggerFactory.getLogger(DMaaPMRSteps.class); - - private final DMaaPMRCreator dMaaPMRCreator; - private final String defaultPublisherTopicName; - - private static DMaaPMRSubscriberResponse subscriberResponse; - private static String messageToPublish; - private static String fetchedMessage; - - @Inject - public DMaaPMRSteps(DMaaPMRCreator dMaaPMRCreator, - @Named("dmaap.mr.publisher.topicName") String defaultPublisherTopicName) { - this.dMaaPMRCreator = dMaaPMRCreator; - this.defaultPublisherTopicName = defaultPublisherTopicName; - } - - - @Given("^DMaaP MR Service is up$") - public void dmaapMRServiceIsUp() throws Throwable { - final DMaaPMRSubscriber subscriber = - dMaaPMRCreator.getDMaaPMRSubscriberWithTopicName(defaultPublisherTopicName); - final DMaaPMRSubscriberResponse subscriberResponse = subscriber.fetchMessages(); - assertNotNull(subscriberResponse.getResponseCode()); - assertTrue(HTTPUtils.isSuccessfulResponseCode(subscriberResponse.getResponseCode())); - LOG.info("Subscriber is able to fetch messages successfully - Verified DMaaP MR Service is UP"); - } - - @When("^I publish json message to publisher topic name \"([^\"]*)\" in file \"([^\"]*)\"$") - public void iPublishJsonMessageToPublisherTopicNameInFile(String publisherTopicName, String fileLocation) - throws Throwable { - String publisherTopic; - if (StepUtils.isDefaultPublisherTopic(publisherTopicName)) { - publisherTopic = defaultPublisherTopicName; - } else { - publisherTopic = publisherTopicName; - } - final DMaaPMRPublisher publisher = dMaaPMRCreator.getDMaaPMRPublisherWithTopicName(publisherTopic); - messageToPublish = fromStream(fileLocation); - final DMaaPMRPublisherResponse publisherResponse = publisher.publish(Arrays.asList(messageToPublish)); - LOG.info("Publisher published messages to DMaaP MR Topic - Response: {}", publisherResponse); - assertTrue(HTTPUtils.isSuccessfulResponseCode(publisherResponse.getResponseCode())); - } - - @And("^wait for \"([^\"]*)\" seconds$") - public void waitForSeconds(Integer waitInSeconds) throws Throwable { - TimeUnit.SECONDS.sleep(waitInSeconds); - LOG.info("Waking up after sleep: {} seconds", waitInSeconds); - } - - @And("^subscriber fetch message from publisher topic name \"([^\"]*)\"$") - public void fetchMessageFrom(String publisherTopicName) throws Throwable { - String publisherTopic; - if (StepUtils.isDefaultPublisherTopic(publisherTopicName)) { - publisherTopic = defaultPublisherTopicName; - } else { - publisherTopic = publisherTopicName; - } - final DMaaPMRSubscriber subscriber = dMaaPMRCreator.getDMaaPMRSubscriberWithTopicName(publisherTopic); - subscriberResponse = subscriber.fetchMessages(); - LOG.info("Subscriber fetched messages to DMaaP MR Topic - Response: {}", subscriberResponse); - assertTrue(HTTPUtils.isSuccessfulResponseCode(subscriberResponse.getResponseCode())); - } - - @And("^compare fetched json message with published message$") - public void compareFetchedJsonMessageWithPublishedMessage() throws Throwable { - - fetchedMessage = subscriberResponse.getFetchedMessages().get(0); - LOG.info("Fetched Json Message: {}", fetchedMessage); - LOG.info("Published Json Message: {}", messageToPublish); - } - - @Then("^fetched message must be same as published message$") - public void fetchedMessageMustBeSameAsPublishedMessage() throws Throwable { - assertJson(messageToPublish, fetchedMessage); - } - - - -} diff --git a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/dmaap/DMaaPMRCreator.java b/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/dmaap/DMaaPMRCreator.java deleted file mode 100644 index 12a31a5..0000000 --- a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/dmaap/DMaaPMRCreator.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * ===============================LICENSE_START====================================== - * dcae-analytics - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.openecomp.dcae.apod.analytics.it.dmaap; - -import org.openecomp.dcae.apod.analytics.dmaap.service.publisher.DMaaPMRPublisher; -import org.openecomp.dcae.apod.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; - -import java.util.Map; - -/** - * Creates DMaaP MR Publisher and Subscriber Instances for Integration Testing purposes - *

- * @author Rajiv Singla . Creation Date: 2/1/2017. - */ -public interface DMaaPMRCreator { - - /** - * Provides {@link DMaaPMRSubscriber} instance for Integration testing configured for the specific test - * environment - * - * @return DMaaP MR Subscriber instance for integration testing - */ - DMaaPMRSubscriber getDMaaPMRSubscriber(); - - - /** - * Provides {@link DMaaPMRSubscriber} instance for Integration testing configured with given topic name - * - * @param subscriberTopicName DMaaP MR Subscriber Topic Name - * @return DMaaP MR Subscriber instance which is subscriber to given subscriber topic - */ - DMaaPMRSubscriber getDMaaPMRSubscriberWithTopicName(String subscriberTopicName); - - /** - * Provides {@link DMaaPMRPublisher} instance for Integration testing configured for the specific test - * environment - * - * @return DMaaP MR Publisher instance for integration testing - */ - DMaaPMRPublisher getDMaaPMRPublisher(); - - - /** - * Provides {@link DMaaPMRPublisher} instance for Integration testing configured with given topic name - * - * @param publisherTopicName DMaaP MR publisher topic name - * @return DMaaP MR Publisher instance for integration testing - */ - DMaaPMRPublisher getDMaaPMRPublisherWithTopicName(String publisherTopicName); - - /** - * Provides a map of DMaaP subscriber config for Integration testing configured with given topic name - * - * @return Map of key-value pair of subscriber config - */ - Map getDMaaPMRSubscriberConfig(); - - /** - * Provides a map of DMaaP publisher config for Integration testing configured with given topic name - * - * @return Map of key-value pair of publisher config - */ - Map getDMaaPMRPublisherConfig(); - -} diff --git a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/dmaap/DMaaPMRCreatorImpl.java b/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/dmaap/DMaaPMRCreatorImpl.java deleted file mode 100644 index fed16ee..0000000 --- a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/dmaap/DMaaPMRCreatorImpl.java +++ /dev/null @@ -1,225 +0,0 @@ -/* - * ===============================LICENSE_START====================================== - * dcae-analytics - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.openecomp.dcae.apod.analytics.it.dmaap; - -import com.google.inject.Inject; -import com.google.inject.name.Named; -import org.openecomp.dcae.apod.analytics.dmaap.DMaaPMRFactory; -import org.openecomp.dcae.apod.analytics.dmaap.domain.config.DMaaPMRPublisherConfig; -import org.openecomp.dcae.apod.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig; -import org.openecomp.dcae.apod.analytics.dmaap.service.publisher.DMaaPMRPublisher; -import org.openecomp.dcae.apod.analytics.dmaap.service.subscriber.DMaaPMRSubscriber; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author Rajiv Singla . Creation Date: 2/1/2017. - */ -public class DMaaPMRCreatorImpl implements DMaaPMRCreator { - - private final String subscriberHostName; - - private final Integer subscriberHostPort; - - private final String subscriberTopicName; - - private final String subscriberProtocol; - - private final String subscriberUserName; - - private final String subscriberUserPassword; - - private final String subscriberContentType; - - private final String subscriberConsumerId; - - private final String subscriberConsumerGroup; - - private final Integer subscriberTimeoutMS; - - private final Integer subscriberMessageLimit; - - private final Integer subscriberPollingInterval; - - // publisher preferences - private final String publisherHostName; - - private final Integer publisherHostPort; - - private final String publisherTopicName; - - private final String publisherProtocol; - - private final String publisherUserName; - - private final String publisherUserPassword; - - private final String publisherContentType; - - private final Integer publisherPollingInterval; - - private final Integer publisherMaxBatchSize; - - private final Integer publisherMaxRecoveryQueueSize; - - - private final DMaaPMRFactory dMaaPMRFactory; - - @Inject - public DMaaPMRCreatorImpl(@Named("dmaap.mr.subscriber.hostname") String subscriberHostName, - @Named("dmaap.mr.subscriber.portNumber") Integer subscriberHostPort, - @Named("dmaap.mr.subscriber.topicName") String subscriberTopicName, - @Named("dmaap.mr.subscriber.protocol") String subscriberProtocol, - @Named("dmaap.mr.subscriber.username") String subscriberUserName, - @Named("dmaap.mr.subscriber.userPassword") String subscriberUserPassword, - @Named("dmaap.mr.subscriber.contentType") String subscriberContentType, - @Named("dmaap.mr.subscriber.consumerId") String subscriberConsumerId, - @Named("dmaap.mr.subscriber.consumerGroup") String subscriberConsumerGroup, - @Named("dmaap.mr.subscriber.timeoutMS") Integer subscriberTimeoutMS, - @Named("dmaap.mr.subscriber.messageLimit") Integer subscriberMessageLimit, - @Named("dmaap.mr.subscriber.pollingInterval") Integer subscriberPollingInterval, - @Named("dmaap.mr.publisher.hostname") String publisherHostName, - @Named("dmaap.mr.publisher.portNumber") Integer publisherHostPort, - @Named("dmaap.mr.publisher.topicName") String publisherTopicName, - @Named("dmaap.mr.publisher.protocol") String publisherProtocol, - @Named("dmaap.mr.publisher.username") String publisherUserName, - @Named("dmaap.mr.publisher.userPassword") String publisherUserPassword, - @Named("dmaap.mr.publisher.contentType") String publisherContentType, - @Named("dmaap.mr.publisher.pollingInterval") Integer publisherPollingInterval, - @Named("dmaap.mr.publisher.maxBatchSize") Integer publisherMaxBatchSize, - @Named("dmaap.mr.publisher.maxRecoveryQueueSize") Integer publisherMaxRecoveryQueueSize) { - this.subscriberHostName = subscriberHostName; - this.subscriberHostPort = subscriberHostPort; - this.subscriberTopicName = subscriberTopicName; - this.subscriberProtocol = subscriberProtocol; - this.subscriberUserName = subscriberUserName; - this.subscriberUserPassword = subscriberUserPassword; - this.subscriberContentType = subscriberContentType; - this.subscriberConsumerId = subscriberConsumerId; - this.subscriberConsumerGroup = subscriberConsumerGroup; - this.subscriberTimeoutMS = subscriberTimeoutMS; - this.subscriberMessageLimit = subscriberMessageLimit; - this.subscriberPollingInterval = subscriberPollingInterval; - this.publisherHostName = publisherHostName; - this.publisherHostPort = publisherHostPort; - this.publisherTopicName = publisherTopicName; - this.publisherProtocol = publisherProtocol; - this.publisherUserName = publisherUserName; - this.publisherUserPassword = publisherUserPassword; - this.publisherContentType = publisherContentType; - this.publisherPollingInterval = publisherPollingInterval; - this.publisherMaxBatchSize = publisherMaxBatchSize; - this.publisherMaxRecoveryQueueSize = publisherMaxRecoveryQueueSize; - - this.dMaaPMRFactory = DMaaPMRFactory.create(); - } - - - @Override - public DMaaPMRSubscriber getDMaaPMRSubscriber() { - final DMaaPMRSubscriberConfig subscriberConfig = - new DMaaPMRSubscriberConfig.Builder(subscriberHostName, subscriberTopicName) - .setPortNumber(subscriberHostPort) - .setProtocol(subscriberProtocol) - .setUserName(subscriberUserName) - .setUserPassword(subscriberUserPassword) - .setContentType(subscriberContentType) - .setMessageLimit(subscriberMessageLimit) - .setTimeoutMS(subscriberTimeoutMS) - .setConsumerId(subscriberConsumerId) - .setConsumerGroup(subscriberConsumerGroup) - .build(); - return dMaaPMRFactory.createSubscriber(subscriberConfig); - } - - @Override - public DMaaPMRPublisher getDMaaPMRPublisher() { - final DMaaPMRPublisherConfig publisherConfig = - new DMaaPMRPublisherConfig.Builder(publisherHostName, publisherTopicName) - .setPortNumber(publisherHostPort) - .setProtocol(publisherProtocol) - .setUserName(publisherUserName) - .setUserPassword(publisherUserPassword) - .setContentType(publisherContentType) - .setMaxBatchSize(publisherMaxBatchSize) - .setMaxRecoveryQueueSize(publisherMaxRecoveryQueueSize) - .build(); - return dMaaPMRFactory.createPublisher(publisherConfig); - } - - @Override - public DMaaPMRSubscriber getDMaaPMRSubscriberWithTopicName(String subscriberTopicName) { - final DMaaPMRSubscriberConfig subscriberConfig = - new DMaaPMRSubscriberConfig.Builder(subscriberHostName, subscriberTopicName) - .setPortNumber(subscriberHostPort) - .setProtocol(subscriberProtocol) - .setUserName(subscriberUserName) - .setUserPassword(subscriberUserPassword) - .setContentType(subscriberContentType) - .setMessageLimit(subscriberMessageLimit) - .setTimeoutMS(subscriberTimeoutMS) - .setConsumerId(subscriberConsumerId) - .setConsumerGroup(subscriberConsumerGroup) - .build(); - return dMaaPMRFactory.createSubscriber(subscriberConfig); - } - - - @Override - public DMaaPMRPublisher getDMaaPMRPublisherWithTopicName(String publisherTopicName) { - final DMaaPMRPublisherConfig publisherConfig = - new DMaaPMRPublisherConfig.Builder(publisherHostName, publisherTopicName) - .setPortNumber(publisherHostPort) - .setProtocol(publisherProtocol) - .setUserName(publisherUserName) - .setUserPassword(publisherUserPassword) - .setContentType(publisherContentType) - .setMaxBatchSize(publisherMaxBatchSize) - .setMaxRecoveryQueueSize(publisherMaxRecoveryQueueSize) - .build(); - return dMaaPMRFactory.createPublisher(publisherConfig); - } - - @Override - public Map getDMaaPMRSubscriberConfig() { - Map sourceConfigurationMap = new HashMap<>(); - sourceConfigurationMap.put("referenceName", "source-referenceName"); - sourceConfigurationMap.put("hostName", subscriberHostName); - sourceConfigurationMap.put("portNumber", subscriberHostPort.toString()); - sourceConfigurationMap.put("topicName", subscriberTopicName); - sourceConfigurationMap.put("pollingInterval", subscriberPollingInterval.toString()); - sourceConfigurationMap.put("protocol", subscriberProtocol); - sourceConfigurationMap.put("userName", subscriberUserName); - sourceConfigurationMap.put("userPassword", subscriberUserPassword); - sourceConfigurationMap.put("contentType", subscriberContentType); - sourceConfigurationMap.put("consumerId", subscriberConsumerId); - sourceConfigurationMap.put("consumerGroup", subscriberConsumerGroup); - sourceConfigurationMap.put("timeoutMS", subscriberTimeoutMS.toString()); - sourceConfigurationMap.put("messageLimit", subscriberMessageLimit.toString()); - return sourceConfigurationMap; - } - - @Override - public Map getDMaaPMRPublisherConfig() { - return null; - } -} diff --git a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/module/AnalyticsITInjectorSource.java b/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/module/AnalyticsITInjectorSource.java deleted file mode 100644 index ae0e8bc..0000000 --- a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/module/AnalyticsITInjectorSource.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * ===============================LICENSE_START====================================== - * dcae-analytics - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.openecomp.dcae.apod.analytics.it.module; - -import com.google.inject.Guice; -import com.google.inject.Injector; -import com.google.inject.Stage; -import cucumber.api.guice.CucumberModules; -import cucumber.runtime.java.guice.InjectorSource; - -/** - * Provides Injector for Analytics Integration testing - * - * @author Rajiv Singla . Creation Date: 2/1/2017. - */ -public class AnalyticsITInjectorSource implements InjectorSource { - - @Override - public Injector getInjector() { - return Guice.createInjector(Stage.PRODUCTION, CucumberModules.SCENARIO, new IntegrationTestModule()); - } - -} diff --git a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/module/IntegrationTestModule.java b/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/module/IntegrationTestModule.java deleted file mode 100644 index c1f8a4e..0000000 --- a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/module/IntegrationTestModule.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * ===============================LICENSE_START====================================== - * dcae-analytics - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.openecomp.dcae.apod.analytics.it.module; - -import com.google.inject.Binder; -import com.google.inject.Module; -import com.google.inject.name.Names; -import org.openecomp.dcae.apod.analytics.common.exception.DCAEAnalyticsRuntimeException; -import org.openecomp.dcae.apod.analytics.it.dmaap.DMaaPMRCreator; -import org.openecomp.dcae.apod.analytics.it.dmaap.DMaaPMRCreatorImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.Map; -import java.util.Properties; - -/** - * @author Rajiv Singla . Creation Date: 2/1/2017. - */ -public class IntegrationTestModule implements Module { - - private static final Logger LOG = LoggerFactory.getLogger(IntegrationTestModule.class); - - public static final String ANALYTICS_SYSTEM_VARIABLE_KEY_NAME = "analytics.it.env"; - public static final String DEFAULT_ENVIRONMENT = "dev"; - public static final String ENVIRONMENT_PROPERTIES_FILE_LOCATION = "env"; - - @Override - public void configure(Binder binder) { - final Properties envProperties = loadPropertiesFile(); - Names.bindProperties(binder, envProperties); - binder.bind(DMaaPMRCreator.class).to(DMaaPMRCreatorImpl.class); - } - - - /** - * Load environment specific properties file - * - * @return environment properties - */ - private Properties loadPropertiesFile() { - final String currentEnvironment = getCurrentEnvironment().toLowerCase(); - final String envPropertiesFileName = currentEnvironment + ".properties"; - final Properties envProperties = new Properties(); - final String fileLocation = ENVIRONMENT_PROPERTIES_FILE_LOCATION + "/" + envPropertiesFileName; - LOG.info("===>>> EFFECTIVE ENV: {}, EFFECTIVE PROPERTIES FILE: {} <<<====", currentEnvironment, fileLocation); - try { - final InputStream propertiesFileInputStream = - IntegrationTestModule.class.getClassLoader().getResourceAsStream(fileLocation); - envProperties.load(propertiesFileInputStream); - } catch (FileNotFoundException e) { - final String errorMessage = String.format("Unable to find env properties file: %s.", fileLocation); - throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); - } catch (IOException e) { - final String errorMessage = String.format("I/O Exception during loading env properties file: %s", - fileLocation); - throw new DCAEAnalyticsRuntimeException(errorMessage, LOG, e); - } - - final Properties systemProperties = System.getProperties(); - for (Object envProperty : envProperties.keySet()) { - final String systemPropertyValue = systemProperties.getProperty(envProperty.toString()); - if (systemPropertyValue != null) { - LOG.info("Overriding System property name: {} with env property value: {}", - envProperty.toString(), systemPropertyValue); - envProperties.setProperty(envProperty.toString(), systemPropertyValue); - } - } - - LOG.info("Printing Effective Environment Properties =============== >>>"); - for (Map.Entry envPropertyEntry : envProperties.entrySet()) { - LOG.info("{}={}", envPropertyEntry.getKey(), envPropertyEntry.getValue()); - } - - return envProperties; - } - - - private static String getCurrentEnvironment() { - // First look in environment variables - LOG.info("Looking for IT variable name: {} in Environment variables", ANALYTICS_SYSTEM_VARIABLE_KEY_NAME); - final String itEnvironmentVariable = System.getenv(ANALYTICS_SYSTEM_VARIABLE_KEY_NAME); - if (itEnvironmentVariable != null) { - LOG.info("Found value in Environment variables: {} for IT Environment variable", itEnvironmentVariable); - return itEnvironmentVariable; - } else { - LOG.info("Unable to find IT variable name: {} in Environment variable", ANALYTICS_SYSTEM_VARIABLE_KEY_NAME); - } - - // Second look inside system properties - LOG.info("Looking for IT variable name: {} in System variables", ANALYTICS_SYSTEM_VARIABLE_KEY_NAME); - - final String itSystemProperty = System.getProperty(ANALYTICS_SYSTEM_VARIABLE_KEY_NAME); - if (itSystemProperty != null) { - LOG.info("Found value for System variables: {} in System variable", itSystemProperty); - return itSystemProperty; - } else { - LOG.info("Unable to find IT variable name: {} in System variable", ANALYTICS_SYSTEM_VARIABLE_KEY_NAME); - } - - // return default enviroment - LOG.warn("Unable to find IT environment variable. Choosing default environment: {}", DEFAULT_ENVIRONMENT); - return DEFAULT_ENVIRONMENT; - } -} diff --git a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/plugins/BaseAnalyticsPluginsIT.java b/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/plugins/BaseAnalyticsPluginsIT.java deleted file mode 100644 index a052c63..0000000 --- a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/plugins/BaseAnalyticsPluginsIT.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * ===============================LICENSE_START====================================== - * dcae-analytics - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.openecomp.dcae.apod.analytics.it.plugins; - -import co.cask.cdap.etl.mock.test.HydratorTestBase; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.List; - -import static com.google.common.collect.ImmutableList.of; - -/** - * Base class for all the Hydrator test base , where the utility and common code for integration testing is written - *

- * @author Manjesh Gowda. Creation Date: 2/3/2017. - */ - -public abstract class BaseAnalyticsPluginsIT extends HydratorTestBase { - private static final Logger LOG = LoggerFactory.getLogger(BaseAnalyticsPluginsIT.class); - - /** - * Provides two simple messages for testing of Plugin - *

- * - * @return - */ - protected static List getTwoSampleMessage() { - String message1 = "{ \"message\" : \"Test Message 1 from DMaaP source Plugin\"}"; - String message2 = "{ \"message\" : \"Test Message 2 from DMaaP source Plugin\"}"; - return of(message1, message2); - } -} diff --git a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/plugins/DMaaPMRSourcePluginIT.java b/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/plugins/DMaaPMRSourcePluginIT.java deleted file mode 100644 index abffdb7..0000000 --- a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/plugins/DMaaPMRSourcePluginIT.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * ===============================LICENSE_START====================================== - * dcae-analytics - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.openecomp.dcae.apod.analytics.it.plugins; - -import co.cask.cdap.api.data.format.StructuredRecord; -import co.cask.cdap.api.dataset.table.Table; -import co.cask.cdap.api.plugin.PluginClass; -import co.cask.cdap.api.plugin.PluginPropertyField; -import co.cask.cdap.common.utils.Tasks; -import co.cask.cdap.datastreams.DataStreamsApp; -import co.cask.cdap.datastreams.DataStreamsSparkLauncher; -import co.cask.cdap.etl.api.streaming.StreamingSource; -import co.cask.cdap.etl.mock.batch.MockSink; -import co.cask.cdap.etl.proto.v2.DataStreamsConfig; -import co.cask.cdap.etl.proto.v2.ETLPlugin; -import co.cask.cdap.etl.proto.v2.ETLStage; -import co.cask.cdap.proto.artifact.AppRequest; -import co.cask.cdap.proto.artifact.ArtifactSummary; -import co.cask.cdap.proto.id.ApplicationId; -import co.cask.cdap.proto.id.ArtifactId; -import co.cask.cdap.proto.id.NamespaceId; -import co.cask.cdap.test.ApplicationManager; -import co.cask.cdap.test.DataSetManager; -import co.cask.cdap.test.SparkManager; -import com.google.common.base.Joiner; -import com.google.common.collect.ImmutableSet; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openecomp.dcae.apod.analytics.cdap.plugins.domain.config.dmaap.DMaaPMRSourcePluginConfig; -import org.openecomp.dcae.apod.analytics.cdap.plugins.streaming.dmaap.DMaaPMRReceiver; -import org.openecomp.dcae.apod.analytics.cdap.plugins.streaming.dmaap.DMaaPMRSource; -import org.openecomp.dcae.apod.analytics.it.dmaap.DMaaPMRCreator; -import org.openecomp.dcae.apod.analytics.it.module.AnalyticsITInjectorSource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.Callable; -import java.util.concurrent.TimeUnit; - -/** - * Performs integration testing on DMaaP source plugin , where 2 sample messages are posted and verified - *

- * @author Manjesh Gowda. Creation Date: 2/3/2017. - */ -public class DMaaPMRSourcePluginIT extends BaseAnalyticsPluginsIT { - - private static final Logger LOG = LoggerFactory.getLogger(DMaaPMRSourcePluginIT.class); - protected static final ArtifactId DATASTREAMS_ARTIFACT_ID = NamespaceId.DEFAULT.artifact("data-streams", "3.2.0"); - protected static final ArtifactSummary DATASTREAMS_ARTIFACT = new ArtifactSummary("data-streams", "3.2.0"); - - /** - * Streaming artifacts are added to the hydrator pipeline. Important. Make sure you explicitly add all the custom - * class that you have written in the plugin artifact, if not you will get incompatible type error - * - * @throws Exception - */ - @BeforeClass - public static void setupTest() throws Exception { - setupStreamingArtifacts(DATASTREAMS_ARTIFACT_ID, DataStreamsApp.class); - -// Set parents = ImmutableSet.of( -// new ArtifactRange(NamespaceId.DEFAULT.toId(), DATASTREAMS_ARTIFACT_ID.getArtifact(), -// new ArtifactVersion(DATASTREAMS_ARTIFACT_ID.getVersion()), true, -// new ArtifactVersion(DATASTREAMS_ARTIFACT_ID.getVersion()), true) -// ); - - ArtifactId dcaeAnalyticsCdapPluginsArtifact = NamespaceId.DEFAULT.artifact( - "dcae-analytics-cdap-plugins", "2.0-SNAPSHOT"); - addPluginArtifact(dcaeAnalyticsCdapPluginsArtifact, DATASTREAMS_ARTIFACT_ID, ImmutableSet.of(getPluginClass()), - DMaaPMRSource.class, DMaaPMRSourcePluginConfig.class, DMaaPMRReceiver.class); - -// addPluginArtifact(NamespaceId.DEFAULT.artifact("spark-plugins", "1.0.0"), parents, -// DMaaPMRSource.class, DMaaPMRReceiver.class, DMaaPMRSourcePluginConfig.class); - } - - private static PluginClass getPluginClass() { - HashMap properties = new HashMap<>(); - properties.put("referenceName", new PluginPropertyField("referenceName", "", "string", false, false)); - properties.put("hostName", new PluginPropertyField("hostName", "", "string", false, false)); - properties.put("topicName", new PluginPropertyField("topicName", "", "string", false, false)); - properties.put("protocol", new PluginPropertyField("protocol", "", "string", false, false)); - properties.put("userName", new PluginPropertyField("userName", "", "string", false, false)); - properties.put("userPassword", new PluginPropertyField("userPassword", "", "string", false, false)); - properties.put("contentType", new PluginPropertyField("contentType", "", "string", false, false)); - properties.put("consumerId", new PluginPropertyField("consumerId", "", "string", false, false)); - properties.put("consumerGroup", new PluginPropertyField("consumerGroup", "", "string", false, false)); - - properties.put("portNumber", new PluginPropertyField("portNumber", "", "long", false, false)); - properties.put("timeoutMS", new PluginPropertyField("timeoutMS", "", "long", false, false)); - properties.put("messageLimit", new PluginPropertyField("messageLimit", "", "long", false, false)); - properties.put("pollingInterval", new PluginPropertyField("pollingInterval", "", "long", false, false)); - - return new PluginClass("streamingsource", "DMaaPMRSource", "", DMaaPMRSource.class.getName(), - "pluginConfig", properties); - } - - @AfterClass - public static void cleanup() { - } - - /** - * Build a pipeline with a mock-sink. After that publish coupe of messages to the subscriber topic, and verify in - * the mock sink - * - * @throws Exception - */ - @Test - public void testDMaaPMRSourcePlugin() throws Exception { - AnalyticsITInjectorSource analyticsITInjectorSource = new AnalyticsITInjectorSource(); - - final DMaaPMRCreator dMaaPMRCreator = analyticsITInjectorSource.getInjector().getInstance(DMaaPMRCreator.class); - Map dmaapSourceProperties = dMaaPMRCreator.getDMaaPMRSubscriberConfig(); - dmaapSourceProperties.put("consumerId", UUID.randomUUID().toString().replace("-", "")); - dmaapSourceProperties.put("consumerGroup", UUID.randomUUID().toString().replace("-", "")); - final String subscriberTopicName = dmaapSourceProperties.get("topicName"); - - DataStreamsConfig dmaaPMRSourcePipeline = DataStreamsConfig.builder() - .addStage(new ETLStage("source", new ETLPlugin( - "DMaaPMRSource", StreamingSource.PLUGIN_TYPE, dmaapSourceProperties, null))) - .addStage(new ETLStage("sink", MockSink.getPlugin("dmaapOutput"))) - .addConnection("source", "sink") - .setBatchInterval("20s") - .build(); - - AppRequest appRequest = new AppRequest<>(DATASTREAMS_ARTIFACT, dmaaPMRSourcePipeline); - ApplicationId appId = NamespaceId.DEFAULT.app("DMaaPMRSourceIntegrationTestingApp"); - ApplicationManager appManager = deployApplication(appId.toId(), appRequest); - - SparkManager sparkManager = appManager.getSparkManager(DataStreamsSparkLauncher.NAME); - sparkManager.start(); - sparkManager.waitForStatus(true, 1, 100); - - final DataSetManager

outputManager = getDataset("dmaapOutput"); - final List dmaapContents = new LinkedList<>(); - - // Publish message to source - - new Thread() { - @Override - public void run() { - try { - TimeUnit.MILLISECONDS.sleep(30000); - dMaaPMRCreator.getDMaaPMRPublisherWithTopicName(subscriberTopicName).publish(getTwoSampleMessage()); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } - }.start(); - - try { - Tasks.waitFor(true, new Callable() { - boolean initialized = false; - - @Override - public Boolean call() throws Exception { - try { - outputManager.flush(); - for (StructuredRecord record : MockSink.readOutput(outputManager)) { - dmaapContents.add((String) record.get("message")); - } - return dmaapContents.size() >= 2; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - }, - 90, TimeUnit.SECONDS); - } catch (Exception e) { - e.printStackTrace(); - } - sparkManager.stop(); - - Assert.assertTrue(dmaapContents.size() == 2); - String allMessages = Joiner.on(",").join(dmaapContents); - Assert.assertTrue(allMessages.contains("Message 1")); - Assert.assertTrue(allMessages.contains("Message 2")); - } -} diff --git a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/util/StepUtils.java b/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/util/StepUtils.java deleted file mode 100644 index 45324a7..0000000 --- a/dcae-analytics-it/src/test/java/org/openecomp/dcae/apod/analytics/it/util/StepUtils.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * ===============================LICENSE_START====================================== - * dcae-analytics - * ================================================================================ - * Copyright © 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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.openecomp.dcae.apod.analytics.it.util; - -/** - * @author Rajiv Singla . Creation Date: 2/2/2017. - */ -public abstract class StepUtils { - - - /** - * Determines if step should use default publisher topic as configured in environment properties file - * - * @param topicName step passed topic name - * @return true if default publisher topic - */ - public static boolean isDefaultPublisherTopic(final String topicName) { - if (topicName.equalsIgnoreCase("default")) { - return true; - } else { - return false; - } - } - -} -- cgit 1.2.3-korg