From 7c7787998b164ceb55472c0d06c083a835e5d000 Mon Sep 17 00:00:00 2001 From: Mattie Fu Date: Fri, 15 Jul 2022 17:26:20 -0400 Subject: [PATCH] fix: enable integration test for google-cloud-bigtable-stats (#1311) * fix: enable integration test for graal * update * add more comments --- .../cloud/bigtable/stats/StatsWrapper.java | 19 ++++++++++++++- ...t.java => ITBuiltinViewConstantsTest.java} | 23 +++++++++---------- .../stats/StatsRecorderWrapperTest.java | 7 ++++++ 3 files changed, 36 insertions(+), 13 deletions(-) rename google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/{BuiltinViewConstantsTest.java => ITBuiltinViewConstantsTest.java} (59%) diff --git a/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/StatsWrapper.java b/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/StatsWrapper.java index c30dba6e6c..401a1cf975 100644 --- a/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/StatsWrapper.java +++ b/google-cloud-bigtable-stats/src/main/java/com/google/cloud/bigtable/stats/StatsWrapper.java @@ -20,7 +20,10 @@ import com.google.api.core.InternalApi; import com.google.api.gax.tracing.SpanName; import io.opencensus.stats.Stats; +import io.opencensus.stats.View; +import io.opencensus.tags.TagKey; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -31,7 +34,6 @@ */ @InternalApi("For internal use only") public class StatsWrapper { - public static StatsRecorderWrapper createRecorder( OperationType operationType, SpanName spanName, Map statsAttributes) { return new StatsRecorderWrapper( @@ -49,4 +51,19 @@ public static List getOperationLatencyViewTagValueStrings() { .map(x -> x.asString()) .collect(Collectors.toCollection(ArrayList::new)); } + + // A workaround to run ITBuiltinViewConstantsTest as integration test. Integration test runs after + // the packaging step. Opencensus classes will be relocated when they are packaged but the + // integration test files will not be. So the integration tests can't reference any transitive + // dependencies that have been relocated. + static Map> getViewToTagMap() { + Map> map = new HashMap<>(); + for (View view : BuiltinViews.BIGTABLE_BUILTIN_VIEWS) { + List tagKeys = view.getColumns(); + map.put( + view.getName().asString(), + tagKeys.stream().map(tagKey -> tagKey.getName()).collect(Collectors.toList())); + } + return map; + } } diff --git a/google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/BuiltinViewConstantsTest.java b/google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/ITBuiltinViewConstantsTest.java similarity index 59% rename from google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/BuiltinViewConstantsTest.java rename to google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/ITBuiltinViewConstantsTest.java index a7d20f6da1..9b486f919f 100644 --- a/google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/BuiltinViewConstantsTest.java +++ b/google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/ITBuiltinViewConstantsTest.java @@ -17,23 +17,22 @@ import static com.google.common.truth.Truth.assertWithMessage; -import io.opencensus.stats.View; +import java.util.List; +import java.util.Map; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; -public class BuiltinViewConstantsTest { +@RunWith(JUnit4.class) +public class ITBuiltinViewConstantsTest { @Test public void testBasicTagsExistForAllViews() { - for (View v : BuiltinViews.BIGTABLE_BUILTIN_VIEWS) { - assertWithMessage(v.getName() + " should have all basic tags") - .that(v.getColumns()) + Map> viewToTagMap = StatsWrapper.getViewToTagMap(); + for (String view : viewToTagMap.keySet()) { + assertWithMessage(view + " should have all basic tags") + .that(viewToTagMap.get(view)) .containsAtLeast( - BuiltinMeasureConstants.PROJECT_ID, - BuiltinMeasureConstants.INSTANCE_ID, - BuiltinMeasureConstants.APP_PROFILE, - BuiltinMeasureConstants.METHOD, - BuiltinMeasureConstants.ZONE, - BuiltinMeasureConstants.CLUSTER, - BuiltinMeasureConstants.TABLE); + "project_id", "instance_id", "app_profile", "method", "zone", "cluster", "table"); } } } diff --git a/google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/StatsRecorderWrapperTest.java b/google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/StatsRecorderWrapperTest.java index ed67472623..abf00e71b3 100644 --- a/google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/StatsRecorderWrapperTest.java +++ b/google-cloud-bigtable-stats/src/test/java/com/google/cloud/bigtable/stats/StatsRecorderWrapperTest.java @@ -34,7 +34,14 @@ import java.util.Objects; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +// Can only be run as a unit test. Opencensus classes will be relocated when they are packaged but +// the integration test files will not be. So the integration tests can't reference any transitive +// dependencies that have been relocated. To work around this, we'll have to move all the reference +// to opencensus to StatsWrapper. +@RunWith(JUnit4.class) public class StatsRecorderWrapperTest { private final String PROJECT_ID = "fake-project";