github.com/google/fleetspeak@v0.1.15-0.20240426164851-4f31f62c1aea/fleetspeak/src/server/dbtesting/filestore_suite.go (about) 1 package dbtesting 2 3 import ( 4 "bytes" 5 "context" 6 "io" 7 "testing" 8 9 "github.com/google/fleetspeak/fleetspeak/src/server/db" 10 "github.com/google/fleetspeak/fleetspeak/src/server/sertesting" 11 ) 12 13 // FileStoreTest tests a FileStore. 14 func FileStoreTest(t *testing.T, fs db.Store) { 15 ctx := context.Background() 16 17 fakeTime := sertesting.FakeNow(84) 18 defer fakeTime.Revert() 19 20 data := []byte("The quick sly fox jumped over the lazy dogs.") 21 22 if err := fs.StoreFile(ctx, "testService", "testFile", bytes.NewReader(data)); err != nil { 23 t.Errorf("Error from StoreFile(testService, testFile): %v", err) 24 } 25 26 ts, err := fs.StatFile(ctx, "testService", "testFile") 27 if err != nil { 28 t.Errorf("Error from StatFile(testService, testFile): %v", err) 29 } 30 if ts != fakeTime.Get() { 31 t.Errorf("Wrong result of StatfileFile(testService, testFile), want %v got %v:", fakeTime.Get(), ts) 32 } 33 34 res, ts, err := fs.ReadFile(ctx, "testService", "testFile") 35 if err != nil { 36 t.Fatalf("Error from ReadFile(testService, testFile): %v", err) 37 } 38 rb, err := io.ReadAll(res) 39 if err != nil { 40 t.Errorf("Error reading result of ReadFile(testService, testFile): %v", err) 41 } 42 if c, ok := res.(io.Closer); ok { 43 c.Close() 44 } 45 if !bytes.Equal(rb, data) || ts != fakeTime.Get() { 46 t.Errorf("Wrong result of ReadFile(testService, testFile), want (%v, %v) got (%v, %v):", 47 fakeTime.Get(), data, ts, rb) 48 } 49 50 if _, err := fs.StatFile(ctx, "testService", "missingFile"); err == nil || !fs.IsNotFound(err) { 51 t.Errorf("Wrong error for ReadFile(testService, missingFile), want IsNotFound(err)=true, got %v", err) 52 } 53 if _, _, err := fs.ReadFile(ctx, "testService", "missingFile"); err == nil || !fs.IsNotFound(err) { 54 t.Errorf("Wrong error for ReadFile(testService, missingFile), want IsNotFound(err)=true, got %v", err) 55 } 56 } 57 58 func fileStoreTestSuite(t *testing.T, env DbTestEnv) { 59 t.Run("FileStoreTestSuite", func(t *testing.T) { 60 runTestSuite(t, env, map[string]func(*testing.T, db.Store){ 61 "FileStoreTest": FileStoreTest, 62 }) 63 }) 64 }