2023-08-11 13:12:13 +00:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
|
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
|
2023-07-18 23:41:30 +00:00
|
|
|
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)
|
|
|
|
}
|