diff --git a/executor/linux/stage_test.go b/executor/linux/stage_test.go index c70b94ce..3bd2e684 100644 --- a/executor/linux/stage_test.go +++ b/executor/linux/stage_test.go @@ -20,6 +20,7 @@ import ( "github.com/go-vela/worker/internal/message" "github.com/go-vela/worker/runtime" "github.com/go-vela/worker/runtime/docker" + "github.com/go-vela/worker/runtime/kubernetes" "github.com/urfave/cli/v2" ) @@ -60,6 +61,11 @@ func TestLinux_CreateStage(t *testing.T) { t.Errorf("unable to create docker runtime engine: %v", err) } + _kubernetes, err := kubernetes.NewMock(testPod(true)) + if err != nil { + t.Errorf("unable to create kubernetes runtime engine: %v", err) + } + // setup tests tests := []struct { name string @@ -86,6 +92,25 @@ func TestLinux_CreateStage(t *testing.T) { }, }, }, + { + name: "kubernetes-basic stage", + failure: false, + runtime: _kubernetes, + stage: &pipeline.Stage{ + Name: "echo", + Steps: pipeline.ContainerSlice{ + { + ID: "github-octocat-1-echo-echo", + Directory: "/vela/src/github.com/github/octocat", + Environment: map[string]string{"FOO": "bar"}, + Image: "alpine:latest", + Name: "echo", + Number: 1, + Pull: "not_present", + }, + }, + }, + }, { name: "docker-stage with step container with image not found", failure: true, @@ -105,12 +130,37 @@ func TestLinux_CreateStage(t *testing.T) { }, }, }, + //{ + // name: "kubernetes-stage with step container with image not found", + // failure: true, // FIXME: make Kubernetes mock simulate failure similar to Docker mock + // runtime: _kubernetes, + // stage: &pipeline.Stage{ + // Name: "echo", + // Steps: pipeline.ContainerSlice{ + // { + // ID: "github-octocat-1-echo-echo", + // Directory: "/vela/src/github.com/github/octocat", + // Environment: map[string]string{"FOO": "bar"}, + // Image: "alpine:notfound", + // Name: "echo", + // Number: 1, + // Pull: "not_present", + // }, + // }, + // }, + //}, { name: "docker-empty stage", failure: true, runtime: _docker, stage: new(pipeline.Stage), }, + { + name: "kubernetes-empty stage", + failure: true, + runtime: _kubernetes, + stage: new(pipeline.Stage), + }, } // run tests @@ -173,6 +223,11 @@ func TestLinux_PlanStage(t *testing.T) { t.Errorf("unable to create docker runtime engine: %v", err) } + _kubernetes, err := kubernetes.NewMock(testPod(true)) + if err != nil { + t.Errorf("unable to create kubernetes runtime engine: %v", err) + } + dockerTestMap := new(sync.Map) dockerTestMap.Store("foo", make(chan error, 1)) @@ -180,6 +235,13 @@ func TestLinux_PlanStage(t *testing.T) { dtm.(chan error) <- nil close(dtm.(chan error)) + kubernetesTestMap := new(sync.Map) + kubernetesTestMap.Store("foo", make(chan error, 1)) + + ktm, _ := kubernetesTestMap.Load("foo") + ktm.(chan error) <- nil + close(ktm.(chan error)) + dockerErrMap := new(sync.Map) dockerErrMap.Store("foo", make(chan error, 1)) @@ -187,6 +249,13 @@ func TestLinux_PlanStage(t *testing.T) { dem.(chan error) <- errors.New("bar") close(dem.(chan error)) + kubernetesErrMap := new(sync.Map) + kubernetesErrMap.Store("foo", make(chan error, 1)) + + kem, _ := kubernetesErrMap.Load("foo") + kem.(chan error) <- errors.New("bar") + close(kem.(chan error)) + // setup tests tests := []struct { name string @@ -215,6 +284,26 @@ func TestLinux_PlanStage(t *testing.T) { }, stageMap: new(sync.Map), }, + { + name: "kubernetes-basic stage", + failure: false, + runtime: _kubernetes, + stage: &pipeline.Stage{ + Name: "echo", + Steps: pipeline.ContainerSlice{ + { + ID: "github-octocat-1-echo-echo", + Directory: "/vela/src/github.com/github/octocat", + Environment: map[string]string{"FOO": "bar"}, + Image: "alpine:latest", + Name: "echo", + Number: 1, + Pull: "not_present", + }, + }, + }, + stageMap: new(sync.Map), + }, { name: "docker-basic stage with nil stage map", failure: false, @@ -236,6 +325,27 @@ func TestLinux_PlanStage(t *testing.T) { }, stageMap: dockerTestMap, }, + { + name: "kubernetes-basic stage with nil stage map", + failure: false, + runtime: _kubernetes, + stage: &pipeline.Stage{ + Name: "echo", + Needs: []string{"foo"}, + Steps: pipeline.ContainerSlice{ + { + ID: "github-octocat-1-echo-echo", + Directory: "/vela/src/github.com/github/octocat", + Environment: map[string]string{"FOO": "bar"}, + Image: "alpine:latest", + Name: "echo", + Number: 1, + Pull: "not_present", + }, + }, + }, + stageMap: kubernetesTestMap, + }, { name: "docker-basic stage with error stage map", failure: true, @@ -257,6 +367,27 @@ func TestLinux_PlanStage(t *testing.T) { }, stageMap: dockerErrMap, }, + { + name: "kubernetes-basic stage with error stage map", + failure: true, + runtime: _kubernetes, + stage: &pipeline.Stage{ + Name: "echo", + Needs: []string{"foo"}, + Steps: pipeline.ContainerSlice{ + { + ID: "github-octocat-1-echo-echo", + Directory: "/vela/src/github.com/github/octocat", + Environment: map[string]string{"FOO": "bar"}, + Image: "alpine:latest", + Name: "echo", + Number: 1, + Pull: "not_present", + }, + }, + }, + stageMap: kubernetesErrMap, + }, } // run tests @@ -311,6 +442,13 @@ func TestLinux_ExecStage(t *testing.T) { t.Errorf("unable to create docker runtime engine: %v", err) } + _kubernetes, err := kubernetes.NewMock(testPod(true)) + if err != nil { + t.Errorf("unable to create kubernetes runtime engine: %v", err) + } + + _kubernetes.PodTracker.Start(context.Background()) + streamRequests, done := message.MockStreamRequestsWithCancel(context.Background()) defer done() @@ -341,6 +479,25 @@ func TestLinux_ExecStage(t *testing.T) { }, }, }, + { + name: "kubernetes-basic stage", + failure: false, + runtime: _kubernetes, + stage: &pipeline.Stage{ + Name: "echo", + Steps: pipeline.ContainerSlice{ + { + ID: "github-octocat-1-echo-echo", + Directory: "/vela/src/github.com/github/octocat", + Environment: map[string]string{"FOO": "bar"}, + Image: "alpine:latest", + Name: "echo", + Number: 1, + Pull: "not_present", + }, + }, + }, + }, { name: "docker-stage with step container with image not found", failure: true, @@ -361,6 +518,25 @@ func TestLinux_ExecStage(t *testing.T) { }, }, }, + //{ + // name: "kubernetes-stage with step container with image not found", + // failure: true, // FIXME: make Kubernetes mock simulate failure similar to Docker mock + // runtime: _kubernetes, + // stage: &pipeline.Stage{ + // Name: "echo", + // Steps: pipeline.ContainerSlice{ + // { + // ID: "github-octocat-1-echo-echo", + // Directory: "/vela/src/github.com/github/octocat", + // Environment: map[string]string{"FOO": "bar"}, + // Image: "alpine:notfound", + // Name: "echo", + // Number: 1, + // Pull: "not_present", + // }, + // }, + // }, + //}, { name: "docker-stage with step container with bad number", failure: true, @@ -381,6 +557,25 @@ func TestLinux_ExecStage(t *testing.T) { }, }, }, + { + name: "kubernetes-stage with step container with bad number", + failure: true, + runtime: _kubernetes, + stage: &pipeline.Stage{ + Name: "echo", + Steps: pipeline.ContainerSlice{ + { + ID: "github-octocat-1-echo-echo", + Directory: "/vela/src/github.com/github/octocat", + Environment: map[string]string{"FOO": "bar"}, + Image: "alpine:latest", + Name: "echo", + Number: 0, + Pull: "not_present", + }, + }, + }, + }, } // run tests @@ -439,6 +634,11 @@ func TestLinux_DestroyStage(t *testing.T) { t.Errorf("unable to create docker runtime engine: %v", err) } + _kubernetes, err := kubernetes.NewMock(testPod(true)) + if err != nil { + t.Errorf("unable to create kubernetes runtime engine: %v", err) + } + // setup tests tests := []struct { name string @@ -465,6 +665,25 @@ func TestLinux_DestroyStage(t *testing.T) { }, }, }, + { + name: "kubernetes-basic stage", + failure: false, + runtime: _kubernetes, + stage: &pipeline.Stage{ + Name: "echo", + Steps: pipeline.ContainerSlice{ + { + ID: "github-octocat-1-echo-echo", + Directory: "/vela/src/github.com/github/octocat", + Environment: map[string]string{"FOO": "bar"}, + Image: "alpine:latest", + Name: "echo", + Number: 1, + Pull: "not_present", + }, + }, + }, + }, } // run tests