Skip to content

Commit

Permalink
add tinkerbell ci test harness to e2e test framework
Browse files Browse the repository at this point in the history
  • Loading branch information
gwesterfieldjr committed May 5, 2022
1 parent 6a20e4b commit ead7874
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 13 deletions.
12 changes: 12 additions & 0 deletions internal/test/e2e/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,14 +123,19 @@ type instanceRunConf struct {
testReportFolder, branchName string
ipPool networkutils.IPPool
bundlesOverride bool
testHarnessType TestHarnessType
}

func RunTests(conf instanceRunConf) (testInstanceID string, testCommandResult *testCommandResult, err error) {
testHarness := newTestHarness(conf.testHarnessType)

session, err := newSessionFromConf(conf)
if err != nil {
return "", nil, err
}

testHarness.createInstance(session)

err = session.setup(conf.regex)
if err != nil {
return session.instanceId, nil, err
Expand Down Expand Up @@ -214,6 +219,7 @@ func splitTests(testsList []string, conf ParallelRunConf) []instanceRunConf {
}

vsphereTestsRe := regexp.MustCompile(vsphereRegex)
tinkerbellTestsRe := regexp.MustCompile(tinkerbellTestsRe)
privateNetworkTestsRe := regexp.MustCompile(`^.*(Proxy|RegistryMirror).*$`)
multiClusterTestsRe := regexp.MustCompile(`^.*Multicluster.*$`)

Expand All @@ -239,6 +245,11 @@ func splitTests(testsList []string, conf ParallelRunConf) []instanceRunConf {
}
}

testHarnessType := Ec2TestHarnessType
if tinkerbellTestsRe.MatchString(testName) {
testHarnessType = VSphereTestHarnessType
}

if len(testsInCurrentInstance) == testPerInstance || (len(testsList)-1) == i {
runConfs = append(runConfs, instanceRunConf{
amiId: conf.AmiId,
Expand All @@ -252,6 +263,7 @@ func splitTests(testsList []string, conf ParallelRunConf) []instanceRunConf {
testReportFolder: conf.TestReportFolder,
branchName: conf.BranchName,
ipPool: ips,
testHarnessType: testHarnessType,
})

testsInCurrentInstance = make([]string, 0, testPerInstance)
Expand Down
21 changes: 8 additions & 13 deletions internal/test/e2e/setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (

"github.com/aws/aws-sdk-go/aws/session"

"github.com/aws/eks-anywhere/internal/pkg/ec2"
"github.com/aws/eks-anywhere/internal/pkg/s3"
"github.com/aws/eks-anywhere/internal/pkg/ssm"
"github.com/aws/eks-anywhere/pkg/logger"
Expand All @@ -25,6 +24,8 @@ const (
bundlesReleaseManifestFile = "local-bundle-release.yaml"
eksAComponentsManifestFile = "local-eksa-components.yaml"
testNameFile = "e2e-test-name"
key = "Integration-Test"
tag = "EKSA-E2E"
)

type E2ESession struct {
Expand Down Expand Up @@ -71,19 +72,8 @@ func (e *E2ESession) setup(regex string) error {
return err
}

key := "Integration-Test"
tag := "EKSA-E2E"
name := fmt.Sprintf("eksa-e2e-%s", e.jobId)
logger.V(1).Info("Creating ec2 instance", "name", name)
instanceId, err := ec2.CreateInstance(e.session, e.amiId, key, tag, e.instanceProfileName, e.subnetId, name)
if err != nil {
return fmt.Errorf("creating instance for e2e tests: %v", err)
}
logger.V(1).Info("Instance created", "instance-id", instanceId)
e.instanceId = instanceId

logger.V(1).Info("Waiting until SSM is ready")
err = ssm.WaitForSSMReady(e.session, instanceId)
err = ssm.WaitForSSMReady(e.session, e.instanceId)
if err != nil {
return fmt.Errorf("waiting for ssm in new instance: %v", err)
}
Expand All @@ -108,6 +98,11 @@ func (e *E2ESession) setup(regex string) error {
return err
}

err = e.setupTinkerbellEnv(regex)
if err != nil {
return err
}

err = e.setupCloudStackEnv(regex)
if err != nil {
return err
Expand Down
58 changes: 58 additions & 0 deletions internal/test/e2e/testHarness.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package e2e

import (
"errors"
"fmt"

"github.com/aws/eks-anywhere/internal/pkg/ec2"
"github.com/aws/eks-anywhere/pkg/logger"
)

type TestHarness interface {
createInstance(testSession *E2ESession) (string, error)
}

type TestHarnessType string

const (
Ec2TestHarnessType TestHarnessType = "ec2"
VSphereTestHarnessType TestHarnessType = "vSphere"
)

func newTestHarness(testHarnessType TestHarnessType) TestHarness {
if testHarnessType == VSphereTestHarnessType {
return VSphereTestHarness{}
} else {
return Ec2TestHarness{}
}
}

type Ec2TestHarness struct{}
type VSphereTestHarness struct{}

func (VSphereTestHarness) createInstance(e *E2ESession) (string, error) {
name := getTestHarnessName(e.jobId)
logger.V(1).Info("Creating vSphere Test Runner instance", "name", name)
// 1) create vsphere vm to serve as test runner instance
// 2) figure out how to get ssm instance id out of the vm post deployment.
// Hopefully I can filter by instance name, ip, or mac addr of the vm in ssm console

//e.instanceId = instanceId
return "", errors.New("")
}

func (Ec2TestHarness) createInstance(e *E2ESession) (string, error) {
name := getTestHarnessName(e.jobId)
logger.V(1).Info("Creating ec2 Test Runner instance", "name", name)
instanceId, err := ec2.CreateInstance(e.session, e.amiId, key, tag, e.instanceProfileName, e.subnetId, name)
if err != nil {
return "", fmt.Errorf("creating instance for e2e tests: %v", err)
}
logger.V(1).Info("Instance created", "instance-id", instanceId)
e.instanceId = instanceId
return instanceId, nil
}

func getTestHarnessName(jobId string) string {
return fmt.Sprintf("eksa-e2e-%s", jobId)
}
30 changes: 30 additions & 0 deletions internal/test/e2e/tinkerbell.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package e2e

import (
"os"
"regexp"

"github.com/aws/eks-anywhere/pkg/logger"
e2etests "github.com/aws/eks-anywhere/test/framework"
)

const (
tinkerbellTestsRe = `^.*Tinkerbell.*$`
)

func (e *E2ESession) setupTinkerbellEnv(testRegex string) error {
re := regexp.MustCompile(tinkerbellTestsRe)
if !re.MatchString(testRegex) {
logger.V(2).Info("Not running Tinkerbell tests, skipping Env variable setup")
return nil
}

requiredEnvVars := e2etests.RequiredTinkerbellEnvVars()
for _, eVar := range requiredEnvVars {
if val, ok := os.LookupEnv(eVar); ok {
e.testEnvVars[eVar] = val
}
}

return nil
}
4 changes: 4 additions & 0 deletions test/framework/tinkerbell.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ var requiredTinkerbellEnvVars = []string{
tinkerbellSSHAuthorizedKey,
}

func RequiredTinkerbellEnvVars() []string {
return requiredTinkerbellEnvVars
}

type TinkerbellOpt func(*Tinkerbell)

type Tinkerbell struct {
Expand Down

0 comments on commit ead7874

Please sign in to comment.