X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/4659594d40987a2bab1ff75d015de5d46113692d..2697f35c5356e4aa6c0ca9c59068980c0ef25d61:/services/keepstore/volume_test.go diff --git a/services/keepstore/volume_test.go b/services/keepstore/volume_test.go index fd1a56c5eb..0b8af330fb 100644 --- a/services/keepstore/volume_test.go +++ b/services/keepstore/volume_test.go @@ -15,8 +15,6 @@ import ( "strings" "sync" "time" - - "github.com/prometheus/client_golang/prometheus" ) // A TestableVolume allows test suites to manipulate the state of an @@ -24,10 +22,14 @@ import ( // impractical to achieve with a sequence of normal Volume operations. type TestableVolume interface { Volume + // [Over]write content for a locator with the given data, // bypassing all constraints like readonly and serialize. PutRaw(locator string, data []byte) + // Returns the strings that a driver uses to record read/write operations. + ReadWriteOperationLabelValues() (r, w string) + // Specify the value Mtime() should return, until the next // call to Touch, TouchWithDate, or Put. TouchWithDate(locator string, lastPut time.Time) @@ -42,7 +44,8 @@ type MockVolume struct { Timestamps map[string]time.Time // Bad volumes return an error for every operation. - Bad bool + Bad bool + BadVolumeError error // Touchable volumes' Touch() method succeeds for a locator // that has been Put(). @@ -106,7 +109,7 @@ func (v *MockVolume) Compare(ctx context.Context, loc string, buf []byte) error v.gotCall("Compare") <-v.Gate if v.Bad { - return errors.New("Bad volume") + return v.BadVolumeError } else if block, ok := v.Store[loc]; ok { if fmt.Sprintf("%x", md5.Sum(block)) != loc { return DiskHashError @@ -124,7 +127,7 @@ func (v *MockVolume) Get(ctx context.Context, loc string, buf []byte) (int, erro v.gotCall("Get") <-v.Gate if v.Bad { - return 0, errors.New("Bad volume") + return 0, v.BadVolumeError } else if block, ok := v.Store[loc]; ok { copy(buf[:len(block)], block) return len(block), nil @@ -136,7 +139,7 @@ func (v *MockVolume) Put(ctx context.Context, loc string, block []byte) error { v.gotCall("Put") <-v.Gate if v.Bad { - return errors.New("Bad volume") + return v.BadVolumeError } if v.Readonly { return MethodDisabledError @@ -164,7 +167,7 @@ func (v *MockVolume) Mtime(loc string) (time.Time, error) { var mtime time.Time var err error if v.Bad { - err = errors.New("Bad volume") + err = v.BadVolumeError } else if t, ok := v.Timestamps[loc]; ok { mtime = t } else { @@ -213,7 +216,7 @@ func (v *MockVolume) Type() string { return "Mock" } -func (v *MockVolume) Start(opsCounters, errCounters, ioBytes *prometheus.CounterVec) error { +func (v *MockVolume) Start(vm *volumeMetricsVecs) error { return nil }