github.com/google/fleetspeak@v0.1.15-0.20240426164851-4f31f62c1aea/fleetspeak/src/server/dbtesting/dbtesting.go (about) 1 package dbtesting 2 3 import ( 4 "testing" 5 6 "github.com/google/fleetspeak/fleetspeak/src/common" 7 "github.com/google/fleetspeak/fleetspeak/src/server/db" 8 ) 9 10 // DbTestEnv has to be implemented for each datastore where data store tests are expected to run. 11 type DbTestEnv interface { 12 // Creates the database testing environment. Called once per database test suite. 13 Create() error 14 // Cleans the database testing environment before every test and returns a new Store instance to be used by the test. 15 Clean() (db.Store, error) 16 // Destroys the database testing environment after all the tests have run. Called once per database test suite. 17 Destroy() error 18 } 19 20 // Predefined client ids to be used in tests. 21 var clientID, _ = common.BytesToClientID([]byte{0, 0, 0, 0, 0, 0, 0, 1}) 22 var clientID2, _ = common.BytesToClientID([]byte{0, 0, 0, 0, 0, 0, 0, 2}) 23 var clientID3, _ = common.BytesToClientID([]byte{0, 0, 0, 0, 0, 0, 0, 3}) 24 25 // RunTestSuite runs a suite of databases tests. 26 func runTestSuite(t *testing.T, env DbTestEnv, tests map[string]func(*testing.T, db.Store)) { 27 for n, fn := range tests { 28 ms, err := env.Clean() 29 if err != nil { 30 t.Fatalf("Can't clean the datastore for test '%v': %v", n, err) 31 } 32 t.Run(n, func(t *testing.T) { 33 fn(t, ms) 34 }) 35 } 36 } 37 38 // DataStoreTestSuite combines all test suites for datastore testing. 39 func DataStoreTestSuite(t *testing.T, env DbTestEnv) { 40 if err := env.Create(); err != nil { 41 t.Fatalf("Can't create the datastore: %v", err) 42 } 43 44 messageStoreTestSuite(t, env) 45 clientStoreTestSuite(t, env) 46 broadcastStoreTestSuite(t, env) 47 fileStoreTestSuite(t, env) 48 integrationTestSuite(t, env) 49 50 if err := env.Destroy(); err != nil { 51 t.Fatalf("Can't destroy the datastore: %v", err) 52 } 53 }