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  }