You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zipkin.apache.org by ad...@apache.org on 2019/05/06 13:18:34 UTC
[incubator-zipkin] 02/04: Saves time by quarantining only the
dirtiest tests
This is an automated email from the ASF dual-hosted git repository.
adriancole pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-zipkin.git
commit 4f0978b8649d052136bc3f1448b9054be6256f8e
Author: Adrian Cole <ac...@pivotal.io>
AuthorDate: Mon May 6 17:36:38 2019 +0800
Saves time by quarantining only the dirtiest tests
---
.../server/internal/ITZipkinMetricsHealth.java | 47 --------
.../internal/ITZipkinMetricsHealthDirty.java | 131 +++++++++++++++++++++
2 files changed, 131 insertions(+), 47 deletions(-)
diff --git a/zipkin-server/src/test/java/zipkin2/server/internal/ITZipkinMetricsHealth.java b/zipkin-server/src/test/java/zipkin2/server/internal/ITZipkinMetricsHealth.java
index bd060b0..ab92295 100644
--- a/zipkin-server/src/test/java/zipkin2/server/internal/ITZipkinMetricsHealth.java
+++ b/zipkin-server/src/test/java/zipkin2/server/internal/ITZipkinMetricsHealth.java
@@ -33,7 +33,6 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.junit4.SpringRunner;
import zipkin.server.ZipkinServer;
import zipkin2.Span;
@@ -42,7 +41,6 @@ import zipkin2.storage.InMemoryStorage;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.springframework.test.annotation.DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD;
import static zipkin2.TestObjects.LOTS_OF_SPANS;
import static zipkin2.server.internal.ITZipkinServer.url;
@@ -52,7 +50,6 @@ import static zipkin2.server.internal.ITZipkinServer.url;
properties = "spring.config.name=zipkin-server"
)
@RunWith(SpringRunner.class)
-@DirtiesContext(classMode = BEFORE_EACH_TEST_METHOD)
public class ITZipkinMetricsHealth {
@Autowired InMemoryStorage storage;
@@ -177,46 +174,6 @@ public class ITZipkinMetricsHealth {
+ httpCount);
}
- @Test public void writeSpans_updatesMetrics() throws Exception {
- List<Span> spans = asList(LOTS_OF_SPANS[0], LOTS_OF_SPANS[1], LOTS_OF_SPANS[2]);
- byte[] body = SpanBytesEncoder.JSON_V2.encodeList(spans);
- double messagesCount =
- registry.counter("zipkin_collector.messages", "transport", "http").count();
- double bytesCount = registry.counter("zipkin_collector.bytes", "transport", "http").count();
- double spansCount = registry.counter("zipkin_collector.spans", "transport", "http").count();
- post("/api/v2/spans", body);
- post("/api/v2/spans", body);
-
- String json = getAsString("/metrics");
-
- assertThat(readDouble(json, "$.['counter.zipkin_collector.messages.http']"))
- .isEqualTo(messagesCount + 2.0);
- assertThat(readDouble(json, "$.['counter.zipkin_collector.bytes.http']"))
- .isEqualTo(bytesCount + (body.length * 2));
- assertThat(readDouble(json, "$.['gauge.zipkin_collector.message_bytes.http']"))
- .isEqualTo(body.length);
- assertThat(readDouble(json, "$.['counter.zipkin_collector.spans.http']"))
- .isEqualTo(spansCount + (spans.size() * 2));
- assertThat(readDouble(json, "$.['gauge.zipkin_collector.message_spans.http']"))
- .isEqualTo(spans.size());
- }
-
- @Test public void writeSpans_malformedUpdatesMetrics() throws Exception {
- byte[] body = {'h', 'e', 'l', 'l', 'o'};
- Double messagesCount =
- registry.counter("zipkin_collector.messages", "transport", "http").count();
- Double messagesDroppedCount =
- registry.counter("zipkin_collector.messages_dropped", "transport", "http").count();
- post("/api/v2/spans", body);
-
- String json = getAsString("/metrics");
-
- assertThat(readDouble(json, "$.['counter.zipkin_collector.messages.http']"))
- .isEqualTo(messagesCount + 1);
- assertThat(readDouble(json, "$.['counter.zipkin_collector.messages_dropped.http']"))
- .isEqualTo(messagesDroppedCount + 1);
- }
-
@Test public void readsHealth() throws Exception {
String json = getAsString("/health");
assertThat(readString(json, "$.status"))
@@ -267,10 +224,6 @@ public class ITZipkinMetricsHealth {
.build()).execute();
}
- static Double readDouble(String json, String jsonPath) {
- return JsonPath.compile(jsonPath).read(json);
- }
-
static String readString(String json, String jsonPath) {
return JsonPath.compile(jsonPath).read(json);
}
diff --git a/zipkin-server/src/test/java/zipkin2/server/internal/ITZipkinMetricsHealthDirty.java b/zipkin-server/src/test/java/zipkin2/server/internal/ITZipkinMetricsHealthDirty.java
new file mode 100644
index 0000000..3888342
--- /dev/null
+++ b/zipkin-server/src/test/java/zipkin2/server/internal/ITZipkinMetricsHealthDirty.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 zipkin2.server.internal;
+
+import com.jayway.jsonpath.JsonPath;
+import com.linecorp.armeria.server.Server;
+import io.micrometer.prometheus.PrometheusMeterRegistry;
+import java.io.IOException;
+import java.util.List;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.junit4.SpringRunner;
+import zipkin.server.ZipkinServer;
+import zipkin2.Span;
+import zipkin2.codec.SpanBytesEncoder;
+import zipkin2.storage.InMemoryStorage;
+
+import static java.util.Arrays.asList;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.springframework.test.annotation.DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD;
+import static zipkin2.TestObjects.LOTS_OF_SPANS;
+import static zipkin2.server.internal.ITZipkinServer.url;
+
+/**
+ * We cannot clear the micrometer registry easily, so we have recreate the spring context. This is
+ * extremely slow, so please only add tests that require isolation here.
+ */
+@SpringBootTest(
+ classes = ZipkinServer.class,
+ webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+ properties = "spring.config.name=zipkin-server"
+)
+@RunWith(SpringRunner.class)
+@DirtiesContext(classMode = BEFORE_EACH_TEST_METHOD)
+public class ITZipkinMetricsHealthDirty {
+
+ @Autowired InMemoryStorage storage;
+ @Autowired PrometheusMeterRegistry registry;
+ @Autowired Server server;
+
+ OkHttpClient client = new OkHttpClient.Builder().followRedirects(true).build();
+
+ @Before public void init() {
+ storage.clear();
+ }
+
+ @Test public void writeSpans_updatesMetrics() throws Exception {
+ List<Span> spans = asList(LOTS_OF_SPANS[0], LOTS_OF_SPANS[1], LOTS_OF_SPANS[2]);
+ byte[] body = SpanBytesEncoder.JSON_V2.encodeList(spans);
+ double messagesCount =
+ registry.counter("zipkin_collector.messages", "transport", "http").count();
+ double bytesCount = registry.counter("zipkin_collector.bytes", "transport", "http").count();
+ double spansCount = registry.counter("zipkin_collector.spans", "transport", "http").count();
+ post("/api/v2/spans", body);
+ post("/api/v2/spans", body);
+
+ String json = getAsString("/metrics");
+
+ assertThat(readDouble(json, "$.['counter.zipkin_collector.messages.http']"))
+ .isEqualTo(messagesCount + 2.0);
+ assertThat(readDouble(json, "$.['counter.zipkin_collector.bytes.http']"))
+ .isEqualTo(bytesCount + (body.length * 2));
+ assertThat(readDouble(json, "$.['gauge.zipkin_collector.message_bytes.http']"))
+ .isEqualTo(body.length);
+ assertThat(readDouble(json, "$.['counter.zipkin_collector.spans.http']"))
+ .isEqualTo(spansCount + (spans.size() * 2));
+ assertThat(readDouble(json, "$.['gauge.zipkin_collector.message_spans.http']"))
+ .isEqualTo(spans.size());
+ }
+
+ @Test public void writeSpans_malformedUpdatesMetrics() throws Exception {
+ byte[] body = {'h', 'e', 'l', 'l', 'o'};
+ Double messagesCount =
+ registry.counter("zipkin_collector.messages", "transport", "http").count();
+ Double messagesDroppedCount =
+ registry.counter("zipkin_collector.messages_dropped", "transport", "http").count();
+ post("/api/v2/spans", body);
+
+ String json = getAsString("/metrics");
+
+ assertThat(readDouble(json, "$.['counter.zipkin_collector.messages.http']"))
+ .isEqualTo(messagesCount + 1);
+ assertThat(readDouble(json, "$.['counter.zipkin_collector.messages_dropped.http']"))
+ .isEqualTo(messagesDroppedCount + 1);
+ }
+
+ private String getAsString(String path) throws IOException {
+ Response response = get(path);
+ assertThat(response.isSuccessful())
+ .withFailMessage(response.toString())
+ .isTrue();
+ return response.body().string();
+ }
+
+ private Response get(String path) throws IOException {
+ return client.newCall(new Request.Builder().url(url(server, path)).build()).execute();
+ }
+
+ private Response post(String path, byte[] body) throws IOException {
+ return client.newCall(new Request.Builder()
+ .url(url(server, path))
+ .post(RequestBody.create(null, body))
+ .build()).execute();
+ }
+
+ static Double readDouble(String json, String jsonPath) {
+ return JsonPath.compile(jsonPath).read(json);
+ }
+}