@@ -5,6 +5,7 @@ package main
55
66import (
77 "context"
8+ "encoding/json"
89 "flag"
910 "fmt"
1011 "math/big"
@@ -38,6 +39,8 @@ const (
3839var (
3940 flagVars * e2e.FlagVars
4041
42+ devnetConfigPath string
43+
4144 loadTimeoutArg time.Duration
4245 firewoodEnabledArg bool
4346 numWorkersArg int
@@ -48,6 +51,13 @@ func init() {
4851 e2e .WithDefaultNodeCount (defaultNodeCount ),
4952 )
5053
54+ flag .StringVar (
55+ & devnetConfigPath ,
56+ "devnet-config-path" ,
57+ "" ,
58+ "the file path for the devnet config" ,
59+ )
60+
5161 flag .DurationVar (
5262 & loadTimeoutArg ,
5363 "load-timeout" ,
@@ -77,6 +87,65 @@ func main() {
7787
7888 require := require .New (tc )
7989
90+ ctx := tests .DefaultNotifyContext (0 , tc .DeferCleanup )
91+ tc .SetDefaultContextParent (ctx )
92+
93+ registry := prometheus .NewRegistry ()
94+ metricsServer , err := tests .NewPrometheusServer (registry )
95+ require .NoError (err )
96+ tc .DeferCleanup (func () {
97+ require .NoError (metricsServer .Stop ())
98+ })
99+
100+ var workers []load.Worker
101+ if devnetConfigPath != "" {
102+ b , err := os .ReadFile (devnetConfigPath )
103+ require .NoError (err )
104+
105+ var devnetConfig load.DevnetConfig
106+ require .NoError (json .Unmarshal (b , & devnetConfig ))
107+
108+ workers = load .ConnectNetwork (tc , metricsServer , devnetConfig )
109+ } else {
110+ workers = startNetwork (tc , metricsServer )
111+ }
112+
113+ chainID , err := workers [0 ].Client .ChainID (ctx )
114+ require .NoError (err )
115+
116+ tokenContract , err := newTokenContract (ctx , chainID , & workers [0 ], workers [1 :])
117+ require .NoError (err )
118+
119+ randomTest , err := load .NewRandomTest (
120+ ctx ,
121+ chainID ,
122+ & workers [0 ],
123+ rand .NewSource (time .Now ().UnixMilli ()),
124+ tokenContract ,
125+ )
126+ require .NoError (err )
127+
128+ generator , err := load .NewLoadGenerator (
129+ workers ,
130+ chainID ,
131+ metricsNamespace ,
132+ registry ,
133+ randomTest ,
134+ )
135+ require .NoError (err )
136+
137+ log .Info ("starting load generator" )
138+
139+ generator .Run (ctx , log , loadTimeoutArg , testTimeout )
140+ }
141+
142+ // startNetwork starts a new network and returns a list of workers who can
143+ // interact with the network.
144+ //
145+ // Customization of the network and the number of workers can be set via flags.
146+ func startNetwork (tc tests.TestContext , metricsServer * tests.PrometheusServer ) []load.Worker {
147+ require := require .New (tc )
148+
80149 numNodes , err := flagVars .NodeCount ()
81150 require .NoError (err , "failed to get node count" )
82151
@@ -97,17 +166,9 @@ func main() {
97166
98167 e2e .NewTestEnvironment (tc , flagVars , network )
99168
100- ctx := tests .DefaultNotifyContext (0 , tc .DeferCleanup )
101169 wsURIs , err := tmpnet .GetNodeWebsocketURIs (network .Nodes , blockchainID )
102170 require .NoError (err )
103171
104- registry := prometheus .NewRegistry ()
105- metricsServer , err := tests .NewPrometheusServer (registry )
106- require .NoError (err )
107- tc .DeferCleanup (func () {
108- require .NoError (metricsServer .Stop ())
109- })
110-
111172 monitoringConfigFilePath , err := tmpnet .WritePrometheusSDConfig ("load-test" , tmpnet.SDConfig {
112173 Targets : []string {metricsServer .Address ()},
113174 Labels : network .GetMonitoringLabels (),
@@ -133,31 +194,7 @@ func main() {
133194 }
134195 }
135196
136- chainID , err := workers [0 ].Client .ChainID (ctx )
137- require .NoError (err )
138-
139- tokenContract , err := newTokenContract (ctx , chainID , & workers [0 ], workers [1 :])
140- require .NoError (err )
141-
142- randomTest , err := load .NewRandomTest (
143- ctx ,
144- chainID ,
145- & workers [0 ],
146- rand .NewSource (time .Now ().UnixMilli ()),
147- tokenContract ,
148- )
149- require .NoError (err )
150-
151- generator , err := load .NewLoadGenerator (
152- workers ,
153- chainID ,
154- metricsNamespace ,
155- registry ,
156- randomTest ,
157- )
158- require .NoError (err )
159-
160- generator .Run (ctx , log , loadTimeoutArg , testTimeout )
197+ return workers
161198}
162199
163200// newTokenContract deploys an instance of an ERC20 token and distributes the
0 commit comments