github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/cli/cmd/fault/fault_dns_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 "github.com/chaos-mesh/chaos-mesh/api/v1alpha1" 27 "k8s.io/cli-runtime/pkg/genericiooptions" 28 clientfake "k8s.io/client-go/rest/fake" 29 cmdtesting "k8s.io/kubectl/pkg/cmd/testing" 30 31 "github.com/1aal/kubeblocks/pkg/cli/testing" 32 ) 33 34 var _ = Describe("Fault Network DNS", func() { 35 var ( 36 tf *cmdtesting.TestFactory 37 streams genericiooptions.IOStreams 38 ) 39 BeforeEach(func() { 40 streams, _, _, _ = genericiooptions.NewTestIOStreams() 41 tf = cmdtesting.NewTestFactory().WithNamespace(testing.Namespace) 42 tf.Client = &clientfake.RESTClient{} 43 }) 44 45 AfterEach(func() { 46 tf.Cleanup() 47 }) 48 Context("test fault network dns", func() { 49 50 It("fault network dns random", func() { 51 inputs := [][]string{ 52 {"--dry-run=client", "--patterns=kubeblocks.io"}, 53 {"--mode=one", "--patterns=kubeblocks.io", "--dry-run=client"}, 54 {"--mode=fixed", "--value=2", "--patterns=kubeblocks.io", "--dry-run=client"}, 55 {"--mode=fixed-percent", "--value=50", "--patterns=kubeblocks.io", "--dry-run=client"}, 56 {"--mode=random-max-percent", "--value=50", "--patterns=kubeblocks.io", "--dry-run=client"}, 57 {"--ns-fault=kb-system", "--patterns=kubeblocks.io", "--dry-run=client"}, 58 {"--node=minikube-m02", "--patterns=kubeblocks.io", "--dry-run=client"}, 59 {"--label=app.kubernetes.io/component=mysql", "--patterns=kubeblocks.io", "--dry-run=client"}, 60 {"--node-label=kubernetes.io/arch=arm64", "--patterns=kubeblocks.io", "--dry-run=client"}, 61 {"--annotation=example-annotation=group-a", "--patterns=kubeblocks.io", "--dry-run=client"}, 62 } 63 o := NewDNSChaosOptions(tf, streams, string(v1alpha1.RandomAction)) 64 cmd := o.NewCobraCommand(Random, RandomShort) 65 o.AddCommonFlag(cmd) 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 It("fault network dns error", func() { 77 inputs := [][]string{ 78 {"--patterns=kubeblocks.io", "--dry-run=client"}, 79 } 80 o := NewDNSChaosOptions(tf, streams, string(v1alpha1.ErrorAction)) 81 cmd := o.NewCobraCommand(Error, ErrorShort) 82 o.AddCommonFlag(cmd) 83 84 for _, input := range inputs { 85 Expect(cmd.Flags().Parse(input)).Should(Succeed()) 86 Expect(o.CreateOptions.Complete()) 87 Expect(o.Complete()).Should(Succeed()) 88 Expect(o.Validate()).Should(Succeed()) 89 Expect(o.Run()).Should(Succeed()) 90 } 91 }) 92 }) 93 })