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  }