diff --git a/test/e2e/pkg/infrastructure.go b/test/e2e/pkg/infrastructure.go index 582ed491a..041e1a8d0 100644 --- a/test/e2e/pkg/infrastructure.go +++ b/test/e2e/pkg/infrastructure.go @@ -17,6 +17,7 @@ const ( // InfrastructureData contains the relevant information for a set of existing // infrastructure that is to be used for running a testnet. type InfrastructureData struct { + path string // Provider is the name of infrastructure provider backing the testnet. // For example, 'docker' if it is running locally in a docker network or @@ -41,6 +42,10 @@ type InstanceData struct { Port uint32 `json:"port"` } +func (i InfrastructureData) Path() string { + return i.path +} + func NewDockerInfrastructureData(m Manifest) (InfrastructureData, error) { netAddress := dockerIPv4CIDR if m.IPv6 { @@ -80,5 +85,6 @@ func InfrastructureDataFromFile(p string) (InfrastructureData, error) { if ifd.Network == "" { ifd.Network = globalIPv4CIDR } + ifd.path = p return ifd, nil } diff --git a/test/e2e/runner/main.go b/test/e2e/runner/main.go index caf0bf7f6..c2d0567f2 100644 --- a/test/e2e/runner/main.go +++ b/test/e2e/runner/main.go @@ -34,6 +34,7 @@ type CLI struct { testnet *e2e.Testnet preserve bool infp infra.Provider + ifd e2e.InfrastructureData } // NewCLI sets up the CLI. @@ -82,6 +83,7 @@ func NewCLI() *CLI { default: return fmt.Errorf("unknown infrastructure type '%s'", inft) } + cli.ifd = ifd testnet, err := e2e.LoadTestnet(m, file, ifd) if err != nil { @@ -166,7 +168,7 @@ func NewCLI() *CLI { if err := Wait(cli.testnet, 5); err != nil { // wait for network to settle before tests return err } - if err := Test(cli.testnet); err != nil { + if err := Test(cli.testnet, cli.ifd); err != nil { return err } if !cli.preserve { @@ -271,7 +273,7 @@ func NewCLI() *CLI { Use: "test", Short: "Runs test cases against a running testnet", RunE: func(cmd *cobra.Command, args []string) error { - return Test(cli.testnet) + return Test(cli.testnet, cli.ifd) }, }) diff --git a/test/e2e/runner/test.go b/test/e2e/runner/test.go index 4671a81d2..819d5b9ac 100644 --- a/test/e2e/runner/test.go +++ b/test/e2e/runner/test.go @@ -9,13 +9,23 @@ import ( ) // Test runs test cases under tests/ -func Test(testnet *e2e.Testnet) error { +func Test(testnet *e2e.Testnet, ifd e2e.InfrastructureData) error { logger.Info("Running tests in ./tests/...") err := os.Setenv("E2E_MANIFEST", testnet.File) if err != nil { return err } + if p := ifd.Path(); p != "" { + err = os.Setenv("INFRASTRUCTURE_DATA", p) + if err != nil { + return err + } + } + err = os.Setenv("INFRASTRUCTURE_TYPE", ifd.Provider) + if err != nil { + return err + } return exec.CommandVerbose(context.Background(), "go", "test", "-count", "1", "./tests/...") } diff --git a/test/e2e/tests/e2e_test.go b/test/e2e/tests/e2e_test.go index 5df3309d4..8e5ee9379 100644 --- a/test/e2e/tests/e2e_test.go +++ b/test/e2e/tests/e2e_test.go @@ -73,7 +73,14 @@ func loadTestnet(t *testing.T) e2e.Testnet { if !filepath.IsAbs(manifestFile) { manifestFile = filepath.Join("..", manifestFile) } - + ifdType := os.Getenv("INFRASTRUCTURE_DATA") + ifdFile := os.Getenv("INFRASTRUCTURE_FILE") + if ifdFile == "" && ifdType != "docker" { + t.Skip("INFRASTRUCTURE_DATA not set and INFRASTRUCTURE_TYPE is not docker") + } + if !filepath.IsAbs(ifdFile) { + manifestFile = filepath.Join("..", manifestFile) + } testnetCacheMtx.Lock() defer testnetCacheMtx.Unlock() if testnet, ok := testnetCache[manifestFile]; ok { @@ -81,7 +88,17 @@ func loadTestnet(t *testing.T) e2e.Testnet { } m, err := e2e.LoadManifest(manifestFile) require.NoError(t, err) - ifd, err := e2e.NewDockerInfrastructureData(m) + + var ifd e2e.InfrastructureData + switch ifdType { + case "docker": + ifd, err = e2e.NewDockerInfrastructureData(m) + require.NoError(t, err) + case "digital-ocean": + ifd, err = e2e.InfrastructureDataFromFile(manifestFile) + require.NoError(t, err) + default: + } require.NoError(t, err) testnet, err := e2e.LoadTestnet(m, manifestFile, ifd)