func TestMain(m *testing.M) { security.SetReadFileFn(securitytest.Asset) randutil.SeedForTests() serverutils.InitTestServerFactory(server.TestServerFactory) serverutils.InitTestClusterFactory(testcluster.TestClusterFactory) os.Exit(m.Run()) }
func TestMain(m *testing.M) { randutil.SeedForTests() serverutils.InitTestServerFactory(server.TestServerFactory) serverutils.InitTestClusterFactory(testcluster.TestClusterFactory) // Create a set of all protos we believe to be marshalled downstream of raft. // After the tests are run, we'll subtract the encountered protos from this // set. notBelowRaftProtos := make(map[reflect.Type]struct{}, len(belowRaftGoldenProtos)) for typ := range belowRaftGoldenProtos { notBelowRaftProtos[typ] = struct{}{} } // Before running the tests, enable instrumentation that tracks protos which // are marshalled downstream of raft. stopTrackingAndGetTypes := storage.TrackRaftProtos() code := m.Run() // Only do this verification if the associated test was run. Without this // condition, the verification here would spuriously fail when running a // small subset of tests e.g. as we often do with `stress`. if verifyBelowRaftProtos { failed := false // Retrieve all the observed downstream-of-raft protos and confirm that they // are all present in our expected set. for _, typ := range stopTrackingAndGetTypes() { if _, ok := belowRaftGoldenProtos[typ]; ok { delete(notBelowRaftProtos, typ) } else { failed = true fmt.Printf("%s: missing fixture!\n", typ) } } // Confirm that our expected set is now empty; we don't want to cement any // protos needlessly. for typ := range notBelowRaftProtos { failed = true fmt.Printf("%s: not observed below raft!\n", typ) } // Make sure our error messages make it out. if failed && code == 0 { code = 1 } } os.Exit(code) }