1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
10 "git.arvados.org/arvados.git/sdk/go/arvados"
11 check "gopkg.in/check.v1"
14 var _ = check.Suite(&confirmedReplicationSuite{})
16 type confirmedReplicationSuite struct {
17 blockStateMap *BlockStateMap
21 func (s *confirmedReplicationSuite) SetUpTest(c *check.C) {
22 t, _ := time.Parse(time.RFC3339Nano, time.RFC3339Nano)
23 s.mtime = t.UnixNano()
24 s.blockStateMap = NewBlockStateMap()
25 s.blockStateMap.AddReplicas(&KeepMount{KeepMount: arvados.KeepMount{
27 StorageClasses: map[string]bool{"default": true},
28 }}, []arvados.KeepServiceIndexEntry{
29 {SizedDigest: knownBlkid(10), Mtime: s.mtime},
31 s.blockStateMap.AddReplicas(&KeepMount{KeepMount: arvados.KeepMount{
33 StorageClasses: map[string]bool{"default": true},
34 }}, []arvados.KeepServiceIndexEntry{
35 {SizedDigest: knownBlkid(20), Mtime: s.mtime},
39 func (s *confirmedReplicationSuite) TestZeroReplication(c *check.C) {
40 n := s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(404), knownBlkid(409)}, []string{"default"})
41 c.Check(n, check.Equals, 0)
42 n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(10), knownBlkid(404)}, []string{"default"})
43 c.Check(n, check.Equals, 0)
44 n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(10), knownBlkid(404)}, nil)
45 c.Check(n, check.Equals, 0)
48 func (s *confirmedReplicationSuite) TestBlocksWithDifferentReplication(c *check.C) {
49 n := s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(10), knownBlkid(20)}, []string{"default"})
50 c.Check(n, check.Equals, 1)
53 func (s *confirmedReplicationSuite) TestBlocksInDifferentClasses(c *check.C) {
54 s.blockStateMap.AddReplicas(&KeepMount{KeepMount: arvados.KeepMount{
56 StorageClasses: map[string]bool{"three": true},
57 }}, []arvados.KeepServiceIndexEntry{
58 {SizedDigest: knownBlkid(30), Mtime: s.mtime},
61 n := s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(30)}, []string{"three"})
62 c.Check(n, check.Equals, 3)
63 n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(20), knownBlkid(30)}, []string{"default"})
64 c.Check(n, check.Equals, 0) // block 30 has repl 0 @ "default"
65 n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(20), knownBlkid(30)}, []string{"three"})
66 c.Check(n, check.Equals, 0) // block 20 has repl 0 @ "three"
67 n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(20), knownBlkid(30)}, nil)
68 c.Check(n, check.Equals, 2)
71 func (s *confirmedReplicationSuite) TestBlocksOnMultipleMounts(c *check.C) {
72 s.blockStateMap.AddReplicas(&KeepMount{KeepMount: arvados.KeepMount{
74 StorageClasses: map[string]bool{"default": true, "four": true},
75 }}, []arvados.KeepServiceIndexEntry{
76 {SizedDigest: knownBlkid(40), Mtime: s.mtime},
77 {SizedDigest: knownBlkid(41), Mtime: s.mtime},
79 s.blockStateMap.AddReplicas(&KeepMount{KeepMount: arvados.KeepMount{
81 StorageClasses: map[string]bool{"four": true},
82 }}, []arvados.KeepServiceIndexEntry{
83 {SizedDigest: knownBlkid(40), Mtime: s.mtime},
84 {SizedDigest: knownBlkid(41), Mtime: s.mtime},
86 n := s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(40), knownBlkid(41)}, []string{"default"})
87 c.Check(n, check.Equals, 2)
88 n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(40), knownBlkid(41)}, []string{"four"})
89 c.Check(n, check.Equals, 4)
90 n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(40), knownBlkid(41)}, []string{"default", "four"})
91 c.Check(n, check.Equals, 2)
92 n = s.blockStateMap.GetConfirmedReplication([]arvados.SizedDigest{knownBlkid(40), knownBlkid(41)}, nil)
93 c.Check(n, check.Equals, 4)