test splitting is deterministic. (it is)
Juan Batiz-Benet committed
Oct 30, 2014 at 02:49 UTC
37ce1863c09ded76fbfd51969b6d46811528d7f9
1 file changed
+53
importer/chunk/splitting_test.go
new
+53
@@ -0,0 +1,53 @@
1
+package chunk
2
+
3
+import (
4
+ "bytes"
5
+ "crypto/rand"
6
+ "testing"
7
+)
8
+
9
+func randBuf(t *testing.T, size int) []byte {
10
+ buf := make([]byte, size)
11
+ if _, err := rand.Read(buf); err != nil {
12
+ t.Fatal("failed to read enough randomness")
13
+ }
14
+ return buf
15
+}
16
+
17
+func copyBuf(buf []byte) []byte {
18
+ cpy := make([]byte, len(buf))
19
+ copy(cpy, buf)
20
+ return cpy
21
+}
22
+
23
+func TestSizeSplitterIsDeterministic(t *testing.T) {
24
+
25
+ test := func() {
26
+ bufR := randBuf(t, 10000000) // crank this up to satisfy yourself.
27
+ bufA := copyBuf(bufR)
28
+ bufB := copyBuf(bufR)
29
+
30
+ chunksA := DefaultSplitter.Split(bytes.NewReader(bufA))
31
+ chunksB := DefaultSplitter.Split(bytes.NewReader(bufB))
32
+
33
+ for n := 0; ; n++ {
34
+ a, moreA := <-chunksA
35
+ b, moreB := <-chunksB
36
+
37
+ if !moreA {
38
+ if moreB {
39
+ t.Fatal("A ended, B didnt.")
40
+ }
41
+ return
42
+ }
43
+
44
+ if !bytes.Equal(a, b) {
45
+ t.Fatalf("chunk %d not equal", n)
46
+ }
47
+ }
48
+ }
49
+
50
+ for run := 0; run < 1; run++ { // crank this up to satisfy yourself.
51
+ test()
52
+ }
53
+}