aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/util
diff options
context:
space:
mode:
authorGravatar Michajlo Matijkiw <michajlo@google.com>2016-12-15 17:25:08 +0000
committerGravatar John Cater <jcater@google.com>2016-12-15 20:38:55 +0000
commite3db95e855ac11f161d24d472efd488dc4085dfe (patch)
tree421e1c652eabd57b6ab0925ba9fa4e7876cfc742 /src/test/java/com/google/devtools/build/lib/util
parent49757602c4ca9e48081f98850007b2ef17427b46 (diff)
Streamline Fingerprint implementation
Thread all updates through a CodedOutputStream. This has the benefit of potentially hashing less data, as many int values can be represented more compactly, and reducing the churn of hashing strings (generally), since CodedOutputStream is already heavily optimized for this. While the buffer size is a little generous, it winds up paying off. -- PiperOrigin-RevId: 142151062 MOS_MIGRATED_REVID=142151062
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/util')
-rw-r--r--src/test/java/com/google/devtools/build/lib/util/FingerprintTest.java34
1 files changed, 30 insertions, 4 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/util/FingerprintTest.java b/src/test/java/com/google/devtools/build/lib/util/FingerprintTest.java
index 22e9fe79b7..faf974578f 100644
--- a/src/test/java/com/google/devtools/build/lib/util/FingerprintTest.java
+++ b/src/test/java/com/google/devtools/build/lib/util/FingerprintTest.java
@@ -23,6 +23,7 @@ import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -38,13 +39,13 @@ public class FingerprintTest {
Fingerprint f1Latin1 = new Fingerprint();
for (String s : list1) {
f1.addString(s);
- f1Latin1.addStringLatin1(s);
+ f1Latin1.addString(s);
}
Fingerprint f2 = new Fingerprint();
Fingerprint f2Latin1 = new Fingerprint();
for (String s : list2) {
f2.addString(s);
- f2Latin1.addStringLatin1(s);
+ f2Latin1.addString(s);
}
assertThat(f1.hexDigestAndReset()).isNotEqualTo(f2.hexDigestAndReset());
assertThat(f1Latin1.hexDigestAndReset()).isNotEqualTo(f2Latin1.hexDigestAndReset());
@@ -113,10 +114,10 @@ public class FingerprintTest {
public void addPath() throws Exception {
PathFragment pf = new PathFragment("/etc/pwd");
assertThat(new Fingerprint().addPath(pf).hexDigestAndReset())
- .isEqualTo("01cc3eeea3a2f58e447e824f9f62d3d1");
+ .isEqualTo("63ab5c47c117635407a1af6377e216bc");
Path p = new InMemoryFileSystem(BlazeClock.instance()).getPath(pf);
assertThat(new Fingerprint().addPath(p).hexDigestAndReset())
- .isEqualTo("01cc3eeea3a2f58e447e824f9f62d3d1");
+ .isEqualTo("63ab5c47c117635407a1af6377e216bc");
}
@Test
@@ -141,4 +142,29 @@ public class FingerprintTest {
assertThat(f1).isEqualTo(new Fingerprint().addNullableString(null).hexDigestAndReset());
assertThat(f1).isNotEqualTo(new Fingerprint().addNullableString("").hexDigestAndReset());
}
+
+ @Test
+ public void testReusableAfterReset() throws Exception {
+ Fingerprint fp = new Fingerprint();
+ String f1 = convolutedFingerprintAndReset(fp);
+ String f2 = convolutedFingerprintAndReset(fp);
+ assertThat(f1).isEqualTo(f2);
+ }
+
+ private static String convolutedFingerprintAndReset(Fingerprint fingerprint) {
+ return fingerprint
+ .addBoolean(false)
+ .addBytes(new byte[10])
+ .addBytes(new byte[10], 0, 5)
+ .addInt(20)
+ .addLong(30)
+ .addNullableBoolean(null)
+ .addNullableInt(null)
+ .addNullableString(null)
+ .addPath(new PathFragment("/foo/bar"))
+ .addPaths(ImmutableList.of(new PathFragment("/foo/bar")))
+ .addString("baz")
+ .addUUID(UUID.fromString("12345678-1234-1234-1234-1234567890ab"))
+ .hexDigestAndReset();
+ }
}