Skip to content

Commit

Permalink
Add simple conformance test that builds the old gencode against the c…
Browse files Browse the repository at this point in the history
…urrent runtime.

PiperOrigin-RevId: 631486123
  • Loading branch information
protobuf-github-bot authored and zhangskz committed Jun 17, 2024
1 parent 6c6f514 commit 9cfb59b
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 0 deletions.
15 changes: 15 additions & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -225,3 +225,18 @@ crates_repository(

load("@crate_index//:defs.bzl", "crate_repositories")
crate_repositories()

# For testing runtime against old gencode from a previous major version.
http_archive(
name = "com_google_protobuf_v25.0",
strip_prefix = "protobuf-25.0",
url = "https://github.com/protocolbuffers/protobuf/releases/download/v25.0/protobuf-25.0.tar.gz",
)

# Needed as a dependency of @com_google_protobuf_v25.x, which was before
# utf8_range was merged in.
http_archive(
name = "utf8_range",
strip_prefix = "utf8_range-d863bc33e15cba6d873c878dcca9e6fe52b2f8cb",
url = "https://github.com/protocolbuffers/utf8_range/archive/d863bc33e15cba6d873c878dcca9e6fe52b2f8cb.zip",
)
20 changes: 20 additions & 0 deletions compatibility/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Simple build tests for compatibility of gencode from previous major versions
# with the current runtime.
#
# To add more test cases in Java, use java_runtime_conformance as below, and add
# the corresponding http_archive in the WORKSPACE file for the version.

load("//compatibility:runtime_conformance.bzl", "java_runtime_conformance")

# main gencode builds with main runtime as a proof of concept.
java_runtime_conformance(
name = "java_conformance_main",
gencode_version = "main",
)

# Generates a build_test named "conformance_v3.25.0"
java_runtime_conformance(
name = "java_conformance_v3.25.0",
gencode_version = "3.25.0",
tags = ["manual"],
)
53 changes: 53 additions & 0 deletions compatibility/runtime_conformance.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
"""Provides a rule to generate a conformance test for a given version of the gencode."""

load("@bazel_skylib//rules:build_test.bzl", "build_test")

def java_runtime_conformance(name, gencode_version, tags = []):
"""Generates a conformance test for the given version of the runtime.
For example, runtime_conformance("3.19.4") will generate a build test named "conformance_v3.19.4"
that will fail if the runtime at that version fails to compile the unittest proto.
Args:
name: The name of the test.
gencode_version: The version of the runtime to test.
tags: Any tags to apply to the generated test.
"""

if gencode_version == "main":
protoc = "//:protoc"
else:
minor = gencode_version[gencode_version.find(".") + 1:]
protoc = Label("@com_google_protobuf_v%s//:protoc" % minor)

gencode = [
"v%s/protobuf_unittest/UnittestProto.java" % gencode_version,
"v%s/com/google/protobuf/test/UnittestImport.java" % gencode_version,
"v%s/com/google/protobuf/test/UnittestImportPublic.java" % gencode_version,
]
native.genrule(
name = "unittest_proto_gencode_v" + gencode_version,
srcs = [
"//src/google/protobuf:unittest_proto_srcs",
],
outs = gencode,
cmd = "$(location %s) " % protoc +
"$(locations //src/google/protobuf:unittest_proto_srcs) " +
" -Isrc/ --java_out=$(@D)/v%s" % gencode_version,
tools = [protoc],
)

conformance_name = "conformance_v" + gencode_version
conformance_lib_name = conformance_name + "_lib"
native.java_library(
name = conformance_lib_name,
srcs = gencode,
deps = ["//java/core"],
tags = tags,
)

build_test(
name = name,
targets = [":" + conformance_lib_name],
tags = tags,
)
10 changes: 10 additions & 0 deletions src/google/protobuf/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -840,6 +840,16 @@ filegroup(
visibility = ["//:__subpackages__"],
)

filegroup(
name = "unittest_proto_srcs",
srcs = [
"unittest.proto",
"unittest_import.proto",
"unittest_import_public.proto",
],
visibility = ["//:__subpackages__"],
)

filegroup(
name = "test_proto_editions_srcs",
srcs = [
Expand Down

0 comments on commit 9cfb59b

Please sign in to comment.