// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: BUSL-1.1 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) }