4 "git.curoverse.com/arvados.git/sdk/go/blockdigest"
9 // This captures the result we expect from
10 // ReadCollections.Summarize(). Because CollectionUuidToIndex is
11 // indeterminate, we replace BlockToCollectionIndices with
12 // BlockToCollectionUuids.
13 type ExpectedSummary struct {
14 OwnerToCollectionSize map[string]int
15 BlockToReplication map[blockdigest.BlockDigest]int
16 BlockToCollectionUuids map[blockdigest.BlockDigest][]string
19 func CompareSummarizedReadCollections(t *testing.T,
20 summarized ReadCollections,
21 expected ExpectedSummary) {
23 if !reflect.DeepEqual(summarized.OwnerToCollectionSize,
24 expected.OwnerToCollectionSize) {
25 t.Fatalf("Expected summarized OwnerToCollectionSize to look like %+v but instead it is %+v",
26 expected.OwnerToCollectionSize,
27 summarized.OwnerToCollectionSize)
30 if !reflect.DeepEqual(summarized.BlockToReplication,
31 expected.BlockToReplication) {
32 t.Fatalf("Expected summarized BlockToReplication to look like %+v but instead it is %+v",
33 expected.BlockToReplication,
34 summarized.BlockToReplication)
37 summarizedBlockToCollectionUuids :=
38 make(map[blockdigest.BlockDigest]map[string]struct{})
39 for digest, indices := range summarized.BlockToCollectionIndices {
40 uuidSet := make(map[string]struct{})
41 summarizedBlockToCollectionUuids[digest] = uuidSet
42 for _, index := range indices {
43 uuidSet[summarized.CollectionIndexToUuid[index]] = struct{}{}
47 expectedBlockToCollectionUuids :=
48 make(map[blockdigest.BlockDigest]map[string]struct{})
49 for digest, uuidSlice := range expected.BlockToCollectionUuids {
50 uuidSet := make(map[string]struct{})
51 expectedBlockToCollectionUuids[digest] = uuidSet
52 for _, uuid := range uuidSlice {
53 uuidSet[uuid] = struct{}{}
57 if !reflect.DeepEqual(summarizedBlockToCollectionUuids,
58 expectedBlockToCollectionUuids) {
59 t.Fatalf("Expected summarized BlockToCollectionUuids to look like %+v but instead it is %+v", expectedBlockToCollectionUuids, summarizedBlockToCollectionUuids)
63 func TestSummarizeSimple(t *testing.T) {
64 rc := MakeTestReadCollections([]TestCollectionSpec{TestCollectionSpec{
71 c := rc.UuidToCollection["col0"]
73 blockDigest1 := blockdigest.MakeTestBlockDigest(1)
74 blockDigest2 := blockdigest.MakeTestBlockDigest(2)
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}},
82 CompareSummarizedReadCollections(t, rc, expected)
85 func TestSummarizeOverlapping(t *testing.T) {
86 rc := MakeTestReadCollections([]TestCollectionSpec{
99 c0 := rc.UuidToCollection["col0"]
100 c1 := rc.UuidToCollection["col1"]
102 blockDigest1 := blockdigest.MakeTestBlockDigest(1)
103 blockDigest2 := blockdigest.MakeTestBlockDigest(2)
104 blockDigest3 := blockdigest.MakeTestBlockDigest(3)
106 expected := ExpectedSummary{
107 OwnerToCollectionSize: map[string]int{
108 c0.OwnerUuid: c0.TotalSize,
109 c1.OwnerUuid: c1.TotalSize,
111 BlockToReplication: map[blockdigest.BlockDigest]int{
116 BlockToCollectionUuids: map[blockdigest.BlockDigest][]string{
117 blockDigest1: []string{c0.Uuid},
118 blockDigest2: []string{c0.Uuid, c1.Uuid},
119 blockDigest3: []string{c1.Uuid},
123 CompareSummarizedReadCollections(t, rc, expected)