From f1993218783882e1be39daffa2cdd65ae92c799e Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 11 Jul 2016 15:14:21 +0200 Subject: [PATCH] Added circle.ci integration - also limited to 5 seconds awaits --- .travis.yml | 38 ------------------- README.adoc | 4 +- circle.yml | 19 ++++++++++ docs/src/main/asciidoc/README.adoc | 2 +- .../HystrixAnnotationsIntegrationTests.java | 10 +++-- .../instrument/rxjava/SleuthRxJavaTests.java | 3 +- .../scheduling/TracingOnScheduledTests.java | 7 ++-- .../web/TraceAsyncIntegrationTests.java | 3 +- .../web/TraceFilterCustomExtractorTests.java | 3 +- .../MultipleHopsIntegrationTests.java | 3 +- .../MessagingApplicationTests.java | 13 ++++--- .../java/integration/ZipkinStreamTests.java | 9 +++-- .../test/java/integration/ZipkinTests.java | 6 ++- 13 files changed, 57 insertions(+), 63 deletions(-) delete mode 100644 .travis.yml create mode 100644 circle.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index cd407138a..000000000 --- a/.travis.yml +++ /dev/null @@ -1,38 +0,0 @@ -language: java -jdk: - - oraclejdk8 -sudo: required -dist: trusty -cache: - directories: - - $HOME/.m2 -install: -- | - cat < log.log || echo "FAILED!" && grep -v '^.*Download.* http.*$' log.log && exit 1 -- './mvnw -s .settings.xml $MVN_GOAL $MVN_PROFILE -nsu -U --batch-mode -Dmaven.test.redirectTestOutputToFile=true' -env: - global: - - FEATURE_BRANCH=$(echo ${TRAVIS_BRANCH} | grep -v "master" && echo true || echo false) - - SPRING_CLOUD_BUILD=$(echo ${TRAVIS_REPO_SLUG} | grep -q "^spring-cloud/.*$" && echo true || echo false) - - MVN_GOAL=install - - VERSION=$(mvn validate | grep Building | head -1 | sed -e 's/.* //') - - MILESTONE=$(echo ${VERSION} | egrep 'M|RC' && echo true || echo false) - - MVN_PROFILE=$([ "${MILESTONE}" == "true" ] && echo -P milestone) - - TERM=dumb - diff --git a/README.adoc b/README.adoc index dd09385f2..eee6e3858 100644 --- a/README.adoc +++ b/README.adoc @@ -2,7 +2,7 @@ :jdkversion: 1.8 -image::https://api.travis-ci.org/spring-cloud/spring-cloud-sleuth.svg?branch=master[Build Status, link=https://travis-ci.org/spring-cloud/spring-cloud-sleuth] +image:https://circleci.com/gh/spring-cloud/spring-cloud-sleuth.svg?style=svg["CircleCI", link="https://circleci.com/gh/spring-cloud/spring-cloud-sleuth"] image::https://badges.gitter.im/spring-cloud/spring-cloud-sleuth.svg[Gitter, link="https://gitter.im/spring-cloud/spring-cloud-sleuth?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge"] == Spring Cloud Sleuth @@ -666,7 +666,7 @@ follow the guidelines below. === Sign the Contributor License Agreement Before we accept a non-trivial patch or pull request we will need you to sign the -https://support.springsource.com/spring_committer_signup[contributor's agreement]. +https://cla.pivotal.io/sign/spring[Contributor License Agreement]. Signing the contributor's agreement does not grant anyone commit rights to the main repository, but it does mean that we can accept your contributions, and you will get an author credit if we do. Active contributors might be asked to join the core team, and diff --git a/circle.yml b/circle.yml new file mode 100644 index 000000000..39bcd9bd1 --- /dev/null +++ b/circle.yml @@ -0,0 +1,19 @@ +machine: + java: + version: oraclejdk8 + environment: + _JAVA_OPTIONS: "-Xms1024m -Xmx2048m" +dependencies: + override: + - ./mvnw -s .settings.xml --fail-never dependency:go-offline || true +test: + override: + - ./mvnw -s .settings.xml clean install -nsu --batch-mode -Dmaven.test.redirectTestOutputToFile=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn + post: + - mkdir -p $CIRCLE_TEST_REPORTS/junit/ + - find . -type f -regex ".*/target/.*-reports/.*xml" -exec cp {} $CIRCLE_TEST_REPORTS/junit/ \ +notify: + webhooks: + # A list of hook hashes, containing the url field + # gitter hook + - url: https://webhooks.gitter.im/e/fac69f6fc000ef14f7ec \ No newline at end of file diff --git a/docs/src/main/asciidoc/README.adoc b/docs/src/main/asciidoc/README.adoc index b5bd95eea..158864bd0 100644 --- a/docs/src/main/asciidoc/README.adoc +++ b/docs/src/main/asciidoc/README.adoc @@ -1,6 +1,6 @@ :jdkversion: 1.8 -image::https://api.travis-ci.org/spring-cloud/spring-cloud-sleuth.svg?branch=master[Build Status, link=https://travis-ci.org/spring-cloud/spring-cloud-sleuth] +image:https://circleci.com/gh/spring-cloud/spring-cloud-sleuth.svg?style=svg["CircleCI", link="https://circleci.com/gh/spring-cloud/spring-cloud-sleuth"] image::https://badges.gitter.im/spring-cloud/spring-cloud-sleuth.svg[Gitter, link="https://gitter.im/spring-cloud/spring-cloud-sleuth?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge"] == Spring Cloud Sleuth diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/HystrixAnnotationsIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/HystrixAnnotationsIntegrationTests.java index 11dd80608..fe13cb34f 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/HystrixAnnotationsIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/HystrixAnnotationsIntegrationTests.java @@ -16,9 +16,12 @@ package org.springframework.cloud.sleuth.instrument.hystrix; +import java.util.concurrent.atomic.AtomicReference; + import com.jayway.awaitility.Awaitility; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import com.netflix.hystrix.strategy.HystrixPlugins; + import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -38,8 +41,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import java.util.concurrent.atomic.AtomicReference; - +import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.BDDAssertions.then; import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; @@ -89,7 +91,7 @@ public class HystrixAnnotationsIntegrationTests { private void thenSpanInHystrixThreadIsContinued(final Span span) { then(span).isNotNull(); - Awaitility.await().until(new Runnable() { + Awaitility.await().atMost(5, SECONDS).until(new Runnable() { @Override public void run() { then(HystrixAnnotationsIntegrationTests.this.catcher).isNotNull(); @@ -103,7 +105,7 @@ public class HystrixAnnotationsIntegrationTests { } private void thenSpanInHystrixThreadIsCreated() { - Awaitility.await().until(new Runnable() { + Awaitility.await().atMost(5, SECONDS).until(new Runnable() { @Override public void run() { then(HystrixAnnotationsIntegrationTests.this.catcher.getSpan()) diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/rxjava/SleuthRxJavaTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/rxjava/SleuthRxJavaTests.java index d9618e0eb..2518507f0 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/rxjava/SleuthRxJavaTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/rxjava/SleuthRxJavaTests.java @@ -29,6 +29,7 @@ import rx.plugins.RxJavaPlugins; import rx.schedulers.Schedulers; import static com.jayway.awaitility.Awaitility.await; +import static java.util.concurrent.TimeUnit.SECONDS; import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; @RunWith(SpringJUnit4ClassRunner.class) @@ -65,7 +66,7 @@ public class SleuthRxJavaTests { then(this.caller.toString()).isEqualTo("actual_action"); then(this.tracer.getCurrentSpan()).isNull(); - await().until(() -> then(this.listener.getEvents()).hasSize(1)); + await().atMost(5, SECONDS).until(() -> then(this.listener.getEvents()).hasSize(1)); then(this.listener.getEvents().get(0)).hasNameEqualTo("rxjava"); then(this.listener.getEvents().get(0)).isExportable(); then(this.listener.getEvents().get(0)).hasATag(Span.SPAN_LOCAL_COMPONENT_TAG_NAME, "rxjava"); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TracingOnScheduledTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TracingOnScheduledTests.java index 9ae6ac763..73844a044 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TracingOnScheduledTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TracingOnScheduledTests.java @@ -33,6 +33,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import static com.jayway.awaitility.Awaitility.await; +import static java.util.concurrent.TimeUnit.SECONDS; import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; @RunWith(SpringJUnit4ClassRunner.class) @@ -44,18 +45,18 @@ public class TracingOnScheduledTests { @Test public void should_have_span_set_after_scheduled_method_has_been_executed() { - await().until(spanIsSetOnAScheduledMethod()); + await().atMost(5, SECONDS).until(spanIsSetOnAScheduledMethod()); } @Test public void should_have_a_new_span_set_each_time_a_scheduled_method_has_been_executed() { Span firstSpan = this.beanWithScheduledMethod.getSpan(); - await().until(differentSpanHasBeenSetThan(firstSpan)); + await().atMost(5, SECONDS).until(differentSpanHasBeenSetThan(firstSpan)); } @Test public void should_not_span_in_the_scheduled_class_that_matches_skip_pattern() throws Exception { - await().untilAtomic(this.beanWithScheduledMethodToBeIgnored.isExecuted(), Matchers.is(true)); + await().atMost(5, SECONDS).untilAtomic(this.beanWithScheduledMethodToBeIgnored.isExecuted(), Matchers.is(true)); then(this.beanWithScheduledMethodToBeIgnored.getSpan()).isNull(); } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceAsyncIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceAsyncIntegrationTests.java index ba2003122..ab7435380 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceAsyncIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceAsyncIntegrationTests.java @@ -21,6 +21,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import static java.util.concurrent.TimeUnit.SECONDS; import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; @RunWith(SpringJUnit4ClassRunner.class) @@ -49,7 +50,7 @@ public class TraceAsyncIntegrationTests { } private void thenTraceIdIsPassedFromTheCurrentThreadToTheAsyncOne(final Span span) { - Awaitility.await().until(new Runnable() { + Awaitility.await().atMost(5, SECONDS).until(new Runnable() { @Override public void run() { then(TraceAsyncIntegrationTests.this.classPerformingAsyncLogic.getSpan()) diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterCustomExtractorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterCustomExtractorTests.java index 652d961fa..cdbd0b7a9 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterCustomExtractorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterCustomExtractorTests.java @@ -53,6 +53,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import static com.jayway.awaitility.Awaitility.await; +import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.BDDAssertions.then; import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; @@ -86,7 +87,7 @@ public class TraceFilterCustomExtractorTests { ResponseEntity responseHeaders = this.restTemplate.exchange(requestEntity, Map.class); - await().until(() -> then(this.accumulator.getSpans().stream().filter( + await().atMost(5, SECONDS).until(() -> then(this.accumulator.getSpans().stream().filter( span -> span.getSpanId() == spanId).findFirst().get()) .hasTraceIdEqualTo(traceId)); then(responseHeaders.getBody()) diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/multiple/MultipleHopsIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/multiple/MultipleHopsIntegrationTests.java index 537a0a56f..6ce92052e 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/multiple/MultipleHopsIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/multiple/MultipleHopsIntegrationTests.java @@ -22,6 +22,7 @@ import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; import static com.jayway.awaitility.Awaitility.await; import static java.util.Arrays.asList; +import static java.util.concurrent.TimeUnit.SECONDS; import static java.util.stream.Collectors.toList; import static org.assertj.core.api.BDDAssertions.then; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -46,7 +47,7 @@ public class MultipleHopsIntegrationTests extends AbstractMvcIntegrationTest { this.mockMvc.perform(get("/greeting")).andExpect( MockMvcResultMatchers.status().isOk()); - await().until(() -> { + await().atMost(5, SECONDS).until(() -> { then(this.arrayListSpanAccumulator.getSpans().stream().map(Span::getName) .collect( toList())).containsAll(asList("http:/greeting", "message:greetings", diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-messaging/src/test/java/integration/MessagingApplicationTests.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-messaging/src/test/java/integration/MessagingApplicationTests.java index 81f5174e0..fced589fa 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-messaging/src/test/java/integration/MessagingApplicationTests.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-messaging/src/test/java/integration/MessagingApplicationTests.java @@ -41,6 +41,7 @@ import tools.AbstractIntegrationTest; import zipkin.Constants; import zipkin.Span; +import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.BDDAssertions.then; @RunWith(SpringJUnit4ClassRunner.class) @@ -63,9 +64,9 @@ public class MessagingApplicationTests extends AbstractIntegrationTest { public void should_have_passed_trace_id_when_message_is_about_to_be_sent() { long traceId = new Random().nextLong(); - await().until(httpMessageWithTraceIdInHeadersIsSuccessfullySent(sampleAppUrl + "/", traceId)); + await().atMost(5, SECONDS).until(httpMessageWithTraceIdInHeadersIsSuccessfullySent(sampleAppUrl + "/", traceId)); - await().until(() -> { + await().atMost(5, SECONDS).until(() -> { thenAllSpansHaveTraceIdEqualTo(traceId); }); } @@ -75,9 +76,9 @@ public class MessagingApplicationTests extends AbstractIntegrationTest { long traceId = new Random().nextLong(); long spanId = new Random().nextLong(); - await().until(httpMessageWithTraceIdInHeadersIsSuccessfullySent(sampleAppUrl + "/", traceId, spanId)); + await().atMost(5, SECONDS).until(httpMessageWithTraceIdInHeadersIsSuccessfullySent(sampleAppUrl + "/", traceId, spanId)); - await().until(() -> { + await().atMost(5, SECONDS).until(() -> { thenAllSpansHaveTraceIdEqualTo(traceId); thenTheSpansHaveProperParentStructure(); }); @@ -87,9 +88,9 @@ public class MessagingApplicationTests extends AbstractIntegrationTest { public void should_have_passed_trace_id_with_annotations_in_async_thread_when_message_is_about_to_be_sent() { long traceId = new Random().nextLong(); - await().until(httpMessageWithTraceIdInHeadersIsSuccessfullySent(sampleAppUrl + "/xform", traceId)); + await().atMost(5, SECONDS).until(httpMessageWithTraceIdInHeadersIsSuccessfullySent(sampleAppUrl + "/xform", traceId)); - await().until(() -> { + await().atMost(5, SECONDS).until(() -> { thenAllSpansHaveTraceIdEqualTo(traceId); thenThereIsAtLeastOneBinaryAnnotationWithKey("background-sleep-millis"); }); diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/integration/ZipkinStreamTests.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/integration/ZipkinStreamTests.java index ad4c4d4f5..dfcf707c0 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/integration/ZipkinStreamTests.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/integration/ZipkinStreamTests.java @@ -18,7 +18,6 @@ package integration; import java.util.Collections; import java.util.Random; -import example.ZipkinStreamServerApplication; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -37,8 +36,12 @@ import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import example.ZipkinStreamServerApplication; import tools.AbstractIntegrationTest; +import static java.util.concurrent.TimeUnit.SECONDS; + @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = { TestSupportBinderAutoConfiguration.class, ZipkinStreamServerApplication.class }) @@ -57,7 +60,7 @@ public class ZipkinStreamTests extends AbstractIntegrationTest { @Before public void setup() { - await().until(zipkinServerIsUp()); + await().atMost(5, SECONDS).until(zipkinServerIsUp()); } @Test @@ -67,7 +70,7 @@ public class ZipkinStreamTests extends AbstractIntegrationTest { this.input.send(messageWithSpan(span)); - await().until(allSpansWereRegisteredInZipkinWithTraceIdEqualTo(this.traceId)); + await().atMost(5, SECONDS).until(allSpansWereRegisteredInZipkinWithTraceIdEqualTo(this.traceId)); } private Message messageWithSpan(Span span) { diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/test/java/integration/ZipkinTests.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/test/java/integration/ZipkinTests.java index e82565de5..e0b80935e 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/test/java/integration/ZipkinTests.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/test/java/integration/ZipkinTests.java @@ -40,6 +40,8 @@ import tools.AbstractIntegrationTest; import zipkin.junit.ZipkinRule; import zipkin.server.EnableZipkinServer; +import static java.util.concurrent.TimeUnit.SECONDS; + @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = { WaitUntilZipkinIsUpConfig.class, SampleZipkinApplication.class }) @@ -67,10 +69,10 @@ public class ZipkinTests extends AbstractIntegrationTest { public void should_propagate_spans_to_zipkin() { long traceId = new Random().nextLong(); - await().until(httpMessageWithTraceIdInHeadersIsSuccessfullySent( + await().atMost(5, SECONDS).until(httpMessageWithTraceIdInHeadersIsSuccessfullySent( this.sampleAppUrl + "/hi2", traceId)); - await().until(allSpansWereRegisteredInZipkinWithTraceIdEqualTo(traceId)); + await().atMost(5, SECONDS).until(allSpansWereRegisteredInZipkinWithTraceIdEqualTo(traceId)); } @Override