Skip to content

Commit dd130cf

Browse files
authored
[tmpnet] Unify start network flag usage between e2e and tmpnetctl (#3871)
1 parent ddcd0c1 commit dd130cf

File tree

13 files changed

+229
-117
lines changed

13 files changed

+229
-117
lines changed

tests/antithesis/config.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ func configForNewNetwork(
8989
duration time.Duration,
9090
) *Config {
9191
if defaultNetwork.Nodes == nil {
92-
defaultNetwork.Nodes = tmpnet.NewNodesOrPanic(flagVars.NodeCount())
92+
nodeCount, err := flagVars.NodeCount()
93+
require.NoError(tc, err)
94+
defaultNetwork.Nodes = tmpnet.NewNodesOrPanic(nodeCount)
9395
}
9496
if defaultNetwork.Subnets == nil && getSubnets != nil {
9597
defaultNetwork.Subnets = getSubnets(defaultNetwork.Nodes...)

tests/e2e/e2e_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,17 @@ func TestE2E(t *testing.T) {
3434
var flagVars *e2e.FlagVars
3535

3636
func init() {
37-
flagVars = e2e.RegisterFlags()
37+
flagVars = e2e.RegisterFlagsWithDefaultOwner("avalanchego-e2e")
3838
}
3939

4040
var _ = ginkgo.SynchronizedBeforeSuite(func() []byte {
4141
// Run only once in the first ginkgo process
4242

4343
tc := e2e.NewEventHandlerTestContext()
4444

45-
nodes := tmpnet.NewNodesOrPanic(flagVars.NodeCount())
45+
nodeCount, err := flagVars.NodeCount()
46+
require.NoError(tc, err)
47+
nodes := tmpnet.NewNodesOrPanic(nodeCount)
4648
subnets := vms.XSVMSubnetsOrPanic(nodes...)
4749

4850
upgrades := upgrade.Default
@@ -63,7 +65,7 @@ var _ = ginkgo.SynchronizedBeforeSuite(func() []byte {
6365
tc,
6466
flagVars,
6567
&tmpnet.Network{
66-
Owner: "avalanchego-e2e",
68+
Owner: flagVars.NetworkOwner(),
6769
DefaultFlags: tmpnet.FlagsMap{
6870
config.UpgradeFileContentKey: upgradeBase64,
6971
// Ensure a min stake duration compatible with testing staking logic

tests/fixture/e2e/env.go

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ func InitSharedTestEnvironment(t require.TestingT, envBytes []byte) {
4141
}
4242

4343
type TestEnvironment struct {
44+
// The parent directory of network directories
45+
RootNetworkDir string
4446
// The directory where the test network configuration is stored
4547
NetworkDir string
4648
// URIs used to access the API endpoints of nodes of the network
@@ -61,6 +63,7 @@ func GetEnv(tc tests.TestContext) *TestEnvironment {
6163
return nil
6264
}
6365
return &TestEnvironment{
66+
RootNetworkDir: env.RootNetworkDir,
6467
NetworkDir: env.NetworkDir,
6568
URIs: env.URIs,
6669
PreFundedKey: env.PreFundedKey,
@@ -81,8 +84,11 @@ func NewTestEnvironment(tc tests.TestContext, flagVars *FlagVars, desiredNetwork
8184

8285
var network *tmpnet.Network
8386

87+
networkCmd, err := flagVars.NetworkCmd()
88+
require.NoError(err)
89+
8490
// Consider monitoring flags for any command but stop
85-
if !flagVars.StopNetwork() {
91+
if networkCmd != StopNetworkCmd {
8692
if flagVars.StartCollectors() {
8793
require.NoError(tmpnet.StartCollectors(tc.DefaultContext(), tc.Log()))
8894
}
@@ -100,8 +106,8 @@ func NewTestEnvironment(tc tests.TestContext, flagVars *FlagVars, desiredNetwork
100106
}
101107
}
102108

103-
// Need to load the network if it is being stopped or reused
104-
if flagVars.StopNetwork() || flagVars.ReuseNetwork() {
109+
// Attempt to load the network if it may already be running
110+
if networkCmd == StopNetworkCmd || networkCmd == ReuseNetworkCmd || networkCmd == RestartNetworkCmd {
105111
networkDir := flagVars.NetworkDir()
106112
var networkSymlink string // If populated, prompts removal of the referenced symlink if --stop-network is specified
107113
if len(networkDir) == 0 {
@@ -127,7 +133,7 @@ func NewTestEnvironment(tc tests.TestContext, flagVars *FlagVars, desiredNetwork
127133
)
128134
}
129135

130-
if flagVars.StopNetwork() {
136+
if networkCmd == StopNetworkCmd {
131137
if len(networkSymlink) > 0 {
132138
// Remove the symlink to avoid attempts to reuse the stopped network
133139
tc.Log().Info("removing symlink",
@@ -144,14 +150,18 @@ func NewTestEnvironment(tc tests.TestContext, flagVars *FlagVars, desiredNetwork
144150
tc.Log().Warn("no network to stop")
145151
}
146152
os.Exit(0)
147-
} else if network != nil && flagVars.RestartNetwork() {
148-
// A network is only restarted if it is already running and stop was not requested
153+
}
154+
155+
if network != nil && networkCmd == RestartNetworkCmd {
149156
require.NoError(network.Restart(tc.DefaultContext(), tc.Log()))
150157
}
151158
}
152159

153160
// Start a new network
154161
if network == nil {
162+
// TODO(marun) Maybe accept a factory function for the desired network
163+
// that is only run when a new network will be started?
164+
155165
network = desiredNetwork
156166
runtimeConfig, err := flagVars.NodeRuntimeConfig()
157167
require.NoError(err)
@@ -160,9 +170,9 @@ func NewTestEnvironment(tc tests.TestContext, flagVars *FlagVars, desiredNetwork
160170
StartNetwork(
161171
tc,
162172
network,
173+
flagVars.RootNetworkDir(),
163174
flagVars.NetworkShutdownDelay(),
164-
flagVars.StartNetwork(),
165-
flagVars.ReuseNetwork(),
175+
networkCmd,
166176
)
167177
}
168178

@@ -171,7 +181,7 @@ func NewTestEnvironment(tc tests.TestContext, flagVars *FlagVars, desiredNetwork
171181
require.NoError(tmpnet.WaitForPromtailReadiness(tc.DefaultContext(), tc.Log()))
172182
}
173183

174-
if flagVars.StartNetwork() {
184+
if networkCmd == StartNetworkCmd {
175185
os.Exit(0)
176186
}
177187

@@ -189,6 +199,7 @@ func NewTestEnvironment(tc tests.TestContext, flagVars *FlagVars, desiredNetwork
189199
)
190200

191201
return &TestEnvironment{
202+
RootNetworkDir: flagVars.RootNetworkDir(),
192203
NetworkDir: network.Dir,
193204
URIs: uris,
194205
PrivateNetworkShutdownDelay: flagVars.NetworkShutdownDelay(),
@@ -231,8 +242,8 @@ func (te *TestEnvironment) StartPrivateNetwork(network *tmpnet.Network) {
231242
StartNetwork(
232243
te.testContext,
233244
network,
245+
te.RootNetworkDir,
234246
te.PrivateNetworkShutdownDelay,
235-
false, /* skipShutdown */
236-
false, /* reuseNetwork */
247+
EmptyNetworkCmd,
237248
)
238249
}

tests/fixture/e2e/flags.go

Lines changed: 93 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package e2e
55

66
import (
7+
"errors"
78
"flag"
89
"fmt"
910
"os"
@@ -15,39 +16,71 @@ import (
1516
"github.com/ava-labs/avalanchego/tests/fixture/tmpnet/flags"
1617
)
1718

19+
type NetworkCmd int
20+
21+
const (
22+
EmptyNetworkCmd NetworkCmd = iota
23+
StartNetworkCmd
24+
StopNetworkCmd
25+
RestartNetworkCmd
26+
ReuseNetworkCmd
27+
)
28+
1829
type FlagVars struct {
19-
runtimeConfigVars *flags.RuntimeConfigVars
20-
networkDir string
21-
reuseNetwork bool
22-
startCollectors bool
23-
checkMonitoring bool
24-
startNetwork bool
25-
stopNetwork bool
26-
restartNetwork bool
27-
nodeCount int
28-
activateFortuna bool
29-
}
30+
startNetwork bool
31+
startNetworkVars *flags.StartNetworkVars
3032

31-
func (v *FlagVars) NodeRuntimeConfig() (*tmpnet.NodeRuntimeConfig, error) {
32-
return v.runtimeConfigVars.GetNodeRuntimeConfig()
33+
startCollectors bool
34+
checkMonitoring bool
35+
36+
networkDir string
37+
reuseNetwork bool
38+
stopNetwork bool
39+
restartNetwork bool
40+
41+
activateFortuna bool
3342
}
3443

35-
func (v *FlagVars) NetworkDir() string {
36-
if !v.reuseNetwork {
37-
return ""
44+
func (v *FlagVars) NetworkCmd() (NetworkCmd, error) {
45+
cmd := EmptyNetworkCmd
46+
count := 0
47+
if v.startNetwork {
48+
cmd = StartNetworkCmd
49+
count++
3850
}
39-
if len(v.networkDir) > 0 {
40-
return v.networkDir
51+
if v.stopNetwork {
52+
cmd = StopNetworkCmd
53+
count++
4154
}
42-
return os.Getenv(tmpnet.NetworkDirEnvName)
55+
if v.restartNetwork {
56+
cmd = RestartNetworkCmd
57+
count++
58+
}
59+
if v.reuseNetwork {
60+
cmd = ReuseNetworkCmd
61+
count++
62+
}
63+
if count > 1 {
64+
return EmptyNetworkCmd, errors.New("only one of --start-network, --stop-network, --restart-network, or --reuse-network can be specified")
65+
}
66+
67+
return cmd, nil
4368
}
4469

45-
func (v *FlagVars) ReuseNetwork() bool {
46-
return v.reuseNetwork
70+
func (v *FlagVars) RootNetworkDir() string {
71+
return v.startNetworkVars.RootNetworkDir
4772
}
4873

49-
func (v *FlagVars) RestartNetwork() bool {
50-
return v.restartNetwork
74+
func (v *FlagVars) NetworkOwner() string {
75+
return v.startNetworkVars.NetworkOwner
76+
}
77+
78+
func (v *FlagVars) NodeCount() (int, error) {
79+
return v.startNetworkVars.GetNodeCount()
80+
}
81+
82+
func (v *FlagVars) NodeRuntimeConfig() (*tmpnet.NodeRuntimeConfig, error) {
83+
return v.startNetworkVars.GetNodeRuntimeConfig()
5184
}
5285

5386
func (v *FlagVars) StartCollectors() bool {
@@ -58,6 +91,16 @@ func (v *FlagVars) CheckMonitoring() bool {
5891
return v.checkMonitoring
5992
}
6093

94+
func (v *FlagVars) NetworkDir() string {
95+
if !v.reuseNetwork {
96+
return ""
97+
}
98+
if len(v.networkDir) > 0 {
99+
return v.networkDir
100+
}
101+
return os.Getenv(tmpnet.NetworkDirEnvName)
102+
}
103+
61104
func (v *FlagVars) NetworkShutdownDelay() time.Duration {
62105
if v.startCollectors {
63106
// Only return a non-zero value if we want to ensure the collectors have
@@ -67,65 +110,59 @@ func (v *FlagVars) NetworkShutdownDelay() time.Duration {
67110
return 0
68111
}
69112

70-
func (v *FlagVars) StartNetwork() bool {
71-
return v.startNetwork
72-
}
73-
74-
func (v *FlagVars) StopNetwork() bool {
75-
return v.stopNetwork
76-
}
77-
78-
func (v *FlagVars) NodeCount() int {
79-
return v.nodeCount
80-
}
81-
82113
func (v *FlagVars) ActivateFortuna() bool {
83114
return v.activateFortuna
84115
}
85116

86117
func RegisterFlags() *FlagVars {
118+
return RegisterFlagsWithDefaultOwner("")
119+
}
120+
121+
func RegisterFlagsWithDefaultOwner(defaultOwner string) *FlagVars {
87122
vars := FlagVars{}
88-
vars.runtimeConfigVars = flags.NewRuntimeConfigFlagVars()
123+
124+
flag.BoolVar(
125+
&vars.startNetwork,
126+
"start-network",
127+
false,
128+
"[optional] start a new network and exit without executing any tests. The new network cannot be reused with --reuse-network.",
129+
)
130+
131+
vars.startNetworkVars = flags.NewStartNetworkFlagVars(defaultOwner)
132+
133+
SetMonitoringFlags(
134+
&vars.startCollectors,
135+
&vars.checkMonitoring,
136+
)
137+
89138
flag.StringVar(
90139
&vars.networkDir,
91140
"network-dir",
92-
"",
93-
fmt.Sprintf("[optional] the dir containing the configuration of an existing network to target for testing. Will only be used if --reuse-network is specified. Also possible to configure via the %s env variable.", tmpnet.NetworkDirEnvName),
141+
tmpnet.GetEnvWithDefault(tmpnet.NetworkDirEnvName, ""),
142+
fmt.Sprintf("[optional] the dir containing the configuration of an existing network. Will only be used if --reuse-network, --restart-network or --stop-network are specified. Also possible to configure via the %s env variable.", tmpnet.NetworkDirEnvName),
94143
)
144+
95145
flag.BoolVar(
96146
&vars.reuseNetwork,
97147
"reuse-network",
98148
false,
99-
"[optional] reuse an existing network previously started with --reuse-network. If a network is not already running, create a new one and leave it running for subsequent usage. Ignored if --stop-network is provided.",
149+
"[optional] run tests against an existing network previously started with --reuse-network. If a network is not already running, create a new one and leave it running for subsequent usage.",
100150
)
151+
101152
flag.BoolVar(
102153
&vars.restartNetwork,
103154
"restart-network",
104155
false,
105-
"[optional] restart an existing network previously started with --reuse-network. Useful for ensuring a network is running with the current state of binaries on disk. Ignored if a network is not already running or --stop-network is provided.",
106-
)
107-
SetMonitoringFlags(
108-
&vars.startCollectors,
109-
&vars.checkMonitoring,
110-
)
111-
flag.BoolVar(
112-
&vars.startNetwork,
113-
"start-network",
114-
false,
115-
"[optional] start a new network and exit without executing any tests. The new network cannot be reused with --reuse-network. Ignored if either --reuse-network or --stop-network is provided.",
156+
"[optional] like --reuse-network except an already running network is restarted before running tests to ensure the network represents the current state of binaries on disk.",
116157
)
158+
117159
flag.BoolVar(
118160
&vars.stopNetwork,
119161
"stop-network",
120162
false,
121163
"[optional] stop an existing network started with --reuse-network and exit without executing any tests.",
122164
)
123-
flag.IntVar(
124-
&vars.nodeCount,
125-
"node-count",
126-
tmpnet.DefaultNodeCount,
127-
"number of nodes the network should initially consist of",
128-
)
165+
129166
flag.BoolVar(
130167
&vars.activateFortuna,
131168
"activate-fortuna",

0 commit comments

Comments
 (0)