Skip to content

Commit

Permalink
Modify tkn version output to hide Triggers and Dashboard version if t…
Browse files Browse the repository at this point in the history
…hey are not installed and added required unit tests.

Signed-off-by: Divyansh42 <diagrawa@redhat.com>
  • Loading branch information
divyansh42 authored and tekton-robot committed Sep 29, 2020
1 parent 7168e57 commit efd31f9
Show file tree
Hide file tree
Showing 8 changed files with 123 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Client version: dev
Pipeline version: v0.10.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Client version: dev
Pipeline version: v0.10.0
Triggers version: v0.5.0
Dashboard version: v0.7.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Client version: dev
Pipeline version: v0.10.0
Dashboard version: v0.7.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Client version: dev
Pipeline version: v0.10.0
Triggers version: v0.5.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Client version: dev
Pipeline version: unknown, pipeline controller may be installed in another namespace please use tkn version -n {namespace}
2 changes: 0 additions & 2 deletions pkg/cmd/version/testdata/TestVersionGood.golden
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
Client version: v1.2.3
Pipeline version: unknown, pipeline controller may be installed in another namespace please use tkn version -n {namespace}
Triggers version: unknown, triggers controller may be installed in another namespace please use tkn version -n {namespace}
Dashboard version: unknown, dashboard controller may be installed in another namespace please use tkn version -n {namespace}
12 changes: 4 additions & 8 deletions pkg/cmd/version/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,17 +67,13 @@ func Command(p cli.Params) *cobra.Command {

fmt.Fprintf(cmd.OutOrStdout(), "Pipeline version: %s\n", pipelineVersion)
triggersVersion, _ := version.GetTriggerVersion(cs, namespace)
if triggersVersion == "" {
triggersVersion = "unknown, " +
"triggers controller may be installed in another namespace please use tkn version -n {namespace}"
if triggersVersion != "" {
fmt.Fprintf(cmd.OutOrStdout(), "Triggers version: %s\n", triggersVersion)
}
fmt.Fprintf(cmd.OutOrStdout(), "Triggers version: %s\n", triggersVersion)
dashboardVersion, _ := version.GetDashboardVersion(cs, namespace)
if dashboardVersion == "" {
dashboardVersion = "unknown, " +
"dashboard controller may be installed in another namespace please use tkn version -n {namespace}"
if dashboardVersion != "" {
fmt.Fprintf(cmd.OutOrStdout(), "Dashboard version: %s\n", dashboardVersion)
}
fmt.Fprintf(cmd.OutOrStdout(), "Dashboard version: %s\n", dashboardVersion)
}

if !check || clientVersion == devVersion {
Expand Down
105 changes: 105 additions & 0 deletions pkg/cmd/version/version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,17 @@ import (
"net"
"net/http"
"net/http/httptest"
"strings"
"testing"
"time"

"github.com/tektoncd/cli/pkg/test"
pipelinetest "github.com/tektoncd/pipeline/test/v1alpha1"
"gotest.tools/v3/assert"
"gotest.tools/v3/golden"
v1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func TestVersionGood(t *testing.T) {
Expand Down Expand Up @@ -150,3 +154,104 @@ func testingHTTPClient(handler http.Handler) (*http.Client, func()) {

return cli, s.Close
}

func TestGetVersions(t *testing.T) {
pipelineDeploymentLabels := map[string]string{
"app.kubernetes.io/part-of": "tekton-pipelines",
"app.kubernetes.io/component": "controller",
"app.kubernetes.io/name": "controller",
}
triggersDeploymentLabels := map[string]string{
"app.kubernetes.io/part-of": "tekton-triggers",
"app.kubernetes.io/component": "controller",
"app.kubernetes.io/name": "controller",
}
dashboardDeploymentLabels := map[string]string{
"app.kubernetes.io/part-of": "tekton-dashboard",
"app.kubernetes.io/component": "dashboard",
"app.kubernetes.io/name": "dashboard",
}
pipelineDeployment := getDeploymentData("pipeline-dep", "", pipelineDeploymentLabels, map[string]string{"app.kubernetes.io/version": "v0.10.0"}, nil)
triggersDeployment := getDeploymentData("triggers-dep", "", triggersDeploymentLabels, map[string]string{"app.kubernetes.io/version": "v0.5.0"}, nil)
dashboardDeployment := getDeploymentData("dashboard-dep", "", dashboardDeploymentLabels, map[string]string{"app.kubernetes.io/version": "v0.7.0"}, nil)

testParams := []struct {
name string
namespace string
userProvidedNamespace string
deployment []*v1.Deployment
goldenFile bool
}{{
name: "empty deployment items",
namespace: "tekton-pipelines",
deployment: []*v1.Deployment{},
goldenFile: true,
}, {
name: "deployment only with pipeline installed",
namespace: "test",
userProvidedNamespace: "test",
deployment: []*v1.Deployment{pipelineDeployment},
goldenFile: true,
}, {
name: "deployment with pipeline and triggers installed",
namespace: "test",
userProvidedNamespace: "test",
deployment: []*v1.Deployment{pipelineDeployment, triggersDeployment},
goldenFile: true,
}, {
name: "deployment with pipeline and dashboard installed",
namespace: "test",
userProvidedNamespace: "test",
deployment: []*v1.Deployment{pipelineDeployment, dashboardDeployment},
goldenFile: true,
}, {
name: "deployment with pipeline, triggers and dashboard installed",
namespace: "test",
userProvidedNamespace: "test",
deployment: []*v1.Deployment{pipelineDeployment, triggersDeployment, dashboardDeployment},
goldenFile: true,
}}
for _, tp := range testParams {
t.Run(tp.name, func(t *testing.T) {
seedData, _ := test.SeedTestData(t, pipelinetest.Data{})
cs := pipelinetest.Clients{Kube: seedData.Kube}
p := &test.Params{Kube: cs.Kube}
version := Command(p)
cls, err := p.Clients()
if err != nil {
t.Errorf("failed to get client: %v", err)
}
// To add multiple deployments in a particular namespace
for _, v := range tp.deployment {
if _, err := cls.Kube.AppsV1().Deployments(tp.namespace).Create(v); err != nil {
t.Errorf("failed to create deployment: %v", err)
}
}
got, _ := test.ExecuteCommand(version, "version", "-n", "test")
golden.Assert(t, got, strings.ReplaceAll(fmt.Sprintf("%s.golden", t.Name()), "/", "-"))
})
}
}

func getDeploymentData(name, image string, deploymentLabels, podTemplateLabels, annotations map[string]string) *v1.Deployment {
return &v1.Deployment{
TypeMeta: metav1.TypeMeta{},
ObjectMeta: metav1.ObjectMeta{
Name: name,
Labels: deploymentLabels,
},
Spec: v1.DeploymentSpec{
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: podTemplateLabels,
Annotations: annotations,
},
Spec: corev1.PodSpec{
Containers: []corev1.Container{{
Image: image,
}},
},
},
},
}
}

0 comments on commit efd31f9

Please sign in to comment.