github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/cli/cmd/clusterversion/clusterversion_test.go (about) 1 /* 2 Copyright (C) 2022-2023 ApeCloud Co., Ltd 3 4 This file is part of KubeBlocks project 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package clusterversion 21 22 import ( 23 "bytes" 24 "fmt" 25 "net/http" 26 27 . "github.com/onsi/ginkgo/v2" 28 . "github.com/onsi/gomega" 29 30 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 31 "k8s.io/apimachinery/pkg/runtime" 32 "k8s.io/apimachinery/pkg/runtime/schema" 33 "k8s.io/cli-runtime/pkg/genericiooptions" 34 "k8s.io/cli-runtime/pkg/resource" 35 "k8s.io/client-go/kubernetes/scheme" 36 clientfake "k8s.io/client-go/rest/fake" 37 cmdtesting "k8s.io/kubectl/pkg/cmd/testing" 38 39 appsv1alpha1 "github.com/1aal/kubeblocks/apis/apps/v1alpha1" 40 "github.com/1aal/kubeblocks/pkg/cli/testing" 41 "github.com/1aal/kubeblocks/pkg/cli/types" 42 "github.com/1aal/kubeblocks/pkg/cli/util" 43 ) 44 45 var _ = Describe("clusterversion", func() { 46 var streams genericiooptions.IOStreams 47 var tf *cmdtesting.TestFactory 48 out := new(bytes.Buffer) 49 var CreateTime string 50 mockClient := func(data runtime.Object) *cmdtesting.TestFactory { 51 tf := testing.NewTestFactory(testing.Namespace) 52 codec := scheme.Codecs.LegacyCodec(scheme.Scheme.PrioritizedVersionsAllGroups()...) 53 tf.UnstructuredClient = &clientfake.RESTClient{ 54 NegotiatedSerializer: resource.UnstructuredPlusDefaultContentConfig().NegotiatedSerializer, 55 GroupVersion: schema.GroupVersion{Group: types.AppsAPIGroup, Version: types.AppsAPIVersion}, 56 Resp: &http.Response{StatusCode: http.StatusOK, Header: cmdtesting.DefaultHeader(), Body: cmdtesting.ObjBody(codec, data)}, 57 } 58 tf.Client = tf.UnstructuredClient 59 tf.FakeDynamicClient = testing.FakeDynamicClient(data) 60 return tf 61 } 62 63 BeforeEach(func() { 64 _ = appsv1alpha1.AddToScheme(scheme.Scheme) 65 _ = metav1.AddMetaToScheme(scheme.Scheme) 66 streams, _, out, _ = genericiooptions.NewTestIOStreams() 67 fakeCV := testing.FakeClusterVersion() 68 CreateTime = util.TimeFormat(&fakeCV.CreationTimestamp) 69 tf = mockClient(fakeCV) 70 }) 71 72 AfterEach(func() { 73 tf.Cleanup() 74 }) 75 76 It("clusterversion cmd", func() { 77 cmd := NewClusterVersionCmd(tf, streams) 78 Expect(cmd).ShouldNot(BeNil()) 79 Expect(cmd.HasSubCommands()).Should(BeTrue()) 80 }) 81 82 It("list", func() { 83 cmd := NewListCmd(tf, streams) 84 Expect(cmd).ShouldNot(BeNil()) 85 }) 86 87 It("list --cluster-definition", func() { 88 cmd := NewListCmd(tf, streams) 89 cmd.Run(cmd, []string{"--cluster-definition=" + testing.ClusterDefName}) 90 expected := fmt.Sprintf("NAME CLUSTER-DEFINITION STATUS IS-DEFAULT CREATED-TIME \nfake-cluster-version fake-cluster-definition false %s \n", CreateTime) 91 Expect(expected).Should(Equal(out.String())) 92 }) 93 })