7329: improved TestableVolumeManagerFactory method signature, teardown logic, comment...
authorradhika <radhika@curoverse.com>
Wed, 23 Sep 2015 20:29:02 +0000 (16:29 -0400)
committerradhika <radhika@curoverse.com>
Wed, 23 Sep 2015 20:29:02 +0000 (16:29 -0400)
services/keepstore/handlers_with_generic_volume_test.go [moved from services/keepstore/volume_keepstore_generic_test.go with 74% similarity]
services/keepstore/volume_unix_test.go

similarity index 74%
rename from services/keepstore/volume_keepstore_generic_test.go
rename to services/keepstore/handlers_with_generic_volume_test.go
index 0e5df5bf0590a30c508bd049ef58370be3439d0c..90094f311722c1cdd71ba94f51d87a9f867a8b57 100644 (file)
@@ -5,15 +5,16 @@ import (
        "testing"
 )
 
-// A TestableVolumeManagerFactory creates a volume manager with one or more TestableVolumes.
-// The factory function, and the TestableVolumes it returns, can use "t" to write
+// A TestableVolumeManagerFactory creates a volume manager with at least two TestableVolume instances.
+// The factory function, and the TestableVolume instances it returns, can use "t" to write
 // logs, fail the current test, etc.
-type TestableVolumeManagerFactory func(t *testing.T) []TestableVolume
+type TestableVolumeManagerFactory func(t *testing.T) (*RRVolumeManager, []TestableVolume)
 
-// DoGenericVolumeTests runs a set of tests that every TestableVolume
-// is expected to pass. It calls factory to create a new TestableVolume
-// for each test case, to avoid leaking state between tests.
-func DoGenericVolumeFunctionalTests(t *testing.T, factory TestableVolumeManagerFactory) {
+// DoHandlersWithGenericVolumeTests runs a set of handler tests with a
+// Volume Manager comprised of TestableVolume instances.
+// It calls factory to create a volume manager with TestableVolume
+// instances for each test case, to avoid leaking state between tests.
+func DoHandlersWithGenericVolumeTests(t *testing.T, factory TestableVolumeManagerFactory) {
        testGetBlock(t, factory, TestHash, TestBlock)
        testGetBlock(t, factory, EmptyHash, EmptyBlock)
        testPutRawBadDataGetBlock(t, factory, TestHash, TestBlock, []byte("baddata"))
@@ -24,12 +25,22 @@ func DoGenericVolumeFunctionalTests(t *testing.T, factory TestableVolumeManagerF
        testPutBlockCorrupt(t, factory, EmptyHash, EmptyBlock, []byte("baddata"))
 }
 
+// Setup RRVolumeManager with TestableVolumes
+func setupHandlersWithGenericVolumeTest(t *testing.T, factory TestableVolumeManagerFactory) []TestableVolume {
+       vm, testableVolumes := factory(t)
+       KeepVM = vm
+
+       for _, v := range testableVolumes {
+               defer v.Teardown()
+       }
+       defer KeepVM.Close()
+
+       return testableVolumes
+}
+
 // Put a block using PutRaw in just one volume and Get it using GetBlock
 func testGetBlock(t *testing.T, factory TestableVolumeManagerFactory, testHash string, testBlock []byte) {
-       testableVolumes := factory(t)
-       defer testableVolumes[0].Teardown()
-       defer testableVolumes[1].Teardown()
-       defer KeepVM.Close()
+       testableVolumes := setupHandlersWithGenericVolumeTest(t, factory)
 
        // Put testBlock in one volume
        testableVolumes[1].PutRaw(testHash, testBlock)
@@ -47,10 +58,7 @@ func testGetBlock(t *testing.T, factory TestableVolumeManagerFactory, testHash s
 // Put a bad block using PutRaw and get it.
 func testPutRawBadDataGetBlock(t *testing.T, factory TestableVolumeManagerFactory,
        testHash string, testBlock []byte, badData []byte) {
-       testableVolumes := factory(t)
-       defer testableVolumes[0].Teardown()
-       defer testableVolumes[1].Teardown()
-       defer KeepVM.Close()
+       testableVolumes := setupHandlersWithGenericVolumeTest(t, factory)
 
        // Put bad data for testHash in both volumes
        testableVolumes[0].PutRaw(testHash, badData)
@@ -65,10 +73,7 @@ func testPutRawBadDataGetBlock(t *testing.T, factory TestableVolumeManagerFactor
 
 // Invoke PutBlock twice to ensure CompareAndTouch path is tested.
 func testPutBlock(t *testing.T, factory TestableVolumeManagerFactory, testHash string, testBlock []byte) {
-       testableVolumes := factory(t)
-       defer testableVolumes[0].Teardown()
-       defer testableVolumes[1].Teardown()
-       defer KeepVM.Close()
+       setupHandlersWithGenericVolumeTest(t, factory)
 
        // PutBlock
        if err := PutBlock(testBlock, testHash); err != nil {
@@ -92,10 +97,7 @@ func testPutBlock(t *testing.T, factory TestableVolumeManagerFactory, testHash s
 // Put a bad block using PutRaw, overwrite it using PutBlock and get it.
 func testPutBlockCorrupt(t *testing.T, factory TestableVolumeManagerFactory,
        testHash string, testBlock []byte, badData []byte) {
-       testableVolumes := factory(t)
-       defer testableVolumes[0].Teardown()
-       defer testableVolumes[1].Teardown()
-       defer KeepVM.Close()
+       testableVolumes := setupHandlersWithGenericVolumeTest(t, factory)
 
        // Put bad data for testHash in both volumes
        testableVolumes[0].PutRaw(testHash, badData)
index dd6214d61a0ce26c14007ad1a2d1248c4e461a61..924637f58e5004f1cec307266c87c0b53ae81d03 100644 (file)
@@ -86,8 +86,8 @@ func TestUnixVolumeWithGenericTestsSerialized(t *testing.T) {
 }
 
 // serialize = false; readonly = false
-func TestUnixVolumeManagerWithGenericTests(t *testing.T) {
-       DoGenericVolumeFunctionalTests(t, func(t *testing.T) []TestableVolume {
+func TestUnixVolumeHandlersWithGenericVolumeTests(t *testing.T) {
+       DoHandlersWithGenericVolumeTests(t, func(t *testing.T) (*RRVolumeManager, []TestableVolume) {
                vols := make([]Volume, 2)
                testableUnixVols := make([]TestableVolume, 2)
 
@@ -97,9 +97,7 @@ func TestUnixVolumeManagerWithGenericTests(t *testing.T) {
                        testableUnixVols[i] = v
                }
 
-               KeepVM = MakeRRVolumeManager(vols)
-
-               return testableUnixVols
+               return MakeRRVolumeManager(vols), testableUnixVols
        })
 }