github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/cli/cmd/fault/fault_time_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 fault 21 22 import ( 23 . "github.com/onsi/ginkgo/v2" 24 . "github.com/onsi/gomega" 25 26 "k8s.io/cli-runtime/pkg/genericiooptions" 27 clientfake "k8s.io/client-go/rest/fake" 28 cmdtesting "k8s.io/kubectl/pkg/cmd/testing" 29 30 "github.com/1aal/kubeblocks/pkg/cli/testing" 31 ) 32 33 var _ = Describe("Fault Time", func() { 34 var ( 35 tf *cmdtesting.TestFactory 36 streams genericiooptions.IOStreams 37 ) 38 BeforeEach(func() { 39 streams, _, _, _ = genericiooptions.NewTestIOStreams() 40 tf = cmdtesting.NewTestFactory().WithNamespace(testing.Namespace) 41 tf.Client = &clientfake.RESTClient{} 42 }) 43 44 AfterEach(func() { 45 tf.Cleanup() 46 }) 47 Context("test fault time", func() { 48 49 It("fault time", func() { 50 inputs := [][]string{ 51 {"--mode=one", "--time-offset=-5s", "--dry-run=client"}, 52 {"--mode=fixed", "--value=2", "--time-offset=-5s", "--dry-run=client"}, 53 {"--mode=fixed-percent", "--value=50", "--time-offset=-5s", "--dry-run=client"}, 54 {"--mode=random-max-percent", "--value=50", "--time-offset=-5s", "--dry-run=client"}, 55 {"--ns-fault=kb-system", "--time-offset=-5s", "--dry-run=client"}, 56 {"--node=minikube-m02", "--time-offset=-5s", "--dry-run=client"}, 57 {"--label=app.kubernetes.io/component=mysql", "--time-offset=-5s", "--dry-run=client"}, 58 {"--node-label=kubernetes.io/arch=arm64", "--time-offset=-5s", "--dry-run=client"}, 59 {"--annotation=example-annotation=group-a", "--time-offset=-5s", "--dry-run=client"}, 60 {"--time-offset=-5s", "--dry-run=client"}, 61 {"--time-offset=+5s", "--clock-id=CLOCK_REALTIME", "-c=mysql", "--dry-run=client"}, 62 } 63 o := NewTimeChaosOptions(tf, streams, "") 64 cmd := o.NewCobraCommand(Time, TimeShort) 65 o.AddCommonFlag(cmd, tf) 66 67 for _, input := range inputs { 68 Expect(cmd.Flags().Parse(input)).Should(Succeed()) 69 Expect(o.CreateOptions.Complete()) 70 Expect(o.Complete()).Should(Succeed()) 71 Expect(o.Validate()).Should(Succeed()) 72 Expect(o.Run()).Should(Succeed()) 73 } 74 }) 75 }) 76 })