e2e: add multiversion flag to generator (#9829) (#9843)

* add multiversion flag to generator

* clarify flag comment

(cherry picked from commit ac48630fdb)

Co-authored-by: William Banfield <4561443+williambanfield@users.noreply.github.com>
This commit is contained in:
mergify[bot]
2022-12-08 11:41:19 -05:00
committed by GitHub
parent 1233cc8e8b
commit 0ab2ae2ac6
3 changed files with 18 additions and 6 deletions

View File

@@ -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

View File

@@ -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),

View File

@@ -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
}