github.com/avahowell/sia@v0.5.1-beta.0.20160524050156-83dcc3d37c94/modules/host/storagemanager/storagefolders_errors_test.go (about) 1 package storagemanager 2 3 import ( 4 "errors" 5 "path/filepath" 6 "testing" 7 8 "github.com/NebulousLabs/Sia/modules" 9 ) 10 11 // TestClosedStorageManagerOperations tries a bunch of operations on the storage manager 12 // after it has been closed. 13 func TestClosedStorageManagerOperations(t *testing.T) { 14 if testing.Short() { 15 t.SkipNow() 16 } 17 t.Parallel() 18 smt, err := newStorageManagerTester("TestClosedStorageManagerOperations") 19 if err != nil { 20 t.Fatal(err) 21 } 22 // Close the storage manager. 23 err = smt.sm.Close() 24 if err != nil { 25 t.Fatal(err) 26 } 27 defer smt.Close() 28 29 err = smt.sm.AddStorageFolder(filepath.Join(smt.persistDir, modules.StorageManagerDir), minimumStorageFolderSize) 30 if err != errStorageManagerClosed { 31 t.Fatal("expected errStorageManagerClosed:", err) 32 } 33 err = smt.sm.RemoveStorageFolder(1, true) 34 if err != errStorageManagerClosed { 35 t.Fatal("expected errStorageManagerClosed:", err) 36 } 37 err = smt.sm.ResizeStorageFolder(0, minimumStorageFolderSize) 38 if err != errStorageManagerClosed { 39 t.Fatal("expected errStorageManagerClosed:", err) 40 } 41 // Number of storage folders should still be zero. 42 if len(smt.sm.storageFolders) != 0 { 43 t.Error("storage folder should not have been added to the storage manager as the storage manager is closed.") 44 } 45 } 46 47 // faultyRand is a mocked filesystem which can be configured to fail for certain 48 // files and folders. 49 type faultyRand struct { 50 productionDependencies 51 } 52 53 // errMockBadRand is returned when a mocked dependency is intentionally 54 // returning an error instead of randomly generating data. 55 var errMockBadRand = errors.New("mocked randomness is intentionally failing") 56 57 // randRead replaces the production dependency crypto/rand.Read with a faulty 58 // reader - an error is always returned. 59 func (faultyRand) randRead([]byte) (int, error) { 60 return 0, errMockBadRand 61 } 62 63 // TestAddFolderNoRand tries adding a folder to the storage manager when the 64 // cryptographic randomness generator is not working. 65 func TestAddFolderNoRand(t *testing.T) { 66 if testing.Short() { 67 t.SkipNow() 68 } 69 t.Parallel() 70 smt, err := newStorageManagerTester("TestAddFolderNoRand") 71 if err != nil { 72 t.Fatal(err) 73 } 74 defer smt.Close() 75 76 // Replace the storage manager with one that cannot do randomness 77 // operations. 78 err = smt.sm.Close() 79 if err != nil { 80 t.Fatal(err) 81 } 82 smt.sm, err = newStorageManager(faultyRand{}, filepath.Join(smt.persistDir, modules.StorageManagerDir)) 83 if err != nil { 84 t.Fatal(err) 85 } 86 err = smt.sm.AddStorageFolder(filepath.Join(smt.persistDir, modules.StorageManagerDir), minimumStorageFolderSize) 87 if err != errMockBadRand { 88 t.Fatal(err) 89 } 90 // Number of storage folders should be zero. 91 storageFolders := smt.sm.StorageFolders() 92 if len(storageFolders) != 0 { 93 t.Error("storage folder was added to the storage manager despite a dependency failure") 94 } 95 }