github.com/johnathanhowell/sia@v0.5.1-beta.0.20160524050156-83dcc3d37c94/persist/json_test.go (about) 1 package persist 2 3 import ( 4 "bytes" 5 "os" 6 "testing" 7 8 "github.com/NebulousLabs/Sia/build" 9 ) 10 11 // TestSaveLoad checks that saving and loading data behaves as expected. 12 func TestSaveLoad(t *testing.T) { 13 var meta = Metadata{"TestSaveLoad", "0.1"} 14 var saveData int = 3 15 buf := new(bytes.Buffer) 16 17 // save data to buffer 18 err := Save(meta, saveData, buf) 19 if err != nil { 20 t.Fatal(err) 21 } 22 data := buf.Bytes() 23 24 // load valid data 25 var loadData int 26 err = Load(meta, &loadData, bytes.NewReader(data)) 27 if err != nil { 28 t.Fatal(err) 29 } 30 if loadData != saveData { 31 t.Fatalf("loaded data (%v) does not match saved data (%v)", loadData, saveData) 32 } 33 34 // load with bad metadata 35 err = Load(Metadata{"BadTestSaveLoad", "0.1"}, &loadData, bytes.NewReader(data)) 36 if err != ErrBadHeader { 37 t.Fatal("expected ErrBadHeader, got", err) 38 } 39 err = Load(Metadata{"TestSaveLoad", "-1"}, &loadData, bytes.NewReader(data)) 40 if err != ErrBadVersion { 41 t.Fatal("expected ErrBadVersion, got", err) 42 } 43 44 // corrupt data, moving back to front 45 data[21] = '}' 46 err = Load(meta, &loadData, bytes.NewReader(data)) 47 if err == nil { 48 t.Fatal("expected error when loading corrupted data") 49 } 50 data[14] = '}' 51 err = Load(meta, &loadData, bytes.NewReader(data)) 52 if err == nil { 53 t.Fatal("expected error when loading corrupted data") 54 } 55 data[0] = '}' 56 err = Load(meta, &loadData, bytes.NewReader(data)) 57 if err == nil { 58 t.Fatal("expected error when loading corrupted data") 59 } 60 } 61 62 // TestSaveLoadFile tests that saving and loading a file without fsync properly 63 // stores and fetches data. 64 func TestSaveLoadFile(t *testing.T) { 65 var meta = Metadata{"TestSaveLoadFile", "0.1"} 66 var saveData int = 3 67 68 os.MkdirAll(build.TempDir("persist"), 0777) 69 filename := build.TempDir("persist", "TestSaveLoadFile") 70 err := SaveFile(meta, saveData, filename) 71 if err != nil { 72 t.Fatal(err) 73 } 74 75 var loadData int 76 err = LoadFile(meta, &loadData, filename) 77 if err != nil { 78 t.Fatal(err) 79 } 80 if loadData != saveData { 81 t.Fatalf("loaded data (%v) does not match saved data (%v)", loadData, saveData) 82 } 83 } 84 85 // TestSaveLoadFileSync test that saving and loading a file with fsync properly 86 // stores and fetches data. 87 func TestSaveLoadFileSync(t *testing.T) { 88 var meta = Metadata{"TestSaveLoadFileFsync", "0.1"} 89 var saveData int = 3 90 91 os.MkdirAll(build.TempDir("persist"), 0777) 92 filename := build.TempDir("persist", "TestSaveLoadFile") 93 err := SaveFileSync(meta, saveData, filename) 94 if err != nil { 95 t.Fatal(err) 96 } 97 98 var loadData int 99 err = LoadFile(meta, &loadData, filename) 100 if err != nil { 101 t.Fatal(err) 102 } 103 if loadData != saveData { 104 t.Fatalf("loaded data (%v) does not match saved data (%v)", loadData, saveData) 105 } 106 }