7179: Improve description of how races must be handled.
[arvados.git] / services / keepstore / volume_test.go
index c5a7491b3d542951983ad67e7eec29baa972f966..34dcbdc8cfb867f92147360a0eaaec647392a5c3 100644 (file)
@@ -10,6 +10,21 @@ import (
        "time"
 )
 
+// A TestableVolume allows test suites to manipulate the state of an
+// underlying Volume, in order to test behavior in cases that are
+// 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)
+       // Specify the value Mtime() should return, until the next
+       // call to Touch, TouchWithDate, or Put.
+       TouchWithDate(locator string, lastPut time.Time)
+       // Clean up, delete temporary files.
+       Teardown()
+}
+
 // MockVolumes are test doubles for Volumes, used to test handlers.
 type MockVolume struct {
        Store      map[string][]byte