github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/cli/cmd/alert/config_smtpserver_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 alert 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 mockBaseOptionsWithoutGlobal = func(s genericiooptions.IOStreams) baseOptions { 34 o := baseOptions{IOStreams: s} 35 alertManagerConfig := ` 36 receivers: 37 - name: default-receiver 38 - name: receiver-7pb52 39 webhook_configs: 40 - max_alerts: 10 41 url: http://kubeblocks-webhook-adaptor-config.default:5001/api/v1/notify/receiver-7pb52 42 route: 43 group_interval: 30s 44 group_wait: 5s 45 receiver: default-receiver 46 repeat_interval: 10m 47 routes: 48 - continue: true 49 matchers: 50 - app_kubernetes_io_instance=~a|b|c 51 - severity=~info|warning 52 receiver: receiver-7pb52` 53 webhookAdaptorConfig := ` 54 receivers: 55 - name: receiver-7pb52 56 params: 57 url: https://oapi.dingtalk.com/robot/send?access_token=123456 58 type: dingtalk-webhook` 59 alertCM := mockConfigmap(alertConfigmapName, alertConfigFileName, alertManagerConfig) 60 webhookAdaptorCM := mockConfigmap(webhookAdaptorConfigmapName, webhookAdaptorFileName, webhookAdaptorConfig) 61 o.alertConfigMap = alertCM 62 o.webhookConfigMap = webhookAdaptorCM 63 return o 64 } 65 66 var _ = Describe("config smtpserver", func() { 67 var f *cmdtesting.TestFactory 68 var s genericiooptions.IOStreams 69 70 BeforeEach(func() { 71 f = cmdtesting.NewTestFactory() 72 f.Client = &clientfake.RESTClient{} 73 s, _, _, _ = genericiooptions.NewTestIOStreams() 74 }) 75 76 AfterEach(func() { 77 f.Cleanup() 78 }) 79 80 It("validate", func() { 81 By("nothing to be input, should fail") 82 o := &configSMTPServerOptions{baseOptions: baseOptions{IOStreams: s}} 83 Expect(o.validate()).Should(HaveOccurred()) 84 85 By("set smtp-from, do not set smtp-smarthost, should fail") 86 Expect(o.validate()).Should(HaveOccurred()) 87 88 By("set smtp-from, set smtp-smarthost, do not set smtp-auth-username, should fail") 89 Expect(o.validate()).Should(HaveOccurred()) 90 91 By("set smtp-from, set smtp-smarthost, set smtp-auth-username, do not set smtp-auth-password, should fail") 92 Expect(o.validate()).Should(HaveOccurred()) 93 94 By("set smtp-from, set smtp-smarthost, set smtp-auth-username, set smtp-auth-password, should pass") 95 Expect(o.validate()).ShouldNot(Succeed()) 96 }) 97 98 It("set global", func() { 99 o := configSMTPServerOptions{baseOptions: mockBaseOptionsWithoutGlobal(s)} 100 o.smtpFrom = "user@kubeblocks.io" 101 o.smtpSmarthost = "smtp.feishu.cn:587" 102 o.smtpAuthUsername = "admin@kubeblocks.io" 103 o.smtpAuthPassword = "123456abc" 104 o.smtpAuthIdentity = "admin@kubeblocks.io" 105 o.client = testing.FakeClientSet(o.alertConfigMap, o.webhookConfigMap) 106 Expect(o.validate()).Should(Succeed()) 107 Expect(o.run()).Should(Succeed()) 108 }) 109 })