mirror of https://github.com/knative/func.git
101 lines
3.0 KiB
Go
101 lines
3.0 KiB
Go
package oncluster
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"knative.dev/func/pkg/k8s"
|
|
"knative.dev/func/pkg/pipelines/tekton"
|
|
)
|
|
|
|
// TektonPipelineExists verifies pipeline with a given prefix exists on cluster
|
|
func TektonPipelineExists(t *testing.T, pipelinePrefix string) bool {
|
|
ns, _, _ := k8s.GetClientConfig().Namespace()
|
|
client, _ := tekton.NewTektonClient(ns)
|
|
pipelines, err := client.Pipelines(ns).List(context.Background(), v1.ListOptions{})
|
|
if err != nil {
|
|
t.Error(err.Error())
|
|
}
|
|
for _, pipeline := range pipelines.Items {
|
|
if strings.HasPrefix(pipeline.Name, pipelinePrefix) && strings.HasSuffix(pipeline.Name, "-pipeline") {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// TektonPipelineRunExists verifies pipelinerun with a given prefix exists on cluster
|
|
func TektonPipelineRunExists(t *testing.T, pipelineRunPrefix string) bool {
|
|
ns, _, _ := k8s.GetClientConfig().Namespace()
|
|
client, _ := tekton.NewTektonClient(ns)
|
|
pipelineRuns, err := client.PipelineRuns(ns).List(context.Background(), v1.ListOptions{})
|
|
if err != nil {
|
|
t.Error(err.Error())
|
|
}
|
|
for _, run := range pipelineRuns.Items {
|
|
if strings.HasPrefix(run.Name, pipelineRunPrefix) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
type PipelineRunSummary struct {
|
|
PipelineRunName string
|
|
PipelineRunStatus string
|
|
TasksRunSummary []PipelineTaskRunSummary
|
|
}
|
|
type PipelineTaskRunSummary struct {
|
|
TaskName string
|
|
TaskStatus string
|
|
}
|
|
|
|
func (p *PipelineRunSummary) ToString() string {
|
|
r := fmt.Sprintf("run: %-42v, status: %v\n", p.PipelineRunName, p.PipelineRunStatus)
|
|
for _, t := range p.TasksRunSummary {
|
|
r = r + fmt.Sprintf(" task: %-15v, status: %v\n", t.TaskName, t.TaskStatus)
|
|
}
|
|
return r
|
|
}
|
|
|
|
func (p *PipelineRunSummary) IsSucceed() bool {
|
|
return p.PipelineRunStatus == "Succeeded"
|
|
}
|
|
|
|
// TektonPipelineLastRunSummary gather information about a pipeline run such as
|
|
// list of tasks executed and status of each task execution. It is meant to be used on assertions
|
|
func TektonPipelineLastRunSummary(t *testing.T, pipelinePrefix string) *PipelineRunSummary {
|
|
ns, _, _ := k8s.GetClientConfig().Namespace()
|
|
client, _ := tekton.NewTektonClient(ns)
|
|
pipelineRuns, err := client.PipelineRuns(ns).List(context.Background(), v1.ListOptions{})
|
|
if err != nil {
|
|
t.Error(err.Error())
|
|
}
|
|
lr := PipelineRunSummary{}
|
|
for _, run := range pipelineRuns.Items {
|
|
if strings.HasPrefix(run.Name, pipelinePrefix) {
|
|
lr.PipelineRunName = run.Name
|
|
if len(run.Status.Conditions) > 0 {
|
|
lr.PipelineRunStatus = run.Status.Conditions[0].Reason
|
|
}
|
|
lr.TasksRunSummary = []PipelineTaskRunSummary{}
|
|
for _, ref := range run.Status.ChildReferences {
|
|
r := PipelineTaskRunSummary{}
|
|
r.TaskName = ref.PipelineTaskName
|
|
taskRun, err := client.TaskRuns(ns).Get(context.Background(), ref.Name, v1.GetOptions{})
|
|
if err != nil {
|
|
t.Error(err.Error())
|
|
}
|
|
if len(taskRun.Status.Conditions) > 0 {
|
|
r.TaskStatus = taskRun.Status.Conditions[0].Reason
|
|
}
|
|
lr.TasksRunSummary = append(lr.TasksRunSummary, r)
|
|
}
|
|
}
|
|
}
|
|
return &lr
|
|
}
|