X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/7327d3b601a50148abead0ae226176a40937e363..8b65fac8ea0527dd99dc4c40c6e4579e50ca9de2:/services/keepstore/volume_test.go diff --git a/services/keepstore/volume_test.go b/services/keepstore/volume_test.go index 4f4ee03759..d6714365de 100644 --- a/services/keepstore/volume_test.go +++ b/services/keepstore/volume_test.go @@ -1,6 +1,8 @@ package main import ( + "bytes" + "crypto/md5" "errors" "fmt" "io" @@ -50,7 +52,7 @@ type MockVolume struct { // channel unblocks all operations. By default, Gate is a // closed channel, so all operations proceed without // blocking. See trash_worker_test.go for an example. - Gate chan struct{} + Gate chan struct{} called map[string]int mutex sync.Mutex @@ -76,11 +78,11 @@ func CreateMockVolume() *MockVolume { func (v *MockVolume) CallCount(method string) int { v.mutex.Lock() defer v.mutex.Unlock() - if c, ok := v.called[method]; !ok { + c, ok := v.called[method] + if !ok { return 0 - } else { - return c } + return c } func (v *MockVolume) gotCall(method string) { @@ -93,6 +95,24 @@ func (v *MockVolume) gotCall(method string) { } } +func (v *MockVolume) Compare(loc string, buf []byte) error { + v.gotCall("Compare") + <-v.Gate + if v.Bad { + return errors.New("Bad volume") + } else if block, ok := v.Store[loc]; ok { + if fmt.Sprintf("%x", md5.Sum(block)) != loc { + return DiskHashError + } + if bytes.Compare(buf, block) != 0 { + return CollisionError + } + return nil + } else { + return NotFoundError + } +} + func (v *MockVolume) Get(loc string) ([]byte, error) { v.gotCall("Get") <-v.Gate @@ -170,7 +190,7 @@ func (v *MockVolume) Delete(loc string) error { return MethodDisabledError } if _, ok := v.Store[loc]; ok { - if time.Since(v.Timestamps[loc]) < blob_signature_ttl { + if time.Since(v.Timestamps[loc]) < blobSignatureTTL { return nil } delete(v.Store, loc) @@ -194,3 +214,7 @@ func (v *MockVolume) String() string { func (v *MockVolume) Writable() bool { return !v.Readonly } + +func (v *MockVolume) Replication() int { + return 1 +}