Switched collection_test.go to use the excellent gocheck framework after seeing it...
[arvados.git] / services / datamanager / collection / collection_test.go
1 package collection
2
3 import (
4         "git.curoverse.com/arvados.git/sdk/go/blockdigest"
5         . "gopkg.in/check.v1"
6         "testing"
7 )
8
9 // Gocheck boilerplate
10 func Test(t *testing.T) {
11         TestingT(t)
12 }
13
14 // Tests that require the Keep server running
15 type MySuite struct{}
16
17 var _ = Suite(&MySuite{})
18
19 // This captures the result we expect from
20 // ReadCollections.Summarize().  Because CollectionUuidToIndex is
21 // indeterminate, we replace BlockToCollectionIndices with
22 // BlockToCollectionUuids.
23 type ExpectedSummary struct {
24         OwnerToCollectionSize  map[string]int
25         BlockToReplication     map[blockdigest.BlockDigest]int
26         BlockToCollectionUuids map[blockdigest.BlockDigest][]string
27 }
28
29 func CompareSummarizedReadCollections(c *C,
30         summarized ReadCollections,
31         expected ExpectedSummary) {
32
33         c.Assert(summarized.OwnerToCollectionSize, DeepEquals,
34                 expected.OwnerToCollectionSize)
35
36         c.Assert(summarized.BlockToReplication, DeepEquals,
37                 expected.BlockToReplication)
38
39         summarizedBlockToCollectionUuids :=
40                 make(map[blockdigest.BlockDigest]map[string]struct{})
41         for digest, indices := range summarized.BlockToCollectionIndices {
42                 uuidSet := make(map[string]struct{})
43                 summarizedBlockToCollectionUuids[digest] = uuidSet
44                 for _, index := range indices {
45                         uuidSet[summarized.CollectionIndexToUuid[index]] = struct{}{}
46                 }
47         }
48
49         expectedBlockToCollectionUuids :=
50                 make(map[blockdigest.BlockDigest]map[string]struct{})
51         for digest, uuidSlice := range expected.BlockToCollectionUuids {
52                 uuidSet := make(map[string]struct{})
53                 expectedBlockToCollectionUuids[digest] = uuidSet
54                 for _, uuid := range uuidSlice {
55                         uuidSet[uuid] = struct{}{}
56                 }
57         }
58
59         c.Assert(summarizedBlockToCollectionUuids, DeepEquals,
60                 expectedBlockToCollectionUuids)
61 }
62
63 func (s *MySuite) TestSummarizeSimple(checker *C) {
64         rc := MakeTestReadCollections([]TestCollectionSpec{TestCollectionSpec{
65                 ReplicationLevel: 5,
66                 Blocks:           []int{1, 2},
67         }})
68
69         rc.Summarize(nil)
70
71         c := rc.UuidToCollection["col0"]
72
73         blockDigest1 := blockdigest.MakeTestBlockDigest(1)
74         blockDigest2 := blockdigest.MakeTestBlockDigest(2)
75
76         expected := ExpectedSummary{
77                 OwnerToCollectionSize:  map[string]int{c.OwnerUuid: c.TotalSize},
78                 BlockToReplication:     map[blockdigest.BlockDigest]int{blockDigest1: 5, blockDigest2: 5},
79                 BlockToCollectionUuids: map[blockdigest.BlockDigest][]string{blockDigest1: []string{c.Uuid}, blockDigest2: []string{c.Uuid}},
80         }
81
82         CompareSummarizedReadCollections(checker, rc, expected)
83 }
84
85 func (s *MySuite) TestSummarizeOverlapping(checker *C) {
86         rc := MakeTestReadCollections([]TestCollectionSpec{
87                 TestCollectionSpec{
88                         ReplicationLevel: 5,
89                         Blocks:           []int{1, 2},
90                 },
91                 TestCollectionSpec{
92                         ReplicationLevel: 8,
93                         Blocks:           []int{2, 3},
94                 },
95         })
96
97         rc.Summarize(nil)
98
99         c0 := rc.UuidToCollection["col0"]
100         c1 := rc.UuidToCollection["col1"]
101
102         blockDigest1 := blockdigest.MakeTestBlockDigest(1)
103         blockDigest2 := blockdigest.MakeTestBlockDigest(2)
104         blockDigest3 := blockdigest.MakeTestBlockDigest(3)
105
106         expected := ExpectedSummary{
107                 OwnerToCollectionSize: map[string]int{
108                         c0.OwnerUuid: c0.TotalSize,
109                         c1.OwnerUuid: c1.TotalSize,
110                 },
111                 BlockToReplication: map[blockdigest.BlockDigest]int{
112                         blockDigest1: 5,
113                         blockDigest2: 8,
114                         blockDigest3: 8,
115                 },
116                 BlockToCollectionUuids: map[blockdigest.BlockDigest][]string{
117                         blockDigest1: []string{c0.Uuid},
118                         blockDigest2: []string{c0.Uuid, c1.Uuid},
119                         blockDigest3: []string{c1.Uuid},
120                 },
121         }
122
123         CompareSummarizedReadCollections(checker, rc, expected)
124 }