diff options
author | 2017-09-28 21:04:17 -0400 | |
---|---|---|
committer | 2017-09-29 12:14:31 -0400 | |
commit | e087d317d24094e674cf7fae0284c81d6ff8bd02 (patch) | |
tree | 6acc238fff3d86ed4ed774d6a2b46239423a0875 /src/test/java/com/google/devtools | |
parent | 5afd9ee197e0c9a7ef8d040cc2c2e68cc16aa8eb (diff) |
Move serialization test utilities from test/ to main/
This is so other packages can depend on them without violating our style guide. (Dependencies on test/ packages should be limited to aggregating test suites.)
The target is also renamed from ".../serialization:serialization-test-base" to a new subpackage, ".../serialization/testutils:testutils".
RELNOTES: None
PiperOrigin-RevId: 170426906
Diffstat (limited to 'src/test/java/com/google/devtools')
18 files changed, 18 insertions, 244 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/apple/AppleConfigurationSerializationTest.java b/src/test/java/com/google/devtools/build/lib/rules/apple/AppleConfigurationSerializationTest.java index e302ee18c9..79d566af0e 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/apple/AppleConfigurationSerializationTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/apple/AppleConfigurationSerializationTest.java @@ -18,9 +18,9 @@ import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.skyframe.serialization.AbstractObjectCodecTest; import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec; import com.google.devtools.build.lib.skyframe.serialization.SerializationException; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import com.google.devtools.common.options.OptionsParsingException; import com.google.protobuf.CodedInputStream; import com.google.protobuf.CodedOutputStream; diff --git a/src/test/java/com/google/devtools/build/lib/rules/apple/BUILD b/src/test/java/com/google/devtools/build/lib/rules/apple/BUILD index 3265ba636a..1753c230b7 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/apple/BUILD +++ b/src/test/java/com/google/devtools/build/lib/rules/apple/BUILD @@ -21,8 +21,8 @@ java_library( "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/lib/rules/apple", "//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/common/options", - "//src/test/java/com/google/devtools/build/lib/skyframe/serialization:serialization-test-base", "//third_party:guava", "//third_party:junit4", "//third_party/protobuf:protobuf_java", diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/AbstractObjectCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/AbstractObjectCodecTest.java deleted file mode 100644 index 93bcb11b4c..0000000000 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/AbstractObjectCodecTest.java +++ /dev/null @@ -1,108 +0,0 @@ -// 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; - -import static com.google.common.truth.Truth.assertThat; -import static org.junit.Assert.fail; - -import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableList; -import com.google.protobuf.CodedInputStream; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import javax.annotation.Nullable; -import org.junit.Before; -import org.junit.Test; - -/** Common ObjectCodec tests. */ -public abstract class AbstractObjectCodecTest<T> { - - @Nullable protected ObjectCodec<T> underTest; - @Nullable protected ImmutableList<T> subjects; - - /** - * Override to false to skip testDeserializeBadDataThrowsSerializationException(). Codecs that - * cannot distinguish good and bad data should do this. - */ - protected boolean shouldTestDeserializeBadData = true; - - /** Construct with the given codec and subjects. */ - @SafeVarargs - protected AbstractObjectCodecTest( - ObjectCodec<T> underTest, T... subjects) { - this.underTest = underTest; - this.subjects = ImmutableList.copyOf(subjects); - } - - /** - * Construct without a codec and subjects. They must be set in the subclass's constructor instead. - * - * <p>This is useful if the logic for creating the codec and/or subjects is non-trivial. Using - * this super constructor, the logic can be placed in the subclass's constructor; whereas if using - * the above super constructor, the logic must be factored into a static method. - */ - protected AbstractObjectCodecTest() {} - - @Before - public void checkInitialized() { - Preconditions.checkNotNull(underTest); - Preconditions.checkNotNull(subjects); - } - - @Test - public void testSuccessfulSerializationDeserialization() throws Exception { - for (T subject : subjects) { - byte[] serialized = toBytes(subject); - Object deserialized = fromBytes(serialized); - verifyDeserialization(deserialized, subject); - } - } - - @Test - public void testSerializationRoundTripBytes() throws Exception { - for (T subject : subjects) { - byte[] serialized = toBytes(subject); - T deserialized = fromBytes(serialized); - byte[] reserialized = toBytes(deserialized); - assertThat(reserialized).isEqualTo(serialized); - } - } - - @Test - public void testDeserializeBadDataThrowsSerializationException() { - if (!shouldTestDeserializeBadData) { - return; - } - try { - underTest.deserialize(CodedInputStream.newInstance("junk".getBytes(StandardCharsets.UTF_8))); - fail("Expected exception"); - } catch (SerializationException | IOException e) { - // Expected. - } - } - - protected T fromBytes(byte[] bytes) throws SerializationException, IOException { - return TestUtils.fromBytes(underTest, bytes); - } - - /** Serialize subject using the {@link ObjectCodec} under test. */ - protected byte[] toBytes(T subject) throws IOException, SerializationException { - return TestUtils.toBytes(underTest, subject); - } - - protected void verifyDeserialization(Object deserialized, T subject) { - assertThat(deserialized).isEqualTo(subject); - } -} 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 21fa4c5795..bd3b55bfc7 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 @@ -10,47 +10,16 @@ filegroup( visibility = ["//src/test/java/com/google/devtools/build/lib:__pkg__"], ) -TEST_BASE_FILES = [ - "AbstractObjectCodecTest.java", - "FsUtils.java", - "TestUtils.java", -] - -java_library( - name = "serialization-test-base", - testonly = 1, - srcs = TEST_BASE_FILES, - visibility = [ - "//src/test/java/com/google/devtools/build/lib:__subpackages__", - ], - deps = [ - "//src/main/java/com/google/devtools/build/lib:syntax", - "//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/inmemoryfs", - "//third_party:guava", - "//third_party:jsr305", - "//third_party:junit4", - "//third_party:truth", - "//third_party/protobuf:protobuf_java", - ], -) - java_library( name = "serialization-tests", testonly = 1, - srcs = glob( - [ - "*.java", - ], - exclude = TEST_BASE_FILES, - ), + srcs = glob(["*.java"]), deps = [ - ":serialization-test-base", "//src/main/java/com/google/devtools/build/lib:build-base", "//src/main/java/com/google/devtools/build/lib:packages-internal", "//src/main/java/com/google/devtools/build/lib:util", "//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/vfs", "//third_party:guava", "//third_party:guava-testlib", diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BlazeDirectoriesCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BlazeDirectoriesCodecTest.java index ef7916d295..cd82c39e42 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BlazeDirectoriesCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/BlazeDirectoriesCodecTest.java @@ -17,6 +17,8 @@ package com.google.devtools.build.lib.skyframe.serialization; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.BlazeDirectoriesCodec; import com.google.devtools.build.lib.analysis.ServerDirectories; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; +import com.google.devtools.build.lib.skyframe.serialization.testutils.FsUtils; /** Tests for {@link BlazeDirectoriesCodec}. */ public class BlazeDirectoriesCodecTest extends AbstractObjectCodecTest<BlazeDirectories> { diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/EnumCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/EnumCodecTest.java index c71d554b5b..3e335cb0ed 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/EnumCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/EnumCodecTest.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.skyframe.serialization; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/FastStringCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/FastStringCodecTest.java index 6aef73edd6..bad3e6d13c 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/FastStringCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/FastStringCodecTest.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.skyframe.serialization; import com.google.common.testing.EqualsTester; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/FsUtils.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/FsUtils.java deleted file mode 100644 index d38aab03fe..0000000000 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/FsUtils.java +++ /dev/null @@ -1,38 +0,0 @@ -// 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; - -import com.google.devtools.build.lib.vfs.FileSystem; -import com.google.devtools.build.lib.vfs.PathFragment; -import com.google.devtools.build.lib.vfs.RootedPath; -import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem; - -/** Common FileSystem related items for serialization tests. */ -class FsUtils { - - static final FileSystem TEST_FILESYSTEM = new InMemoryFileSystem(); - - static final RootedPath TEST_ROOT = - RootedPath.toRootedPath( - TEST_FILESYSTEM.getPath(PathFragment.create("/anywhere/at/all")), - PathFragment.create("all/at/anywhere")); - - private FsUtils() {} - - /** Returns path relative to {@link #TEST_ROOT}. */ - static PathFragment rootPathRelative(String path) { - return TEST_ROOT.getRelativePath().getRelative(path); - } -} diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableListCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableListCodecTest.java index 23f38557e2..50481dcba0 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableListCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ImmutableListCodecTest.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.skyframe.serialization; import com.google.common.collect.ImmutableList; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/JavaSerializableCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/JavaSerializableCodecTest.java index db200a377c..8717074587 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/JavaSerializableCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/JavaSerializableCodecTest.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.skyframe.serialization; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/LabelCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/LabelCodecTest.java index 4dc1b14bf2..7427e92255 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/LabelCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/LabelCodecTest.java @@ -16,6 +16,7 @@ package com.google.devtools.build.lib.skyframe.serialization; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PackageIdentifierCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PackageIdentifierCodecTest.java index 9bc860af02..55d3d11a67 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PackageIdentifierCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PackageIdentifierCodecTest.java @@ -15,6 +15,7 @@ package com.google.devtools.build.lib.skyframe.serialization; import com.google.devtools.build.lib.cmdline.PackageIdentifier; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import com.google.devtools.build.lib.vfs.PathFragment; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathCodecTest.java index 3b6493608e..38c2a4285e 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathCodecTest.java @@ -14,6 +14,8 @@ package com.google.devtools.build.lib.skyframe.serialization; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; +import com.google.devtools.build.lib.skyframe.serialization.testutils.FsUtils; import com.google.devtools.build.lib.vfs.Path; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathFragmentCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathFragmentCodecTest.java index 4ce91f849c..8bf52760af 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathFragmentCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PathFragmentCodecTest.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.skyframe.serialization; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import com.google.devtools.build.lib.vfs.PathFragment; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PrecomputedValueCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PrecomputedValueCodecTest.java index 48b3d3d6d3..fcfeb3c1eb 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PrecomputedValueCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/PrecomputedValueCodecTest.java @@ -17,6 +17,7 @@ package com.google.devtools.build.lib.skyframe.serialization; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.skyframe.PrecomputedValue; import com.google.devtools.build.lib.skyframe.PrecomputedValueCodec; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import com.google.devtools.build.lib.vfs.PathFragment; /** Tests for {@link PrecomputedValueCodec}. */ diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/RepositoryNameCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/RepositoryNameCodecTest.java index 97e38edc1c..3bbd29a44e 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/RepositoryNameCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/RepositoryNameCodecTest.java @@ -18,6 +18,7 @@ import static org.junit.Assert.fail; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.RepositoryName; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import java.io.IOException; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/StringCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/StringCodecTest.java index 423ffdca3d..b33c54c4c7 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/StringCodecTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/StringCodecTest.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.skyframe.serialization; +import com.google.devtools.build.lib.skyframe.serialization.testutils.AbstractObjectCodecTest; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/TestUtils.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/TestUtils.java deleted file mode 100644 index 9b263badcb..0000000000 --- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/TestUtils.java +++ /dev/null @@ -1,63 +0,0 @@ -// 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; - -import static com.google.common.truth.Truth.assertThat; - -import com.google.devtools.build.lib.syntax.Environment.Frame; -import com.google.protobuf.CodedInputStream; -import com.google.protobuf.CodedOutputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -/** Helpers for serialization tests. */ -class TestUtils { - - private TestUtils() {} - - /** Serialize a value to a new byte array. */ - static <T> byte[] toBytes(ObjectCodec<T> codec, T value) - throws IOException, SerializationException { - ByteArrayOutputStream bytes = new ByteArrayOutputStream(); - CodedOutputStream codedOut = CodedOutputStream.newInstance(bytes); - codec.serialize(value, codedOut); - codedOut.flush(); - return bytes.toByteArray(); - } - - /** Deserialize a value from a byte array. */ - static <T> T fromBytes(ObjectCodec<T> codec, byte[] bytes) - throws SerializationException, IOException { - return codec.deserialize(CodedInputStream.newInstance(bytes)); - } - - /** - * Asserts that two {@link Frame}s have the same structure. Needed because {@link Frame} doesn't - * override {@link Object#equals}. - */ - static void assertFramesEqual(Frame frame1, Frame frame2) { - assertThat(frame1.mutability().getAnnotation()) - .isEqualTo(frame2.mutability().getAnnotation()); - assertThat(frame1.getLabel()).isEqualTo(frame2.getLabel()); - assertThat(frame1.getTransitiveBindings()) - .containsExactlyEntriesIn(frame2.getTransitiveBindings()).inOrder(); - if (frame1.getParent() == null || frame2.getParent() == null) { - assertThat(frame1.getParent()).isNull(); - assertThat(frame2.getParent()).isNull(); - } else { - assertFramesEqual(frame1.getParent(), frame2.getParent()); - } - } -} |