consul/test-integ/peering_commontopo/sharedtopology_test.go

83 lines
2.3 KiB
Go

package peering
import (
"flag"
"testing"
)
// Tests that use commonTopo should implement sharedTopoSuite.
//
// Tests that use commonTopo are either cooperative or non-cooperative. Non-cooperative
// uses of commonTopo include is anything that may interfere with other tests, namely
// mutations, such as:
// - any calls to commonTopo.Relaunch; this is generally disruptive to other tests
// - stopping or disabling nodes
// - ...
//
// Cooperative tests should just call testFuncMayReuseCommonTopo() to ensure they
// are run in the correct `sharetopo` mode. They should also ensure they are included
// in the commonTopoSuites slice in TestSuitesOnSharedTopo.
type sharedTopoSuite interface {
testName() string
setup(*testing.T, *commonTopo)
test(*testing.T, *commonTopo)
}
var flagNoShareTopo = flag.Bool("no-share-topo", false, "do not share topology; run each test in its own isolated topology")
func runShareableSuites(t *testing.T, suites []sharedTopoSuite) {
t.Helper()
if !*flagNoShareTopo {
names := []string{}
for _, s := range suites {
names = append(names, s.testName())
}
t.Skipf(`Will run as part of "TestSuitesOnSharedTopo": %v`, names)
}
ct := NewCommonTopo(t)
for _, s := range suites {
s.setup(t, ct)
}
ct.Launch(t)
for _, s := range suites {
s := s
t.Run(s.testName(), func(t *testing.T) {
t.Parallel()
s.test(t, ct)
})
}
}
// Tests that can share topo must implement sharedTopoSuite and be appended to the sharedTopoSuites
// slice inside
func TestSuitesOnSharedTopo(t *testing.T) {
if *flagNoShareTopo {
t.Skip(`shared topo suites disabled by -no-share-topo`)
}
ct := NewCommonTopo(t)
sharedTopoSuites := []sharedTopoSuite{}
sharedTopoSuites = append(sharedTopoSuites, ac1BasicSuites...)
sharedTopoSuites = append(sharedTopoSuites, ac2DiscoChainSuites...)
sharedTopoSuites = append(sharedTopoSuites, ac3SvcDefaultsSuites...)
sharedTopoSuites = append(sharedTopoSuites, ac4ProxyDefaultsSuites...)
sharedTopoSuites = append(sharedTopoSuites, ac5_1NoSvcMeshSuites...)
for _, s := range sharedTopoSuites {
s.setup(t, ct)
}
ct.Launch(t)
for _, s := range sharedTopoSuites {
s := s
t.Run(s.testName(), func(t *testing.T) {
t.Parallel()
s.test(t, ct)
})
}
}
func TestCommonTopologySetup(t *testing.T) {
ct := NewCommonTopo(t)
ct.Launch(t)
}