diff --git a/.github/workflows/e2e-manual.yml b/.github/workflows/e2e-manual.yml index 405f4c517..32ebff319 100644 --- a/.github/workflows/e2e-manual.yml +++ b/.github/workflows/e2e-manual.yml @@ -28,7 +28,7 @@ jobs: - name: Generate testnets working-directory: test/e2e # When changing -g, also change the matrix groups above - run: ./build/generator -g 4 -d networks/nightly/ + run: ./generator-multiversion.sh -g 4 -d networks/nightly/ - name: Run ${{ matrix.p2p }} p2p testnets working-directory: test/e2e diff --git a/test/e2e/generator/generate.go b/test/e2e/generator/generate.go index f0c6fef7d..a5f6da241 100644 --- a/test/e2e/generator/generate.go +++ b/test/e2e/generator/generate.go @@ -22,7 +22,9 @@ var ( }, "validators": {"genesis", "initchain"}, } - + nodeVersions = weightedChoice{ + "": 2, + } // The following specify randomly chosen values for testnet nodes. nodeDatabases = uniformChoice{"goleveldb", "cleveldb", "rocksdb", "boltdb", "badgerdb"} ipv6 = uniformChoice{false, true} @@ -52,7 +54,10 @@ var ( ) // Generate generates random testnets using the given RNG. -func Generate(r *rand.Rand) ([]e2e.Manifest, error) { +func Generate(r *rand.Rand, multiversion string) ([]e2e.Manifest, error) { + if multiversion != "" { + nodeVersions[multiversion] = 1 + } manifests := []e2e.Manifest{} for _, opt := range combinations(testnetCombinations) { manifest, err := generateTestnet(r, opt) @@ -206,6 +211,7 @@ func generateNode( r *rand.Rand, mode e2e.Mode, startAt int64, initialHeight int64, forceArchive bool, ) *e2e.ManifestNode { node := e2e.ManifestNode{ + Version: nodeVersions.Choose(r).(string), Mode: string(mode), StartAt: startAt, Database: nodeDatabases.Choose(r).(string), diff --git a/test/e2e/generator/main.go b/test/e2e/generator/main.go index 57c8f4a4c..0fd7cf6ae 100644 --- a/test/e2e/generator/main.go +++ b/test/e2e/generator/main.go @@ -44,26 +44,32 @@ func NewCLI() *CLI { if err != nil { return err } - return cli.generate(dir, groups) + multiversion, err := cmd.Flags().GetString("multi-version") + if err != nil { + return err + } + return cli.generate(dir, groups, multiversion) }, } cli.root.PersistentFlags().StringP("dir", "d", "", "Output directory for manifests") _ = cli.root.MarkPersistentFlagRequired("dir") + cli.root.PersistentFlags().StringP("multi-version", "m", "", "Include multi-version testing."+ + "If multi-version is not specified, then only the current Tendermint version will be used in generated testnets.") cli.root.PersistentFlags().IntP("groups", "g", 0, "Number of groups") return cli } // generate generates manifests in a directory. -func (cli *CLI) generate(dir string, groups int) error { +func (cli *CLI) generate(dir string, groups int, multiversion string) error { err := os.MkdirAll(dir, 0o755) if err != nil { return err } //nolint:gosec // G404: Use of weak random number generator (math/rand instead of crypto/rand) - manifests, err := Generate(rand.New(rand.NewSource(randomSeed))) + manifests, err := Generate(rand.New(rand.NewSource(randomSeed)), multiversion) if err != nil { return err }