Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 117 additions & 0 deletions pkg/cmd/clustertask/start_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"time"

"github.com/jonboulle/clockwork"
traction "github.com/tektoncd/cli/pkg/taskrun"
"github.com/tektoncd/cli/pkg/test"
cb "github.com/tektoncd/cli/pkg/test/builder"
testDynamic "github.com/tektoncd/cli/pkg/test/dynamic"
Expand Down Expand Up @@ -1808,3 +1809,119 @@ func Test_parseRes_v1beta1(t *testing.T) {
})
}
}

func Test_start_use_taskrun_cancelled_status_v1beta1(t *testing.T) {
ctasks := []*v1beta1.ClusterTask{
{
ObjectMeta: v1.ObjectMeta{
Name: "clustertask",
},
Spec: v1beta1.TaskSpec{
Resources: &v1beta1.TaskResources{
Inputs: []v1beta1.TaskResource{
{
ResourceDeclaration: v1beta1.ResourceDeclaration{
Name: "my-repo",
Type: v1beta1.PipelineResourceTypeGit,
},
},
},
Outputs: []v1beta1.TaskResource{
{
ResourceDeclaration: v1beta1.ResourceDeclaration{
Name: "code-image",
Type: v1beta1.PipelineResourceTypeImage,
},
},
},
},
Params: []v1beta1.ParamSpec{
{
Name: "myarg",
Type: v1beta1.ParamTypeString,
},
{
Name: "print",
Type: v1beta1.ParamTypeArray,
},
},
Steps: []v1beta1.Step{
{
Container: corev1.Container{
Name: "hello",
Image: "busybox",
},
},
{
Container: corev1.Container{
Name: "exit",
Image: "busybox",
},
},
},
},
},
}

timeoutDuration, _ := time.ParseDuration("10s")
trName := "ct-run"
taskruns := []*v1beta1.TaskRun{
{

ObjectMeta: v1.ObjectMeta{
Name: trName,
Labels: map[string]string{"tekton.dev/clustertask": "clustertask"},
Namespace: "ns",
},
Spec: v1beta1.TaskRunSpec{
TaskRef: &v1beta1.TaskRef{
Name: "clustertask",
Kind: v1beta1.ClusterTaskKind,
},
ServiceAccountName: "serviceaccount",
Timeout: &metav1.Duration{Duration: timeoutDuration},
Status: v1beta1.TaskRunSpecStatus(v1beta1.TaskRunSpecStatusCancelled),
},
},
}

ns := []*corev1.Namespace{
{
ObjectMeta: metav1.ObjectMeta{
Name: "ns",
},
},
}

seedData, _ := test.SeedV1beta1TestData(t, pipelinev1beta1test.Data{Namespaces: ns, ClusterTasks: ctasks, TaskRuns: taskruns})
objs := []runtime.Object{ctasks[0], taskruns[0]}
trName2 := trName + "-2"
tdc := newDynamicClientOpt(versionB1, trName2, objs...)

cs := pipelinetest.Clients{
Pipeline: seedData.Pipeline,
Kube: seedData.Kube,
}
cs.Pipeline.Resources = cb.APIResourceList(versionB1, []string{"clustertask", "taskrun"})
dc, _ := tdc.Client(
cb.UnstructuredV1beta1CT(ctasks[0], versionB1),
cb.UnstructuredV1beta1TR(taskruns[0], versionB1),
)
p := &test.Params{Tekton: cs.Pipeline, Kube: cs.Kube, Dynamic: dc}

clustertask := Command(p)
got, _ := test.ExecuteCommand(clustertask, "start", "clustertask", "--use-taskrun", trName, "-n", "ns")

expected := "TaskRun started: ct-run-2\n\nIn order to track the TaskRun progress run:\ntkn taskrun logs ct-run-2 -f -n ns\n"
test.AssertOutput(t, expected, got)
clients, _ := p.Clients()
tr, err := traction.Get(clients, trName2, metav1.GetOptions{}, "ns")
if err != nil {
t.Errorf("Error listing taskruns %s", err.Error())
}

test.AssertOutput(t, "serviceaccount", tr.Spec.ServiceAccountName)
test.AssertOutput(t, timeoutDuration, tr.Spec.Timeout.Duration)
// Assert that new TaskRun does not contain cancelled status of previous run
test.AssertOutput(t, v1beta1.TaskRunSpecStatus(""), tr.Spec.Status)
}
2 changes: 2 additions & 0 deletions pkg/cmd/pipeline/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,8 @@ func (opt *startOptions) startPipeline(pipelineStart *v1beta1.Pipeline) error {
}
// Copy over spec from last or previous PipelineRun to use same values for this PipelineRun
pr.Spec = usepr.Spec
// Reapply blank status in case PipelineRun used was cancelled
pr.Spec.Status = ""
}

if err := mergeRes(pr, opt.Resources); err != nil {
Expand Down
152 changes: 151 additions & 1 deletion pkg/cmd/pipeline/start_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4202,8 +4202,158 @@ func Test_start_pipeline_use_pipelinerun_v1beta1(t *testing.T) {
t.Errorf("Error getting pipelineruns %s", err.Error())
}
test.AssertOutput(t, pr.Spec.Params[0].Name, "brush")
test.AssertOutput(t, pr.Spec.Params[0].Value, v1alpha1.ArrayOrString{Type: "string", StringVal: "teeth"})
test.AssertOutput(t, pr.Spec.Params[0].Value, v1beta1.ArrayOrString{Type: "string", StringVal: "teeth"})
test.AssertOutput(t, timeoutDuration, pr.Spec.Timeout.Duration)
}

func Test_start_pipeline_use_pipelinerun_cancelled_status_v1beta1(t *testing.T) {
pipelineName := "test-pipeline"
theonename := "test-pipeline-run-be-the-one"
timeoutDuration, _ := time.ParseDuration("10s")

ps := []*v1beta1.Pipeline{
{
ObjectMeta: metav1.ObjectMeta{
Name: pipelineName,
Namespace: "ns",
},
Spec: v1beta1.PipelineSpec{
Tasks: []v1beta1.PipelineTask{
{
Name: "unit-test-1",
TaskRef: &v1beta1.TaskRef{
Name: "unit-test-task",
},
Resources: &v1beta1.PipelineTaskResources{
Inputs: []v1beta1.PipelineTaskInputResource{
{
Name: "workspace",
Resource: "git-repo",
},
},
Outputs: []v1beta1.PipelineTaskOutputResource{
{
Name: "image-to-use",
Resource: "best-image",
},
{
Name: "workspace",
Resource: "git-repo",
},
},
},
},
},
Resources: []v1beta1.PipelineDeclaredResource{
{
Name: "git-repo",
Type: v1alpha1.PipelineResourceTypeGit,
},
{
Name: "build-image",
Type: v1alpha1.PipelineResourceTypeImage,
},
},
Params: []v1beta1.ParamSpec{
{
Name: "pipeline-param-1",
Type: v1beta1.ParamTypeString,
Default: &v1beta1.ArrayOrString{
Type: v1beta1.ParamTypeString,
StringVal: "somethingdifferent-1",
},
},
{
Name: "rev-param",
Type: v1beta1.ParamTypeString,
Default: &v1beta1.ArrayOrString{
Type: v1beta1.ParamTypeString,
StringVal: "revision",
},
},
},
},
},
}

prs := []*v1beta1.PipelineRun{
{
ObjectMeta: metav1.ObjectMeta{
Name: theonename,
Namespace: "ns",
Labels: map[string]string{"tekton.dev/pipeline": pipelineName},
},
Spec: v1beta1.PipelineRunSpec{
PipelineRef: &v1beta1.PipelineRef{
Name: pipelineName,
},
Params: []v1beta1.Param{
{
Name: "brush",
Value: v1beta1.ArrayOrString{
Type: v1beta1.ParamTypeString,
StringVal: "teeth",
},
},
},
Timeout: &metav1.Duration{Duration: timeoutDuration},
Status: v1beta1.PipelineRunSpecStatus(v1beta1.PipelineRunSpecStatusCancelled),
},
Status: v1beta1.PipelineRunStatus{
Status: duckv1beta1.Status{
Conditions: duckv1beta1.Conditions{
{
Status: corev1.ConditionFalse,
Reason: v1beta1.PipelineRunReasonCancelled.String(),
},
},
},
},
},
}

ns := []*corev1.Namespace{
{
ObjectMeta: metav1.ObjectMeta{
Name: "ns",
},
},
}

seedData, _ := test.SeedV1beta1TestData(t, pipelinev1beta1test.Data{
Namespaces: ns,
})
cs := pipelinetest.Clients{
Pipeline: seedData.Pipeline,
Kube: seedData.Kube,
Resource: seedData.Resource,
}
cs.Pipeline.Resources = cb.APIResourceList("v1beta1", []string{"pipeline", "pipelinerun"})
objs := []runtime.Object{ps[0], prs[0]}
_, tdc := newPipelineClient("v1beta1", objs...)
dc, err := tdc.Client(
cb.UnstructuredV1beta1P(ps[0], "v1beta1"),
cb.UnstructuredV1beta1PR(prs[0], "v1beta1"),
)
if err != nil {
t.Errorf("unable to create dynamic client: %v", err)
}
p := &test.Params{Tekton: cs.Pipeline, Kube: cs.Kube, Dynamic: dc, Resource: cs.Resource}

pipeline := Command(p)
_, _ = test.ExecuteCommand(pipeline, "start", pipelineName,
"--use-pipelinerun="+theonename, "-n", "ns")

cl, _ := p.Clients()
pr, err := pipelinerun.Get(cl, "random", v1.GetOptions{}, "ns")
if err != nil {
t.Errorf("Error getting pipelineruns %s", err.Error())
}
test.AssertOutput(t, pr.Spec.Params[0].Name, "brush")
test.AssertOutput(t, pr.Spec.Params[0].Value, v1beta1.ArrayOrString{Type: "string", StringVal: "teeth"})
test.AssertOutput(t, timeoutDuration, pr.Spec.Timeout.Duration)
// Assert that new PipelineRun does not contain cancelled status of previous run
test.AssertOutput(t, v1beta1.PipelineRunSpecStatus(""), pr.Spec.Status)
}

func Test_start_pipeline_allkindparam(t *testing.T) {
Expand Down
Loading