diff --git a/cloudfoundry/cf-manifests/httptransform-log-sink-manifest.yml b/cloudfoundry/cf-manifests/httptransform-log-sink-manifest.yml new file mode 100644 index 0000000..257bf8c --- /dev/null +++ b/cloudfoundry/cf-manifests/httptransform-log-sink-manifest.yml @@ -0,0 +1,15 @@ +--- +applications: +- name: log-sink-rabbit + host: log-sink-rabbit + memory: 2G + disk_quota: 2G + instances: 1 + path: /tmp/log-sink-rabbit.jar + env: + LOGGING_FILE: logsinkrabbit.log + MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: logfile,health,info + SPRING_CLOUD_STREAMAPP_SECURITY_ENABLED: false + SPRING_CLOUD_STREAM_BINDINGS_INPUT_DESTINATION: fromtransform +services: +- scst-rabbit diff --git a/cloudfoundry/cf-manifests/transform-processor-manifest.yml b/cloudfoundry/cf-manifests/transform-processor-manifest.yml new file mode 100644 index 0000000..990c30a --- /dev/null +++ b/cloudfoundry/cf-manifests/transform-processor-manifest.yml @@ -0,0 +1,17 @@ +--- +applications: +- name: transform-processor-rabbit + host: transform-processor-rabbit + memory: 2G + disk_quota: 2G + instances: 1 + path: /tmp/transform-processor-rabbit.jar + env: + LOGGING_FILE: transformprocessorrabbit.log + MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE: logfile,health,info + SPRING_CLOUD_STREAMAPP_SECURITY_ENABLED: false + SPRING_CLOUD_STREAM_BINDINGS_INPUT_DESTINATION: fromhttpsource + SPRING_CLOUD_STREAM_BINDINGS_OUTPUT_DESTINATION: fromtransform + TRANSFORMER_EXPRESSION: "payload.toUpperCase()" +services: +- scst-rabbit diff --git a/cloudfoundry/runCFAcceptanceTests.sh b/cloudfoundry/runCFAcceptanceTests.sh index 367c311..2861233 100755 --- a/cloudfoundry/runCFAcceptanceTests.sh +++ b/cloudfoundry/runCFAcceptanceTests.sh @@ -16,6 +16,47 @@ popd () { command popd "$@" > /dev/null } +function prepare_http_transform_log_with_rabbit_binder() { + + wget -O /tmp/http-source-rabbit.jar http://repo.spring.io/snapshot/org/springframework/cloud/stream/app/http-source-rabbit/2.1.0.BUILD-SNAPSHOT/http-source-rabbit-2.1.0.BUILD-SNAPSHOT.jar + + wget -O /tmp/transform-processor-rabbit.jar http://repo.spring.io/snapshot/org/springframework/cloud/stream/app/transform-processor-rabbit/2.1.0.BUILD-SNAPSHOT/transform-processor-rabbit-2.1.0.BUILD-SNAPSHOT.jar + + wget -O /tmp/log-sink-rabbit.jar http://repo.spring.io/snapshot/org/springframework/cloud/stream/app/log-sink-rabbit/2.1.0.BUILD-SNAPSHOT/log-sink-rabbit-2.1.0.BUILD-SNAPSHOT.jar + + if [ $6 == "skip-ssl-validation" ] + then + cf login -a $1 --skip-ssl-validation -u $2 -p $3 -o $4 -s $5 + else + cf login -a $1 -u $2 -p $3 -o $4 -s $5 + fi + + cf push -f ./cf-manifests/http-source-manifest.yml + + cf app http-source-rabbit > /tmp/http-source-route.txt + + HTTP_SOURCE_ROUTE=`grep routes /tmp/http-source-route.txt | awk '{ print $2 }'` + + FULL_HTTP_SOURCE_ROUTE=http://$HTTP_SOURCE_ROUTE + + cf push -f ./cf-manifests/transform-processor-manifest.yml + + cf app transform-processor-rabbit > /tmp/transform-processor-route.txt + + TRANSFORM_PROCESSOR_ROUTE=`grep routes /tmp/transform-processor-route.txt | awk '{ print $2 }'` + + FULL_TRANSFORM_PROCESSOR_ROUTE=http://$TRANSFORM_PROCESSOR_ROUTE + + cf push -f ./cf-manifests/httptransform-log-sink-manifest.yml + + cf app log-sink-rabbit > /tmp/httptransform-log-sink-route.txt + + HTTPTRANSFORM_LOG_SINK_ROUTE=`grep routes /tmp/httptransform-log-sink-route.txt | awk '{ print $2 }'` + + FULL_HTTPTRANSFORM_LOG_SINK_ROUTE=http://$HTTPTRANSFORM_LOG_SINK_ROUTE +} + + function prepare_http_splitter_log_with_rabbit_binder() { wget -O /tmp/http-source-rabbit.jar http://repo.spring.io/snapshot/org/springframework/cloud/stream/app/http-source-rabbit/2.1.0.BUILD-SNAPSHOT/http-source-rabbit-2.1.0.BUILD-SNAPSHOT.jar @@ -192,6 +233,40 @@ function prepare_partitioning_test_with_rabbit_binder() { SECONDS=0 +echo "Prepare artifacts for http | transform | log testing" + +prepare_http_transform_log_with_rabbit_binder $1 $2 $3 $4 $5 $6 + +pushd ../spring-cloud-stream-acceptance-tests + +../mvnw clean package -Dtest=HttpTransformLogAcceptanceTests -Dmaven.test.skip=false -Dhttp.source.route=$FULL_HTTP_SOURCE_ROUTE -Dtransform.processor.route=$FULL_TRANSFORM_PROCESSOR_ROUTE -Dlog.sink.route=$FULL_HTTPTRANSFORM_LOG_SINK_ROUTE +BUILD_RETURN_VALUE=$? + +popd + +cf stop http-source-rabbit && cf delete http-source-rabbit -f +cf stop transform-processor-rabbit && cf delete splitter-processor-rabbit -f +cf stop log-sink-rabbit && cf delete log-sink-rabbit -f + +cf logout + +rm /tmp/http-source-route.txt +rm /tmp/transform-processor-route.txt +rm /tmp/httptransform-log-sink-route.txt + +rm /tmp/http-source-rabbit.jar +rm /tmp/transform-processor-rabbit.jar +rm /tmp/log-sink-rabbit.jar + +if [ "$BUILD_RETURN_VALUE" != 0 ] +then + echo "Early exit due to test failure in ticktock tests" + duration=$SECONDS + + echo "Total time: Build took $(($duration / 60)) minutes and $(($duration % 60)) seconds to complete." + + exit $BUILD_RETURN_VALUE +fi echo "Prepare artifacts for http | splitter | log testing" @@ -210,7 +285,7 @@ cf stop log-sink-rabbit cf delete http-source-rabbit -f cf delete splitter-processor-rabbit -f -cf delete httpsplitter-log-sink-rabbit -f +cf delete log-sink-rabbit -f cf logout @@ -218,6 +293,10 @@ rm /tmp/http-source-route.txt rm /tmp/splitter-processor-route.txt rm /tmp/httpsplitter-log-sink-route.txt +rm /tmp/http-source-rabbit.jar +rm /tmp/splitter-processor-rabbit.jar +rm /tmp/log-sink-rabbit.jar + if [ "$BUILD_RETURN_VALUE" != 0 ] then echo "Early exit due to test failure in ticktock tests" @@ -250,6 +329,9 @@ cf logout rm /tmp/ticktock-time-source-route.txt rm /tmp/ticktock-log-sink-route.txt +rm /tmp/ticktock-time-source.jar +rm /tmp/ticktock-log-sink.jar + if [ "$BUILD_RETURN_VALUE" != 0 ] then echo "Early exit due to test failure in ticktock tests" @@ -283,6 +365,9 @@ cf logout rm /tmp/ticktock-time-source-route131.txt rm /tmp/ticktock-log-sink-route131.txt +rm /tmp/ticktock-time-source131.jar +rm /tmp/ticktock-log-sink131.jar + if [ "$BUILD_RETURN_VALUE" != 0 ] then echo "Early exit due to test failure in ticktock tests" @@ -312,6 +397,8 @@ cf logout rm /tmp/uppercase-route.txt +rm /tmp/uppercase-transformer-rabbit.jar + if [ "$BUILD_RETURN_VALUE" != 0 ] then echo "Early exit due to test failure in uppercase transformer" @@ -350,6 +437,9 @@ rm /tmp/part-consumer1-route.txt rm /tmp/part-consumer2-route.txt rm /tmp/part-consumer3-route.txt +rm /tmp/partitioning-producer-rabbit.jar +rm /tmp/partitioning-consumer-rabbit.jar + duration=$SECONDS echo "Cumulative Build Time Across All Tests: Build took $(($duration / 60)) minutes and $(($duration % 60)) seconds to complete." diff --git a/spring-cloud-stream-acceptance-tests/src/test/java/sample/acceptance/tests/HttpTransformLogAcceptanceTests.java b/spring-cloud-stream-acceptance-tests/src/test/java/sample/acceptance/tests/HttpTransformLogAcceptanceTests.java new file mode 100644 index 0000000..ab6e42e --- /dev/null +++ b/spring-cloud-stream-acceptance-tests/src/test/java/sample/acceptance/tests/HttpTransformLogAcceptanceTests.java @@ -0,0 +1,67 @@ +/* + * Copyright 2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package sample.acceptance.tests; + +import org.junit.Test; +import org.springframework.web.client.RestTemplate; + +import static org.junit.Assert.fail; + +/** + * @author Soby Chacko + */ +public class HttpTransformLogAcceptanceTests extends AbstractAcceptanceTests { + + @Test + public void testHttpTransformLog() { + + String httpSourceUrl = System.getProperty("http.source.route"); + String transformProcessorUrl = System.getProperty("transform.processor.route"); + String logSinkUrl = System.getProperty("log.sink.route"); + + + boolean foundLogs = waitForLogEntry("HTTP Source", httpSourceUrl, "Started HttpSource"); + if(!foundLogs) { + fail("Did not find the http source started logging message."); + } + + foundLogs = waitForLogEntry("Transform Processor", transformProcessorUrl, "Started TransformProcessor"); + if(!foundLogs) { + fail("Did not find the transform processor started logging message."); + } + + foundLogs = waitForLogEntry("Log Sink", logSinkUrl, "Started LogSink"); + if(!foundLogs) { + fail("Did not find the log sink started logging message."); + } + + RestTemplate restTemplate = new RestTemplate(); + + restTemplate.postForObject( + httpSourceUrl, + "foobar", String.class); + + verifyLogs(logSinkUrl, ": FOOBAR"); + } + + void verifyLogs(String appUrl, String textToLookfor) { + boolean foundMessage = waitForLogEntry("Log Sink", appUrl, textToLookfor); + if (!foundMessage) { + fail("Did not find the message - " + textToLookfor + " - in the logs"); + } + } +}