test: 100% coverage on blocks/set
License: MIT Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
Jakub Sztandera committed
Aug 15, 2016 at 11:53 UTC
9437b3af611de51a91e1b1313b53d3f00be852ee
1 file changed
+71
blocks/set/set_test.go
new
+71
@@ -0,0 +1,71 @@
1
+package set
2
+
3
+import (
4
+ "testing"
5
+
6
+ bu "github.com/ipfs/go-ipfs/blocks/blocksutil"
7
+ k "github.com/ipfs/go-ipfs/blocks/key"
8
+)
9
+
10
+func exampleKeys() []k.Key {
11
+ res := make([]k.Key, 1<<8)
12
+ gen := bu.NewBlockGenerator()
13
+ for i := uint64(0); i < 1<<8; i++ {
14
+ res[i] = gen.Next().Key()
15
+ }
16
+ return res
17
+}
18
+func checkSet(set BlockSet, keySlice []k.Key, t *testing.T) {
19
+ for i, key := range keySlice {
20
+ if i&(1<<2) == 0 {
21
+ if set.HasKey(key) == false {
22
+ t.Error("key should be in the set")
23
+ }
24
+ } else if i&(1<<1) == 0 {
25
+ if set.HasKey(key) == true {
26
+ t.Error("key shouldn't be in the set")
27
+ }
28
+ } else if i&(1<<0) == 0 {
29
+ if set.HasKey(key) == false {
30
+ t.Error("key should be in the set")
31
+ }
32
+ }
33
+ }
34
+}
35
+
36
+func TestSetWorks(t *testing.T) {
37
+ set := NewSimpleBlockSet()
38
+ keys := exampleKeys()
39
+
40
+ for i, key := range keys {
41
+ if i&(1<<0) == 0 {
42
+ set.AddBlock(key)
43
+ }
44
+ }
45
+ for i, key := range keys {
46
+ if i&(1<<1) == 0 {
47
+ set.RemoveBlock(key)
48
+ }
49
+ }
50
+ for i, key := range keys {
51
+ if (i)&(1<<2) == 0 {
52
+ set.AddBlock(key)
53
+ }
54
+ }
55
+
56
+ checkSet(set, keys, t)
57
+ addedKeys := set.GetKeys()
58
+
59
+ newSet := SimpleSetFromKeys(addedKeys)
60
+ // same check works on a new set
61
+ checkSet(newSet, keys, t)
62
+
63
+ bloom := set.GetBloomFilter()
64
+
65
+ for _, key := range addedKeys {
66
+ if bloom.Find([]byte(key)) == false {
67
+ t.Error("bloom doesn't contain expected key")
68
+ }
69
+ }
70
+
71
+}