aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/google/devtools')
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/serialization/BUILD1
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecRegistryTest.java114
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecsTest.java42
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/serialization/PrecomputedValueCodecTest.java6
4 files changed, 140 insertions, 23 deletions
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 bd3b55bfc7..b2fd6f5154 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
@@ -21,6 +21,7 @@ java_library(
"//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",
+ "//src/test/java/com/google/devtools/build/lib:testutil",
"//third_party:guava",
"//third_party:guava-testlib",
"//third_party:jsr305",
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecRegistryTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecRegistryTest.java
new file mode 100644
index 0000000000..c4391ecbd6
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecRegistryTest.java
@@ -0,0 +1,114 @@
+// Copyright 2018 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 com.google.devtools.build.lib.testutil.MoreAsserts.assertThrows;
+
+import com.google.devtools.build.lib.skyframe.serialization.ObjectCodecRegistry.CodecDescriptor;
+import com.google.devtools.build.lib.skyframe.serialization.SerializationException.NoCodecException;
+import com.google.protobuf.ByteString;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/** Tests for {@link ObjectCodecRegistry}. */
+@RunWith(JUnit4.class)
+public class ObjectCodecRegistryTest {
+
+ @Test
+ public void testDescriptorLookups() throws NoCodecException {
+ SingletonCodec<String> codec1 = SingletonCodec.of("value1", "mnemonic1");
+ SingletonCodec<String> codec2 = SingletonCodec.of("value2", "mnemonic2");
+
+ ObjectCodecRegistry underTest = ObjectCodecRegistry.newBuilder()
+ .setAllowDefaultCodec(false)
+ .add("foo", codec1)
+ .add("bar", codec2)
+ .build();
+
+ CodecDescriptor fooDescriptor = underTest.getCodecDescriptor("foo");
+ assertThat(fooDescriptor.getCodec()).isSameAs(codec1);
+ assertThat(underTest.getCodecDescriptor(ByteString.copyFromUtf8("foo")))
+ .isSameAs(fooDescriptor);
+ assertThat(underTest.getCodecDescriptorByTag(fooDescriptor.getTag())).isSameAs(fooDescriptor);
+
+ CodecDescriptor barDescriptor = underTest.getCodecDescriptor("bar");
+ assertThat(barDescriptor.getCodec()).isSameAs(codec2);
+ assertThat(underTest.getCodecDescriptor(ByteString.copyFromUtf8("bar")))
+ .isSameAs(barDescriptor);
+ assertThat(underTest.getCodecDescriptorByTag(barDescriptor.getTag())).isSameAs(barDescriptor);
+
+ assertThat(barDescriptor.getTag()).isNotEqualTo(fooDescriptor.getTag());
+
+ assertThrows(NoCodecException.class, () -> underTest.getCodecDescriptor("baz"));
+ assertThrows(
+ NoCodecException.class,
+ () -> underTest.getCodecDescriptor(ByteString.copyFromUtf8("baz")));
+ assertThrows(NoCodecException.class, () -> underTest.getCodecDescriptorByTag(42));
+ }
+
+ @Test
+ public void testDefaultCodecFallback() throws NoCodecException {
+ SingletonCodec<String> codec = SingletonCodec.of("value1", "mnemonic1");
+
+ ObjectCodecRegistry underTest = ObjectCodecRegistry.newBuilder()
+ .setAllowDefaultCodec(true)
+ .add("foo", codec)
+ .build();
+
+ CodecDescriptor fooDescriptor = underTest.getCodecDescriptor("foo");
+ assertThat(fooDescriptor.getCodec()).isSameAs(codec);
+
+ CodecDescriptor barDefaultDescriptor = underTest.getCodecDescriptor("bar");
+ assertThat(barDefaultDescriptor.getCodec()).isNotSameAs(codec);
+ assertThat(barDefaultDescriptor.getTag()).isNotEqualTo(fooDescriptor.getTag());
+ assertThat(underTest.getCodecDescriptorByTag(barDefaultDescriptor.getTag()))
+ .isSameAs(barDefaultDescriptor);
+
+ assertThat(underTest.getCodecDescriptor("baz")).isSameAs(barDefaultDescriptor);
+
+ // Bogus tags still throw.
+ assertThrows(NoCodecException.class, () -> underTest.getCodecDescriptorByTag(42));
+ }
+
+ @Test
+ public void testStableTagOrdering() throws NoCodecException {
+ SingletonCodec<String> codec1 = SingletonCodec.of("value1", "mnemonic1");
+ SingletonCodec<String> codec2 = SingletonCodec.of("value2", "mnemonic2");
+
+ ObjectCodecRegistry underTest1 = ObjectCodecRegistry.newBuilder()
+ .setAllowDefaultCodec(true)
+ .add("foo", codec1)
+ .add("bar", codec2)
+ .build();
+
+ ObjectCodecRegistry underTest2 = ObjectCodecRegistry.newBuilder()
+ .setAllowDefaultCodec(true)
+ .add("bar", codec2)
+ .add("foo", codec1)
+ .build();
+
+ assertThat(underTest1.getCodecDescriptor("foo").getTag())
+ .isEqualTo(underTest2.getCodecDescriptor("foo").getTag());
+ assertThat(underTest1.getCodecDescriptor("bar").getTag())
+ .isEqualTo(underTest2.getCodecDescriptor("bar").getTag());
+ // Default codec.
+ assertThat(underTest1.getCodecDescriptor("baz").getTag())
+ .isEqualTo(underTest2.getCodecDescriptor("baz").getTag());
+
+
+ }
+}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecsTest.java
index 3ad0d3c7b1..7e98f045b5 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecsTest.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.skyframe.serialization;
import static com.google.common.truth.Truth.assertThat;
+import static com.google.devtools.build.lib.testutil.MoreAsserts.expectThrows;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
@@ -78,7 +79,10 @@ public class ObjectCodecsTest {
@Before
public final void setup() {
spyObjectCodec = spy(new IntegerCodec());
- this.underTest = ObjectCodecs.newBuilder().add(KNOWN_CLASSIFIER, spyObjectCodec).build();
+ this.underTest = new ObjectCodecs(
+ ObjectCodecRegistry.newBuilder()
+ .add(KNOWN_CLASSIFIER, spyObjectCodec)
+ .build());
}
@Test
@@ -207,30 +211,28 @@ public class ObjectCodecsTest {
@Test
public void testSerializeFailsWhenNoCustomCodecAndFallbackDisabled() throws Exception {
- try {
- ObjectCodecs.newBuilder().setAllowDefaultCodec(false).build().serialize("X", "Y");
- fail("Expected exception");
- } catch (SerializationException e) {
- assertThat(e)
- .hasMessageThat()
- .isEqualTo("No codec available for X and default fallback disabled");
- }
+ ObjectCodecs underTest = new ObjectCodecs(
+ ObjectCodecRegistry.newBuilder().setAllowDefaultCodec(false).build());
+ SerializationException.NoCodecException expected = expectThrows(
+ SerializationException.NoCodecException.class,
+ () -> underTest.serialize("X", "Y"));
+ assertThat(expected)
+ .hasMessageThat()
+ .isEqualTo("No codec available for X and default fallback disabled");
}
@Test
public void testDeserializeFailsWhenNoCustomCodecAndFallbackDisabled() throws Exception {
ByteString serialized = ByteString.copyFromUtf8("doesn't matter");
- try {
- ObjectCodecs.newBuilder()
- .setAllowDefaultCodec(false)
- .build()
- .deserialize(ByteString.copyFromUtf8("X"), serialized);
- fail("Expected exception");
- } catch (SerializationException e) {
- assertThat(e)
- .hasMessageThat()
- .isEqualTo("No codec available for X and default fallback disabled");
- }
+ ObjectCodecs underTest = new ObjectCodecs(
+ ObjectCodecRegistry.newBuilder().setAllowDefaultCodec(false).build());
+ SerializationException.NoCodecException expected = expectThrows(
+ SerializationException.NoCodecException.class,
+ () -> underTest.deserialize(ByteString.copyFromUtf8("X"), serialized));
+
+ assertThat(expected)
+ .hasMessageThat()
+ .isEqualTo("No codec available for X and default fallback disabled");
}
@Test
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 692f602bc2..f6532fcb61 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
@@ -30,13 +30,13 @@ public class PrecomputedValueCodecTest extends AbstractObjectCodecTest<Precomput
public PrecomputedValueCodecTest() {
super(
new PrecomputedValueCodec(
- () ->
- ObjectCodecs.newBuilder()
+ () -> new ObjectCodecs(
+ ObjectCodecRegistry.newBuilder()
.asClassKeyedBuilder()
// Note no PathFragmentCodec.
.add(String.class, StringCodecs.asciiOptimized())
.add(Label.class, LabelCodec.INSTANCE)
- .build()),
+ .build())),
new PrecomputedValue(PathFragment.create("java serializable 1")),
new PrecomputedValue(PathFragment.create("java serializable 2")),
new PrecomputedValue("first string"),