diff --git a/test/e2e/pkg/infrastructure.go b/test/e2e/pkg/infrastructure.go index 64d1e361c..4db82b4ac 100644 --- a/test/e2e/pkg/infrastructure.go +++ b/test/e2e/pkg/infrastructure.go @@ -1,6 +1,9 @@ package e2e -import "net" +import ( + "fmt" + "net" +) // InfrastructureData contains the relevant information for a set of existing // infrastructure that is to be used for running a testnet. @@ -18,3 +21,24 @@ type InfrastructureData struct { type InstanceData struct { IPAddress net.IP `json:"ip_address"` } + +func NewDockerInfrastructure(m Manifest) (InfrastructureData, error) { + netAddress := networkIPv4 + if m.IPv6 { + netAddress = networkIPv6 + } + _, ipNet, err := net.ParseCIDR(netAddress) + if err != nil { + return InfrastructureData{}, fmt.Errorf("invalid IP network address %q: %w", netAddress, err) + } + ipGen := newIPGenerator(ipNet) + ifd := InfrastructureData{ + Instances: make(map[string]InstanceData), + } + for name := range m.Nodes { + ifd.Instances[name] = InstanceData{ + IPAddress: ipGen.Next(), + } + } + return ifd, nil +} diff --git a/test/e2e/pkg/testnet.go b/test/e2e/pkg/testnet.go index b8aa85646..08365f267 100644 --- a/test/e2e/pkg/testnet.go +++ b/test/e2e/pkg/testnet.go @@ -156,12 +156,16 @@ func LoadTestnet(file string, ifd InfrastructureData) (*Testnet, error) { for _, name := range nodeNames { nodeManifest := manifest.Nodes[name] + ind, ok := ifd.Instances[name] + if !ok { + return nil, fmt.Errorf("information for node '%s' missing from infrastucture data", name) + } node := &Node{ Name: name, Testnet: testnet, PrivvalKey: keyGen.Generate(manifest.KeyType), NodeKey: keyGen.Generate("ed25519"), - IP: ipGen.Next(), + IP: ind.IPAddress, ProxyPort: proxyPortGen.Next(), Mode: ModeValidator, Database: "goleveldb", diff --git a/test/e2e/runner/main.go b/test/e2e/runner/main.go index 2d5bc04b1..825aac989 100644 --- a/test/e2e/runner/main.go +++ b/test/e2e/runner/main.go @@ -41,7 +41,15 @@ func NewCLI() *CLI { if err != nil { return err } - testnet, err := e2e.LoadTestnet(file, e2e.InfrastructureData{}) + m, err := e2e.LoadManifest(file) + if err != nil { + return err + } + ifd, err := e2e.NewDockerInfrastructure(m) + if err != nil { + return err + } + testnet, err := e2e.LoadTestnet(file, ifd) if err != nil { return err } diff --git a/test/e2e/tests/e2e_test.go b/test/e2e/tests/e2e_test.go index 763b99ea3..60d381013 100644 --- a/test/e2e/tests/e2e_test.go +++ b/test/e2e/tests/e2e_test.go @@ -79,8 +79,12 @@ func loadTestnet(t *testing.T) e2e.Testnet { if testnet, ok := testnetCache[manifest]; ok { return testnet } + m, err := e2e.LoadManifest(manifest) + require.NoError(t, err) + ifd, err := e2e.NewDockerInfrastructure(m) + require.NoError(t, err) - testnet, err := e2e.LoadTestnet(manifest) + testnet, err := e2e.LoadTestnet(manifest, ifd) require.NoError(t, err) testnetCache[manifest] = *testnet return *testnet