7167: when the config file does not contain '/', use $HOME/.config/arvados/<filename>.
[arvados.git] / services / keepstore / volume_generic_test.go
index 74c5b2a7ef7ea86538558b84ab976c142098f414..7ef079f1f7ac5b588c87e31918739db77a22ab82 100644 (file)
@@ -24,6 +24,7 @@ func DoGenericVolumeTests(t *testing.T, factory TestableVolumeFactory) {
        testGet(t, factory)
        testGetNoSuchBlock(t, factory)
 
+       testCompareNonexistent(t, factory)
        testCompareSameContent(t, factory, TestHash, TestBlock)
        testCompareSameContent(t, factory, EmptyHash, EmptyBlock)
        testCompareWithCollision(t, factory, TestHash, TestBlock, []byte("baddata"))
@@ -95,6 +96,19 @@ func testGetNoSuchBlock(t *testing.T, factory TestableVolumeFactory) {
        }
 }
 
+// Compare() should return os.ErrNotExist if the block does not exist.
+// Otherwise, writing new data causes CompareAndTouch() to generate
+// error logs even though everything is working fine.
+func testCompareNonexistent(t *testing.T, factory TestableVolumeFactory) {
+       v := factory(t)
+       defer v.Teardown()
+
+       err := v.Compare(TestHash, TestBlock)
+       if err != os.ErrNotExist {
+               t.Errorf("Got err %T %q, expected os.ErrNotExist", err, err)
+       }
+}
+
 // Put a test block and compare the locator with same content
 // Test should pass for both writable and read-only volumes
 func testCompareSameContent(t *testing.T, factory TestableVolumeFactory, testHash string, testData []byte) {