From ba0c84ade8a94737648173b9ecca4f8882040b40 Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Thu, 19 Sep 2019 14:39:54 +0300 Subject: [PATCH] Test token output Tested JSON, YAML, Go Template and Text token output formats. --- cmd/kubeadm/app/cmd/token_test.go | 125 ++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) diff --git a/cmd/kubeadm/app/cmd/token_test.go b/cmd/kubeadm/app/cmd/token_test.go index 7fc2d5bd5fd..791c71a4f13 100644 --- a/cmd/kubeadm/app/cmd/token_test.go +++ b/cmd/kubeadm/app/cmd/token_test.go @@ -32,6 +32,9 @@ import ( core "k8s.io/client-go/testing" "k8s.io/client-go/tools/clientcmd" kubeadmapiv1beta2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2" + outputapischeme "k8s.io/kubernetes/cmd/kubeadm/app/apis/output/scheme" + outputapiv1alpha1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/output/v1alpha1" + "k8s.io/kubernetes/cmd/kubeadm/app/util/output" ) const ( @@ -332,3 +335,125 @@ func TestRunDeleteTokens(t *testing.T) { t.Errorf("RunDeleteToken() succeeded for an invalid token: %v", err) } } + +func TestTokenOutput(t *testing.T) { + testCases := []struct { + name string + id string + secret string + description string + usages []string + extraGroups []string + outputFormat string + expectedBytes []byte + }{ + { + name: "JSON output", + id: "abcdef", + secret: "1234567890123456", + description: "valid bootstrap tooken", + usages: []string{"signing", "authentication"}, + extraGroups: []string{"system:bootstrappers:kubeadm:default-node-token"}, + outputFormat: "json", + expectedBytes: []byte(`{ + "kind": "BootstrapToken", + "apiVersion": "output.kubeadm.k8s.io/v1alpha1", + "creationTimestamp": null, + "token": "abcdef.1234567890123456", + "description": "valid bootstrap tooken", + "usages": [ + "signing", + "authentication" + ], + "groups": [ + "system:bootstrappers:kubeadm:default-node-token" + ] +} +`), + }, + { + name: "YAML output", + id: "abcdef", + secret: "1234567890123456", + description: "valid bootstrap tooken", + usages: []string{"signing", "authentication"}, + extraGroups: []string{"system:bootstrappers:kubeadm:default-node-token"}, + outputFormat: "yaml", + expectedBytes: []byte(`apiVersion: output.kubeadm.k8s.io/v1alpha1 +creationTimestamp: null +description: valid bootstrap tooken +groups: +- system:bootstrappers:kubeadm:default-node-token +kind: BootstrapToken +token: abcdef.1234567890123456 +usages: +- signing +- authentication +`), + }, + { + name: "Go template output", + id: "abcdef", + secret: "1234567890123456", + description: "valid bootstrap tooken", + usages: []string{"signing", "authentication"}, + extraGroups: []string{"system:bootstrappers:kubeadm:default-node-token"}, + outputFormat: "go-template={{println .token .description .usages .groups}}", + expectedBytes: []byte(`abcdef.1234567890123456 valid bootstrap tooken [signing authentication] [system:bootstrappers:kubeadm:default-node-token] +`), + }, + { + name: "text output", + id: "abcdef", + secret: "1234567890123456", + description: "valid bootstrap tooken", + usages: []string{"signing", "authentication"}, + extraGroups: []string{"system:bootstrappers:kubeadm:default-node-token"}, + outputFormat: "text", + expectedBytes: []byte(`TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS +abcdef.1234567890123456 signing,authentication valid bootstrap tooken system:bootstrappers:kubeadm:default-node-token +`), + }, + { + name: "jsonpath output", + id: "abcdef", + secret: "1234567890123456", + description: "valid bootstrap tooken", + usages: []string{"signing", "authentication"}, + extraGroups: []string{"system:bootstrappers:kubeadm:default-node-token"}, + outputFormat: "jsonpath={.token} {.groups}", + expectedBytes: []byte(`abcdef.1234567890123456 [system:bootstrappers:kubeadm:default-node-token]`), + }, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + token := outputapiv1alpha1.BootstrapToken{ + BootstrapToken: kubeadmapiv1beta2.BootstrapToken{ + Token: &kubeadmapiv1beta2.BootstrapTokenString{ID: tc.id, Secret: tc.secret}, + Description: tc.description, + Usages: tc.usages, + Groups: tc.extraGroups, + }, + } + buf := bytes.NewBufferString("") + outputFlags := output.NewOutputFlags(&tokenTextPrintFlags{}).WithTypeSetter(outputapischeme.Scheme).WithDefaultOutput(tc.outputFormat) + printer, err := outputFlags.ToPrinter() + if err != nil { + t.Errorf("can't create printer for output format %s: %+v", tc.outputFormat, err) + } + + if err := printer.PrintObj(&token, buf); err != nil { + t.Errorf("unable to print token %s: %+v", token.Token, err) + } + + actualBytes := buf.Bytes() + if !bytes.Equal(actualBytes, tc.expectedBytes) { + t.Errorf( + "failed TestTokenOutput:\n\nexpected:\n%s\n\nactual:\n%s", + string(tc.expectedBytes), + string(actualBytes), + ) + } + }) + } +}