From 5239fe687ffa943747a8f60458711e388a9da220 Mon Sep 17 00:00:00 2001 From: Googler Date: Thu, 23 May 2024 05:47:44 -0700 Subject: [PATCH] Split out serialization/testutils/RoundTripping from testutils/TestUtils. PiperOrigin-RevId: 636520733 Change-Id: Ie68adc32de5ceb0cc0e4e9a8ccaa526118d0ec03 --- .../testutils/AbstractObjectCodecTest.java | 7 +- .../skyframe/serialization/testutils/BUILD | 12 ++ .../testutils/ObjectCodecTester.java | 4 +- .../testutils/RoundTripping.java | 111 ++++++++++++++++++ .../serialization/testutils/TestUtils.java | 82 ------------- .../google/devtools/build/lib/packages/BUILD | 1 + .../devtools/build/lib/packages/RuleTest.java | 4 +- .../build/lib/packages/semantics/BUILD | 3 +- .../packages/semantics/ConsistencyTest.java | 6 +- .../google/devtools/build/lib/rules/cpp/BUILD | 1 + .../rules/cpp/CcToolchainFeaturesTest.java | 4 +- .../google/devtools/build/lib/skyframe/BUILD | 1 + ...ollectPackagesUnderDirectoryCodecTest.java | 4 +- .../build/lib/skyframe/serialization/BUILD | 4 +- .../serialization/BzlLoadValueCodecTest.java | 4 +- .../ImmutableBiMapCodecTest.java | 6 +- .../ImmutableClassToInstanceMapCodecTest.java | 6 +- .../serialization/ImmutableMapCodecTest.java | 10 +- .../ImmutableSortedSetCodecTest.java | 38 +----- .../serialization/LambdaCodecTest.java | 6 +- .../skyframe/serialization/MemoizerTest.java | 16 +-- .../com/google/devtools/build/lib/vfs/BUILD | 1 + .../build/lib/vfs/PathFragmentTest.java | 4 +- .../com/google/devtools/build/skyframe/BUILD | 2 +- .../devtools/build/skyframe/SkyKeyTest.java | 4 +- 25 files changed, 179 insertions(+), 162 deletions(-) create mode 100644 src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/RoundTripping.java diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/AbstractObjectCodecTest.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/AbstractObjectCodecTest.java index 3b60141c4fefce..7b61a6a4a232c0 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/AbstractObjectCodecTest.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/AbstractObjectCodecTest.java @@ -38,8 +38,7 @@ public abstract class AbstractObjectCodecTest { private ObjectCodecTester objectCodecTester; /** Construct with the given codec and subjects. */ - protected AbstractObjectCodecTest( - ObjectCodec underTest, @SuppressWarnings("unchecked") T... subjects) { + protected AbstractObjectCodecTest(ObjectCodec underTest, T... subjects) { this.underTest = underTest; this.subjects = ImmutableList.copyOf(subjects); } @@ -81,13 +80,13 @@ public void testDeserializeBadDataThrowsSerializationException() { protected T fromBytes(DeserializationContext context, byte[] bytes) throws SerializationException, IOException { - return TestUtils.fromBytes(context, underTest, bytes); + return RoundTripping.fromBytes(context, underTest, bytes); } /** Serialize subject using the {@link ObjectCodec} under test. */ protected byte[] toBytes(SerializationContext context, T subject) throws IOException, SerializationException { - return TestUtils.toBytes(context, underTest, subject); + return RoundTripping.toBytes(context, underTest, subject); } protected void verifyDeserialization(T deserialized, T subject) { diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD index 70899dd4b49ffb..c27b1514f548a5 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/BUILD @@ -24,6 +24,7 @@ java_library( ["*.java"], exclude = DUMPER_SOURCES + [ "FakeDirectories.java", + "RoundTripping.java", "SerializationDepsUtils.java", ], ), @@ -31,6 +32,7 @@ java_library( "//src/test/java/com/google/devtools/build/lib/vfs/util", # For FileSystem modules ], deps = [ + ":round-tripping", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment", @@ -45,6 +47,16 @@ java_library( ], ) +java_library( + name = "round-tripping", + srcs = ["RoundTripping.java"], + deps = [ + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", + "//third_party:guava", + "//third_party/protobuf:protobuf_java", + ], +) + java_library( name = "depsutils", srcs = ["SerializationDepsUtils.java"], diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/ObjectCodecTester.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/ObjectCodecTester.java index f4321da0c2c51e..5dc563fb537f39 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/ObjectCodecTester.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/ObjectCodecTester.java @@ -129,11 +129,11 @@ void testDeserializeJunkData() { } private T fromBytes(byte[] bytes) throws SerializationException, IOException { - return TestUtils.fromBytes(readContext, underTest, bytes); + return RoundTripping.fromBytes(readContext, underTest, bytes); } private byte[] toBytes(T subject) throws IOException, SerializationException { - return TestUtils.toBytes(writeContext, underTest, subject); + return RoundTripping.toBytes(writeContext, underTest, subject); } /** Builder for {@link ObjectCodecTester}. */ diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/RoundTripping.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/RoundTripping.java new file mode 100644 index 00000000000000..82376a4b79e47e --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/RoundTripping.java @@ -0,0 +1,111 @@ +// Copyright 2017 The Bazel Authors. All rights reserved. +// +// Licensed 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 com.google.devtools.build.lib.skyframe.serialization.testutils; + +import com.google.common.collect.ImmutableClassToInstanceMap; +import com.google.devtools.build.lib.skyframe.serialization.AutoRegistry; +import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecRegistry; +import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs; +import com.google.devtools.build.lib.skyframe.serialization.SerializationContext; +import com.google.devtools.build.lib.skyframe.serialization.SerializationException; +import com.google.protobuf.ByteString; +import com.google.protobuf.CodedInputStream; +import com.google.protobuf.CodedOutputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +/** Helpers for round tripping in serialization tests. */ +public class RoundTripping { + + private RoundTripping() {} + + /** Serialize a value to a new byte array. */ + public static byte[] toBytes(SerializationContext context, ObjectCodec codec, T value) + throws IOException, SerializationException { + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + CodedOutputStream codedOut = CodedOutputStream.newInstance(bytes); + codec.serialize(context, value, codedOut); + codedOut.flush(); + return bytes.toByteArray(); + } + + public static ByteString toBytes(SerializationContext serializationContext, T value) + throws IOException, SerializationException { + ByteString.Output output = ByteString.newOutput(); + CodedOutputStream codedOut = CodedOutputStream.newInstance(output); + serializationContext.serialize(value, codedOut); + codedOut.flush(); + return output.toByteString(); + } + + public static Object fromBytes(DeserializationContext deserializationContext, ByteString bytes) + throws IOException, SerializationException { + return deserializationContext.deserialize(bytes.newCodedInput()); + } + + /** Deserialize a value from a byte array. */ + public static T fromBytes(DeserializationContext context, ObjectCodec codec, byte[] bytes) + throws SerializationException, IOException { + return codec.deserialize(context, CodedInputStream.newInstance(bytes)); + } + + public static T roundTrip(T value, ObjectCodecRegistry registry) + throws IOException, SerializationException { + return roundTrip(value, new ObjectCodecs(registry)); + } + + public static T roundTrip(T value, ImmutableClassToInstanceMap dependencies) + throws IOException, SerializationException { + return roundTrip(value, new ObjectCodecs(dependencies)); + } + + public static T roundTrip(T value) throws IOException, SerializationException { + return roundTrip(value, new ObjectCodecs()); + } + + private static T roundTrip(T value, ObjectCodecs codecs) throws SerializationException { + @SuppressWarnings("unchecked") + T result = (T) codecs.deserialize(codecs.serialize(value)); + return result; + } + + public static ByteString toBytesMemoized(Object original, ObjectCodecRegistry registry) + throws IOException, SerializationException { + return new ObjectCodecs(registry).serializeMemoized(original); + } + + public static Object fromBytesMemoized(ByteString bytes, ObjectCodecRegistry registry) + throws SerializationException { + return new ObjectCodecs(registry).deserializeMemoized(bytes); + } + + @SuppressWarnings("unchecked") + public static T roundTripMemoized(T original, ObjectCodecRegistry registry) + throws IOException, SerializationException { + ObjectCodecs codecs = new ObjectCodecs(registry); + return (T) codecs.deserializeMemoized(codecs.serializeMemoized(original)); + } + + public static T roundTripMemoized(T original, ObjectCodec... codecs) + throws IOException, SerializationException { + ObjectCodecRegistry.Builder builder = AutoRegistry.get().getBuilder(); + for (ObjectCodec codec : codecs) { + builder.add(codec); + } + return roundTripMemoized(original, builder.build()); + } +} diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/TestUtils.java b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/TestUtils.java index 1c943955789ba2..482bd8d3e79c31 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/TestUtils.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils/TestUtils.java @@ -16,19 +16,9 @@ import static com.google.common.truth.Truth.assertThat; -import com.google.common.collect.ImmutableClassToInstanceMap; import com.google.devtools.build.lib.skyframe.serialization.AutoRegistry; -import com.google.devtools.build.lib.skyframe.serialization.DeserializationContext; import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecRegistry; -import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs; -import com.google.devtools.build.lib.skyframe.serialization.SerializationContext; -import com.google.devtools.build.lib.skyframe.serialization.SerializationException; -import com.google.protobuf.ByteString; -import com.google.protobuf.CodedInputStream; -import com.google.protobuf.CodedOutputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; import net.starlark.java.eval.Module; /** Helpers for serialization tests. */ @@ -36,56 +26,6 @@ public class TestUtils { private TestUtils() {} - /** Serialize a value to a new byte array. */ - public static byte[] toBytes(SerializationContext context, ObjectCodec codec, T value) - throws IOException, SerializationException { - ByteArrayOutputStream bytes = new ByteArrayOutputStream(); - CodedOutputStream codedOut = CodedOutputStream.newInstance(bytes); - codec.serialize(context, value, codedOut); - codedOut.flush(); - return bytes.toByteArray(); - } - - public static ByteString toBytes(SerializationContext serializationContext, T value) - throws IOException, SerializationException { - ByteString.Output output = ByteString.newOutput(); - CodedOutputStream codedOut = CodedOutputStream.newInstance(output); - serializationContext.serialize(value, codedOut); - codedOut.flush(); - return output.toByteString(); - } - - public static Object fromBytes(DeserializationContext deserializationContext, ByteString bytes) - throws IOException, SerializationException { - return deserializationContext.deserialize(bytes.newCodedInput()); - } - - /** Deserialize a value from a byte array. */ - public static T fromBytes(DeserializationContext context, ObjectCodec codec, byte[] bytes) - throws SerializationException, IOException { - return codec.deserialize(context, CodedInputStream.newInstance(bytes)); - } - - public static T roundTrip(T value, ObjectCodecRegistry registry) - throws IOException, SerializationException { - return roundTrip(value, new ObjectCodecs(registry)); - } - - public static T roundTrip(T value, ImmutableClassToInstanceMap dependencies) - throws IOException, SerializationException { - return roundTrip(value, new ObjectCodecs(dependencies)); - } - - public static T roundTrip(T value) throws IOException, SerializationException { - return roundTrip(value, new ObjectCodecs()); - } - - private static T roundTrip(T value, ObjectCodecs codecs) throws SerializationException { - @SuppressWarnings("unchecked") - T result = (T) codecs.deserialize(codecs.serialize(value)); - return result; - } - /** * Asserts that two {@link Module}s have the same structure. Needed because {@link Module} doesn't * override {@link Object#equals}. @@ -98,28 +38,6 @@ public static void assertModulesEqual(Module module1, Module module2) { .inOrder(); } - public static ByteString toBytesMemoized(Object original, ObjectCodecRegistry registry) - throws IOException, SerializationException { - return new ObjectCodecs(registry).serializeMemoized(original); - } - - public static Object fromBytesMemoized(ByteString bytes, ObjectCodecRegistry registry) - throws SerializationException { - return new ObjectCodecs(registry).deserializeMemoized(bytes); - } - - @SuppressWarnings("unchecked") - public static T roundTripMemoized(T original, ObjectCodecRegistry registry) - throws IOException, SerializationException { - ObjectCodecs codecs = new ObjectCodecs(registry); - return (T) codecs.deserializeMemoized(codecs.serializeMemoized(original)); - } - - public static T roundTripMemoized(T original, ObjectCodec... codecs) - throws IOException, SerializationException { - return roundTripMemoized(original, getBuilderWithAdditionalCodecs(codecs).build()); - } - public static ObjectCodecRegistry.Builder getBuilderWithAdditionalCodecs( ObjectCodec... codecs) { ObjectCodecRegistry.Builder builder = AutoRegistry.get().getBuilder(); diff --git a/src/test/java/com/google/devtools/build/lib/packages/BUILD b/src/test/java/com/google/devtools/build/lib/packages/BUILD index 843d3f1b3326f0..2dd05582dbed49 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/BUILD +++ b/src/test/java/com/google/devtools/build/lib/packages/BUILD @@ -82,6 +82,7 @@ java_test( "//src/main/java/com/google/devtools/build/lib/skyframe:tests_for_target_pattern_value", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:round-tripping", "//src/main/java/com/google/devtools/build/lib/util", "//src/main/java/com/google/devtools/build/lib/util:filetype", "//src/main/java/com/google/devtools/build/lib/vfs", diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleTest.java index aa7fb3729a3de1..ac255337541df8 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/RuleTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/RuleTest.java @@ -23,7 +23,7 @@ import com.google.devtools.build.lib.events.EventKind; import com.google.devtools.build.lib.packages.util.PackageLoadingTestCase; import com.google.devtools.build.lib.skyframe.serialization.SerializationException; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import java.io.IOException; import org.junit.Test; import org.junit.runner.RunWith; @@ -274,7 +274,7 @@ public void testReduceForSerialization() throws Exception { } private TargetData roundTrip(Target target) throws SerializationException, IOException { - return TestUtils.roundTrip( + return RoundTripping.roundTrip( target.reduceForSerialization(), ImmutableClassToInstanceMap.of( RuleClassProvider.class, skyframeExecutor.getRuleClassProviderForTesting())); diff --git a/src/test/java/com/google/devtools/build/lib/packages/semantics/BUILD b/src/test/java/com/google/devtools/build/lib/packages/semantics/BUILD index a3fa3dcd1c64b7..3a24f801cb1c59 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/semantics/BUILD +++ b/src/test/java/com/google/devtools/build/lib/packages/semantics/BUILD @@ -24,10 +24,9 @@ java_test( deps = [ "//src/main/java/com/google/devtools/build/lib/packages/semantics", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:round-tripping", "//src/main/java/com/google/devtools/common/options", "//src/main/java/net/starlark/java/eval", - "//third_party:guava", "//third_party:junit4", "//third_party:truth", ], diff --git a/src/test/java/com/google/devtools/build/lib/packages/semantics/ConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/semantics/ConsistencyTest.java index 609e570ed92e9f..c5f68b2053fac6 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/semantics/ConsistencyTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/semantics/ConsistencyTest.java @@ -19,7 +19,7 @@ import com.google.devtools.build.lib.skyframe.serialization.DynamicCodec; import com.google.devtools.build.lib.skyframe.serialization.ImmutableDeserializationContext; import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import com.google.devtools.common.options.Options; import com.google.devtools.common.options.OptionsParser; import java.util.Arrays; @@ -84,10 +84,10 @@ public void serializationRoundTrip() throws Exception { StarlarkSemantics semantics = buildRandomSemantics(new Random(i)); StarlarkSemantics deserialized = (StarlarkSemantics) - TestUtils.fromBytes( + RoundTripping.fromBytes( new ImmutableDeserializationContext(), codec, - TestUtils.toBytes( + RoundTripping.toBytes( new ObjectCodecs().getSerializationContextForTesting(), codec, semantics)); assertThat(deserialized).isEqualTo(semantics); } diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD index a4eece61b81b1e..979b51733f42cd 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD @@ -301,6 +301,7 @@ java_test( "//src/main/java/com/google/devtools/build/lib/rules/cpp", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:round-tripping", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment", "//src/main/java/net/starlark/java/eval", diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeaturesTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeaturesTest.java index fa527099c61565..197c03ae354d44 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeaturesTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeaturesTest.java @@ -41,8 +41,8 @@ import com.google.devtools.build.lib.rules.cpp.CcToolchainVariables.VariableValueBuilder; import com.google.devtools.build.lib.skyframe.serialization.AutoRegistry; import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecs; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain; @@ -1257,7 +1257,7 @@ public void testConfiguration() throws Exception { .getCommandLine(CppActionNames.CPP_COMPILE, createVariables("v", "1"))) .containsExactly("-f", "1"); - CcToolchainFeatures deserialized = TestUtils.roundTrip(features); + CcToolchainFeatures deserialized = RoundTripping.roundTrip(features); assertThat(getEnabledFeatures(deserialized, "b")).containsExactly("a", "b"); assertThat( features diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD index a79889e42f76f6..521ff56c1ae062 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD +++ b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD @@ -286,6 +286,7 @@ java_test( "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant-annotation", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:depsutils", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:round-tripping", "//src/main/java/com/google/devtools/build/lib/skyframe/toolchains:no_matching_platform_data", "//src/main/java/com/google/devtools/build/lib/skyframe/toolchains:platform_lookup_util", "//src/main/java/com/google/devtools/build/lib/skyframe/toolchains:toolchain_context_key", diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryCodecTest.java index 94a49a1245989b..3c27599988dda4 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryCodecTest.java @@ -18,8 +18,8 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.skyframe.CollectPackagesUnderDirectoryValue.NoErrorCollectPackagesUnderDirectoryValue; import com.google.devtools.build.lib.skyframe.serialization.testutils.FsUtils; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.vfs.Root; import com.google.devtools.build.lib.vfs.RootedPath; @@ -57,7 +57,7 @@ public void testCodec() throws Exception { @Test public void testEmptyDeserializesToSingletonValue() throws Exception { - assertThat(TestUtils.roundTrip(NoErrorCollectPackagesUnderDirectoryValue.EMPTY)) + assertThat(RoundTripping.roundTrip(NoErrorCollectPackagesUnderDirectoryValue.EMPTY)) .isSameInstanceAs(NoErrorCollectPackagesUnderDirectoryValue.EMPTY); } diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD index 0e853eedae6228..07d152fdc384d6 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD @@ -90,7 +90,7 @@ java_test( srcs = ["MemoizerTest.java"], deps = [ "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:round-tripping", "//third_party:guava", "//third_party:jsr305", "//third_party:junit4", @@ -342,6 +342,7 @@ java_test( "//src/main/java/com/google/devtools/build/lib/skyframe:bzl_load_value", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:round-tripping", "//src/main/java/net/starlark/java/eval", "//third_party:guava", "//third_party:junit4", @@ -408,6 +409,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:dumper", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:round-tripping", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment", "//src/main/java/com/google/devtools/build/skyframe", diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BzlLoadValueCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BzlLoadValueCodecTest.java index 8f57cb5d10d478..46d8ae92b9d8e7 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BzlLoadValueCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BzlLoadValueCodecTest.java @@ -20,8 +20,8 @@ import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.packages.BzlVisibility; import com.google.devtools.build.lib.skyframe.BzlLoadValue; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; import net.starlark.java.eval.Module; import org.junit.Test; import org.junit.runner.RunWith; @@ -60,7 +60,7 @@ public void canSendBuiltins() throws Exception { ObjectCodecRegistry registry = AutoRegistry.get().getBuilder().addReferenceConstant(builtin).build(); BzlLoadValue value = makeBLV("var", builtin); - BzlLoadValue deserialized = TestUtils.roundTrip(value, registry); + BzlLoadValue deserialized = RoundTripping.roundTrip(value, registry); Object deserializedDummy = deserialized.getModule().getGlobal("var"); assertThat(deserializedDummy).isSameInstanceAs(builtin); } diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableBiMapCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableBiMapCodecTest.java index e83b48b20a3252..68537d26fe5da8 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableBiMapCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableBiMapCodecTest.java @@ -19,9 +19,9 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableBiMap; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester.VerificationFunction; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; import com.google.protobuf.ByteString; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; @@ -54,11 +54,11 @@ public void serializingErrorIncludesKeyStringAndValueClass() { assertThrows( SerializationException.class, () -> - TestUtils.toBytesMemoized( + RoundTripping.toBytesMemoized( ImmutableBiMap.of("a", new Dummy()), AutoRegistry.get() .getBuilder() - .add(new DummyThrowingCodec(/*throwsOnSerialization=*/ true)) + .add(new DummyThrowingCodec(/* throwsOnSerialization= */ true)) .build())); assertThat(expected) .hasMessageThat() diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableClassToInstanceMapCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableClassToInstanceMapCodecTest.java index 0b78401a4c3ad6..3400eac3644dbc 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableClassToInstanceMapCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableClassToInstanceMapCodecTest.java @@ -20,9 +20,9 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableClassToInstanceMap; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester.VerificationFunction; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; import com.google.protobuf.ByteString; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; @@ -59,11 +59,11 @@ public void serializingErrorIncludesKeyStringAndValueClass() { assertThrows( SerializationException.class, () -> - TestUtils.toBytesMemoized( + RoundTripping.toBytesMemoized( ImmutableClassToInstanceMap.of(Dummy.class, new Dummy()), AutoRegistry.get() .getBuilder() - .add(new DummyThrowingCodec(/*throwsOnSerialization=*/ true)) + .add(new DummyThrowingCodec(/* throwsOnSerialization= */ true)) .build())); assertThat(expected) .hasMessageThat() diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableMapCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableMapCodecTest.java index ebb7394391c650..1c18a4cf118e14 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableMapCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableMapCodecTest.java @@ -23,9 +23,9 @@ import com.google.common.collect.Ordering; import com.google.devtools.build.lib.skyframe.serialization.SerializationException.NoCodecException; import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester.VerificationFunction; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; import com.google.protobuf.ByteString; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; @@ -69,7 +69,7 @@ public void smoke() throws Exception { @Test public void immutableSortedMapRoundTripsWithTheSameComparator() throws Exception { ImmutableSortedMap deserialized = - TestUtils.roundTrip( + RoundTripping.roundTrip( ImmutableSortedMap.orderedBy(HELLO_FIRST_COMPARATOR) .put("a", "b") .put("hello", "there") @@ -87,7 +87,7 @@ public void immutableSortedMapUnserializableComparatorFails() { assertThrows( NoCodecException.class, () -> - TestUtils.roundTrip( + RoundTripping.roundTrip( ImmutableSortedMap.orderedBy(comparator) .put("a", "b") .put("c", "d") @@ -103,11 +103,11 @@ public void serializingErrorIncludesKeyStringAndValueClass() { assertThrows( SerializationException.class, () -> - TestUtils.toBytesMemoized( + RoundTripping.toBytesMemoized( ImmutableMap.of("a", new Dummy()), AutoRegistry.get() .getBuilder() - .add(new DummyThrowingCodec(/*throwsOnSerialization=*/ true)) + .add(new DummyThrowingCodec(/* throwsOnSerialization= */ true)) .build())); assertThat(expected) .hasMessageThat() diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableSortedSetCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableSortedSetCodecTest.java index a09311a85e16b5..6f71914ab24c50 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableSortedSetCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableSortedSetCodecTest.java @@ -18,11 +18,10 @@ import static org.junit.Assert.assertThrows; import com.google.common.collect.ImmutableSortedSet; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.SerializationConstant; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester.VerificationFunction; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; -import com.google.protobuf.CodedInputStream; -import com.google.protobuf.CodedOutputStream; import java.util.Comparator; import org.junit.Test; import org.junit.runner.RunWith; @@ -31,8 +30,8 @@ /** Tests for {@link ImmutableSortedSetCodec}. */ @RunWith(JUnit4.class) public class ImmutableSortedSetCodecTest { - private static final Comparator LENGTH_COMPARATOR = - Comparator.comparingInt(String::length); + @SerializationConstant @VisibleForSerialization + static final Comparator LENGTH_COMPARATOR = Comparator.comparingInt(String::length); @Test public void smoke() throws Exception { @@ -57,35 +56,8 @@ public void unknowComparatorThrows() { assertThrows( SerializationException.class, () -> - TestUtils.roundTrip( + RoundTripping.roundTrip( ImmutableSortedSet.orderedBy(Comparator.comparingInt(String::length)) .add("a", "bcd", "ef"))); } - - /** - * Effectively singleton codec for {@link #LENGTH_COMPARATOR}. We don't use @AutoCodec to avoid - * adding the dependency. - */ - private static class LengthComparatorOnlyCodec implements ObjectCodec> { - @SuppressWarnings("unchecked") - @Override - public Class> getEncodedClass() { - return (Class>) (Class) LENGTH_COMPARATOR.getClass(); - } - - @Override - public void serialize( - SerializationContext context, Comparator obj, CodedOutputStream codedOut) - throws SerializationException { - if (obj != LENGTH_COMPARATOR) { - throw new SerializationException("Unexpected object " + obj); - } - } - - @Override - public Comparator deserialize( - DeserializationContext context, CodedInputStream codedIn) { - return LENGTH_COMPARATOR; - } - } } diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/LambdaCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/LambdaCodecTest.java index 07fb7e610f66bc..7f11a43a3207e5 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/LambdaCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/LambdaCodecTest.java @@ -17,8 +17,8 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -53,7 +53,7 @@ public void smoke() throws Exception { public void lambdaBehaviorPreserved() throws Exception { List returnValue = new ArrayList<>(); MyInterface lambda = (MyInterface & Serializable) (arg) -> returnValue.isEmpty(); - MyInterface deserializedLambda = TestUtils.roundTrip(lambda); + MyInterface deserializedLambda = RoundTripping.roundTrip(lambda); assertThat(lambda.func("any")).isTrue(); assertThat(deserializedLambda.func("any")).isTrue(); returnValue.add(true); @@ -67,6 +67,6 @@ public void onlySerializableWorks() { MyInterface unserializableLambda = (arg) -> true; assertThrows( SerializationException.class, - () -> TestUtils.toBytesMemoized(unserializableLambda, AutoRegistry.get())); + () -> RoundTripping.toBytesMemoized(unserializableLambda, AutoRegistry.get())); } } diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/MemoizerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/MemoizerTest.java index 4c07cb1017a9d7..74588478378990 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/MemoizerTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/MemoizerTest.java @@ -17,7 +17,7 @@ import static com.google.devtools.build.lib.skyframe.serialization.strings.UnsafeStringCodec.stringCodec; import com.google.common.collect.ImmutableList; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; import java.io.IOException; @@ -96,7 +96,7 @@ public void chainOfMutables() throws IOException, SerializationException { DummyLinkedList c = new MutableDummy("C", null); DummyLinkedList b = new MutableDummy("B", c); DummyLinkedList a = new MutableDummy("A", b); - assertABC(TestUtils.roundTripMemoized(a)); + assertABC(RoundTripping.roundTripMemoized(a)); } @Test @@ -104,7 +104,7 @@ public void chainOfMixed() throws IOException, SerializationException { DummyLinkedList c = new MutableDummy("C", null); DummyLinkedList b = new ImmutableDummy("B", c); DummyLinkedList a = new MutableDummy("A", b); - assertABC(TestUtils.roundTripMemoized(a)); + assertABC(RoundTripping.roundTripMemoized(a)); } @Test @@ -112,7 +112,7 @@ public void cycleOfMutables() throws IOException, SerializationException { MutableDummy b = new MutableDummy("B", null); DummyLinkedList a = new MutableDummy("A", b); b.setNext(a); - assertABcycle(TestUtils.roundTripMemoized(a)); + assertABcycle(RoundTripping.roundTripMemoized(a)); } @Test @@ -120,7 +120,7 @@ public void cycleOfMixedWithMutableRoot() throws IOException, SerializationExcep MutableDummy a = new MutableDummy("A", null); DummyLinkedList b = new ImmutableDummy("B", a); a.setNext(b); - assertABcycle(TestUtils.roundTripMemoized(a)); + assertABcycle(RoundTripping.roundTripMemoized(a)); } @Test @@ -128,7 +128,7 @@ public void cycleOfMixedWithImmutableRoot() throws IOException, SerializationExc MutableDummy b = new MutableDummy("B", null); DummyLinkedList a = new ImmutableDummy("A", b); b.setNext(a); - assertABcycle(TestUtils.roundTripMemoized(a)); + assertABcycle(RoundTripping.roundTripMemoized(a)); } // The following two tests verify that objects memoized using serialize can interoperate with @@ -144,7 +144,7 @@ public void serializedLeaf_canBeBackreferenced() throws Exception { assertThat(((Wrapper) subject.get(0)).value).isNotSameInstanceAs(subject.get(1)); ImmutableList deserialized = - TestUtils.roundTripMemoized(subject, new WrapperLeafCodec()); + RoundTripping.roundTripMemoized(subject, new WrapperLeafCodec()); assertThat(subject).isEqualTo(deserialized); // The "foo" instance memoized via serializeLeaf can be backreferenced by a codec that isn't // explicitly invoked via serializeLeaf. @@ -161,7 +161,7 @@ public void serializeLeaf_canBackreferenceNonSerializeLeaf() throws Exception { assertThat(subject.get(0)).isNotSameInstanceAs(((Wrapper) subject.get(1)).value); ImmutableList deserialized = - TestUtils.roundTripMemoized(subject, new WrapperLeafCodec()); + RoundTripping.roundTripMemoized(subject, new WrapperLeafCodec()); assertThat(subject).isEqualTo(deserialized); // The "foo" instance memoized via serialize can be backreferenced by a codec that uses // serializeLeaf. diff --git a/src/test/java/com/google/devtools/build/lib/vfs/BUILD b/src/test/java/com/google/devtools/build/lib/vfs/BUILD index e2ed2410900c1f..71c357a3b7a0e6 100644 --- a/src/test/java/com/google/devtools/build/lib/vfs/BUILD +++ b/src/test/java/com/google/devtools/build/lib/vfs/BUILD @@ -60,6 +60,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/skyframe/serialization", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:round-tripping", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/lib/vfs:ospathpolicy", "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment", diff --git a/src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java b/src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java index 280b736f0c51b2..70872888fcbcd1 100644 --- a/src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java +++ b/src/test/java/com/google/devtools/build/lib/vfs/PathFragmentTest.java @@ -23,8 +23,8 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.testing.EqualsTester; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem; import com.google.testing.junit.testparameterinjector.TestParameter; import com.google.testing.junit.testparameterinjector.TestParameterInjector; @@ -619,7 +619,7 @@ public void testSerializationNested() throws Exception { private static void checkSerialization(String pathFragmentString) throws Exception { PathFragment a = create(pathFragmentString); - PathFragment a2 = TestUtils.roundTrip(a); + PathFragment a2 = RoundTripping.roundTrip(a); assertThat(a2).isEqualTo(a); } diff --git a/src/test/java/com/google/devtools/build/skyframe/BUILD b/src/test/java/com/google/devtools/build/skyframe/BUILD index 925e5448f4b9d2..97832fb855e2d1 100644 --- a/src/test/java/com/google/devtools/build/skyframe/BUILD +++ b/src/test/java/com/google/devtools/build/skyframe/BUILD @@ -62,7 +62,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/events", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils", + "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/testutils:round-tripping", "//src/main/java/com/google/devtools/build/lib/util", "//src/main/java/com/google/devtools/build/skyframe", "//src/main/java/com/google/devtools/build/skyframe:cpu_heavy_skykey", diff --git a/src/test/java/com/google/devtools/build/skyframe/SkyKeyTest.java b/src/test/java/com/google/devtools/build/skyframe/SkyKeyTest.java index 1b86c3d275a3f1..9667e4f8f07e69 100644 --- a/src/test/java/com/google/devtools/build/skyframe/SkyKeyTest.java +++ b/src/test/java/com/google/devtools/build/skyframe/SkyKeyTest.java @@ -16,7 +16,7 @@ import static com.google.common.truth.Truth.assertThat; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; -import com.google.devtools.build.lib.skyframe.serialization.testutils.TestUtils; +import com.google.devtools.build.lib.skyframe.serialization.testutils.RoundTripping; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -45,7 +45,7 @@ public void testHashCodeTransience() throws Exception { assertThat(hashCodeSpy.numberOfTimesHashCodeCalled).isEqualTo(1); // When that SkyKey is serialized and then deserialized, - SkyKey newKey = TestUtils.roundTrip(originalKey); + SkyKey newKey = RoundTripping.roundTrip(originalKey); // Then the new SkyKey recomputed its hashcode on deserialization. assertThat(newKey.hashCode()).isEqualTo(originalKey.hashCode());