From 0471d0cad4d086449760cb10e0e2d72af7e7e4ce Mon Sep 17 00:00:00 2001 From: Marco Miller Date: Fri, 13 Nov 2020 16:32:53 -0500 Subject: [PATCH] Upgrade testcontainers to 1.15.0 Add the transitive docker-java and jackson-annotations elastic tests dependencies resulting from this upgrade. Fix the related "compatible substitute" issue in ElasticContainer. Without this companion fix, this change fails its tests because of this: "(...) org.junit.AssumptionViolatedException: Unable to start container (...) Caused by: java.lang.IllegalStateException: Failed to verify that image 'blacktop/elasticsearch:6.8.9' is a compatible substitute for 'docker.elastic.co/elasticsearch/elasticsearch'. This generally means that you are trying to use an image that Testcontainers has not been designed to use. If this is deliberate, and if you are confident that the image is compatible, you should declare compatibility in code using the `asCompatibleSubstituteFor` method. For example: DockerImageName myImage = DockerImageName.parse("blacktop/elasticsearch:6.8.9") .asCompatibleSubstituteFor("docker.elastic.co/elasticsearch/elasticsearch"); and then use `myImage` instead." Bug: Issue 13474 Change-Id: Ifc3e5b51cc0564262d231f3ef4b753891335e974 --- .../com/google/gerrit/elasticsearch/BUILD | 3 ++ .../elasticsearch/ElasticContainer.java | 5 +++- lib/jackson/BUILD | 8 ++++++ lib/nongoogle_test.sh | 3 ++ lib/testcontainers/BUILD | 16 +++++++++++ tools/nongoogle.bzl | 28 +++++++++++++++++-- 6 files changed, 59 insertions(+), 4 deletions(-) diff --git a/javatests/com/google/gerrit/elasticsearch/BUILD b/javatests/com/google/gerrit/elasticsearch/BUILD index b6575450e2..744a946b46 100644 --- a/javatests/com/google/gerrit/elasticsearch/BUILD +++ b/javatests/com/google/gerrit/elasticsearch/BUILD @@ -17,9 +17,12 @@ java_library( "//lib:junit", "//lib/guice", "//lib/httpcomponents:httpcore", + "//lib/jackson:jackson-annotations", "//lib/jgit/org.eclipse.jgit:jgit", "//lib/log:api", "//lib/testcontainers", + "//lib/testcontainers:docker-java-api", + "//lib/testcontainers:docker-java-transport", "//lib/testcontainers:testcontainers-elasticsearch", ], ) diff --git a/javatests/com/google/gerrit/elasticsearch/ElasticContainer.java b/javatests/com/google/gerrit/elasticsearch/ElasticContainer.java index 15094fdd1e..631c428f83 100644 --- a/javatests/com/google/gerrit/elasticsearch/ElasticContainer.java +++ b/javatests/com/google/gerrit/elasticsearch/ElasticContainer.java @@ -19,6 +19,7 @@ import org.junit.AssumptionViolatedException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testcontainers.elasticsearch.ElasticsearchContainer; +import org.testcontainers.utility.DockerImageName; /* Helper class for running ES integration tests in docker container */ public class ElasticContainer extends ElasticsearchContainer { @@ -65,7 +66,9 @@ public class ElasticContainer extends ElasticsearchContainer { } private ElasticContainer(ElasticVersion version) { - super(getImageName(version)); + super( + DockerImageName.parse(getImageName(version)) + .asCompatibleSubstituteFor("docker.elastic.co/elasticsearch/elasticsearch")); } @Override diff --git a/lib/jackson/BUILD b/lib/jackson/BUILD index 3eed77ad6e..64f0076e49 100644 --- a/lib/jackson/BUILD +++ b/lib/jackson/BUILD @@ -1,5 +1,13 @@ load("@rules_java//java:defs.bzl", "java_library") +java_library( + name = "jackson-annotations", + testonly = True, + data = ["//lib:LICENSE-Apache2.0"], + visibility = ["//visibility:public"], + exports = ["@jackson-annotations//jar"], +) + java_library( name = "jackson-core", data = ["//lib:LICENSE-Apache2.0"], diff --git a/lib/nongoogle_test.sh b/lib/nongoogle_test.sh index 492c603a29..37e7cb72bd 100755 --- a/lib/nongoogle_test.sh +++ b/lib/nongoogle_test.sh @@ -12,6 +12,8 @@ grep 'name = "[^"]*"' ${bzl} | sed 's|^[^"]*"||g;s|".*$||g' | sort > $TMP/names cat << EOF > $TMP/want cglib-3_2 +docker-java-api +docker-java-transport dropwizard-core duct-tape eddsa @@ -19,6 +21,7 @@ elasticsearch-rest-client httpasyncclient httpcore-nio j2objc +jackson-annotations jackson-core javassist jna diff --git a/lib/testcontainers/BUILD b/lib/testcontainers/BUILD index a37b733f25..693a386b40 100644 --- a/lib/testcontainers/BUILD +++ b/lib/testcontainers/BUILD @@ -1,5 +1,21 @@ load("@rules_java//java:defs.bzl", "java_library") +java_library( + name = "docker-java-api", + testonly = True, + data = ["//lib:LICENSE-Apache2.0"], + visibility = ["//visibility:public"], + exports = ["@docker-java-api//jar"], +) + +java_library( + name = "docker-java-transport", + testonly = True, + data = ["//lib:LICENSE-Apache2.0"], + visibility = ["//visibility:public"], + exports = ["@docker-java-transport//jar"], +) + java_library( name = "duct-tape", testonly = True, diff --git a/tools/nongoogle.bzl b/tools/nongoogle.bzl index 468eac2507..73a3613241 100644 --- a/tools/nongoogle.bzl +++ b/tools/nongoogle.bzl @@ -162,18 +162,40 @@ def declare_nongoogle_deps(): sha1 = "3e83394258ae2089be7219b971ec21a8288528ad", ) - TESTCONTAINERS_VERSION = "1.14.2" + DOCKER_JAVA_VERS = "3.2.5" + + maven_jar( + name = "docker-java-api", + artifact = "com.github.docker-java:docker-java-api:" + DOCKER_JAVA_VERS, + sha1 = "8fe5c5e39f940ce58620e77cedc0a2a52d76f9d8", + ) + + maven_jar( + name = "docker-java-transport", + artifact = "com.github.docker-java:docker-java-transport:" + DOCKER_JAVA_VERS, + sha1 = "27af0ee7ebc2f5672e23ea64769497b5d55ce3ac", + ) + + # https://github.com/docker-java/docker-java/blob/3.2.5/pom.xml#L61 + # <=> DOCKER_JAVA_VERS + maven_jar( + name = "jackson-annotations", + artifact = "com.fasterxml.jackson.core:jackson-annotations:2.10.3", + sha1 = "0f63b3b1da563767d04d2e4d3fc1ae0cdeffebe7", + ) + + TESTCONTAINERS_VERSION = "1.15.0" maven_jar( name = "testcontainers", artifact = "org.testcontainers:testcontainers:" + TESTCONTAINERS_VERSION, - sha1 = "d74bc045fb5f30988b0adff20244412972a9f564", + sha1 = "b627535b444d88e7b14953bb953d80d9b7b3bd76", ) maven_jar( name = "testcontainers-elasticsearch", artifact = "org.testcontainers:elasticsearch:" + TESTCONTAINERS_VERSION, - sha1 = "66e1a6da0362beee83673b877c9c2e0536d6912c", + sha1 = "2bd79fd915e5c7bcf9b5d86cd8e0b7a0fff4b8ce", ) maven_jar(