github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/configuration/core/config_query_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 core 21 22 import ( 23 "encoding/json" 24 "testing" 25 26 "github.com/stretchr/testify/require" 27 corev1 "k8s.io/api/core/v1" 28 ) 29 30 func TestGetParameterFromConfiguration(t *testing.T) { 31 32 var iniConfig = ` 33 [mysqld] 34 innodb-buffer-pool-size=512M 35 log-bin=master-bin 36 gtid_mode=OFF 37 consensus_auto_leader_transfer=ON 38 39 log_error=/data/mysql/log/mysqld.err 40 character-sets-dir=/usr/share/mysql-8.0/charsets 41 datadir=/data/mysql/data 42 port=3306 43 general_log=1 44 general_log_file=/data/mysql/mysqld.log 45 pid-file=/data/mysql/run/mysqld.pid 46 server-id=1 47 slow_query_log=1 48 #slow_query_log_file=/data/mysql/mysqld-slow.log2 49 slow_query_log_file=/data/mysql/mysqld-slow.log 50 socket=/data/mysql/tmp/mysqld.sock 51 ssl-ca=/data/mysql/std_data/cacert.pem 52 ssl-cert=/data/mysql/std_data/server-cert.pem 53 ssl-key=/data/mysql/std_data/server-key.pem 54 tmpdir=/data/mysql/tmp/ 55 loose-sha256_password_auto_generate_rsa_keys=0 56 loose-caching_sha2_password_auto_generate_rsa_keys=0 57 secure-file-priv=/data/mysql 58 59 [mysqld_test] 60 innodb-buffer-pool-size=512M 61 log-bin=master-bin 62 gtid_mode=OFF 63 consensus_auto_leader_transfer=ON 64 slow_query_log_file=/data/mysql/mysqld-slow-test.log 65 66 67 [client] 68 socket=/data/mysql/tmp/mysqld.sock 69 host=localhost 70 ` 71 72 cm := corev1.ConfigMap{ 73 Data: map[string]string{ 74 "my.cnf": iniConfig, 75 }, 76 } 77 78 // empty test 79 { 80 emptyCM := corev1.ConfigMap{} 81 _, err := GetParameterFromConfiguration(&emptyCM, false, 82 "$..slow_query_log_file", 83 ) 84 require.NotNil(t, err) 85 86 _, err = GetParameterFromConfiguration(nil, true, 87 "$..slow_query_log_file", 88 ) 89 require.NotNil(t, err) 90 } 91 92 // for normal test 93 results, err := GetParameterFromConfiguration(&cm, false, 94 "$..slow_query_log", 95 "$..slow_query_log_file", 96 "$..log_output", 97 "$..long_query_time", 98 "$..log_error", 99 ) 100 101 require.Nil(t, err) 102 require.Equal(t, 5, len(results)) 103 104 var ( 105 slowQueryLog []interface{} 106 slowQueryLogFile []interface{} 107 logOutput []interface{} 108 longQueryTime []interface{} 109 logError []interface{} 110 ) 111 112 require.Nil(t, json.Unmarshal([]byte(results[0]), &slowQueryLog)) 113 require.Nil(t, json.Unmarshal([]byte(results[1]), &slowQueryLogFile)) 114 require.Nil(t, json.Unmarshal([]byte(results[2]), &logOutput)) 115 require.Nil(t, json.Unmarshal([]byte(results[3]), &longQueryTime)) 116 require.Nil(t, json.Unmarshal([]byte(results[4]), &logError)) 117 118 require.Equal(t, len(slowQueryLog), 1) 119 require.Equal(t, len(slowQueryLogFile), 2) 120 require.Equal(t, len(logOutput), 0) 121 require.Equal(t, len(longQueryTime), 0) 122 require.Equal(t, len(logError), 1) 123 124 require.Equal(t, "1", slowQueryLog[0]) 125 require.Equal(t, "/data/mysql/mysqld-slow.log", slowQueryLogFile[0]) 126 require.Equal(t, "/data/mysql/mysqld-slow-test.log", slowQueryLogFile[1]) 127 require.Equal(t, "/data/mysql/log/mysqld.err", logError[0]) 128 129 // multi file 130 { 131 cm := corev1.ConfigMap{ 132 Data: map[string]string{ 133 "my.cnf": iniConfig, 134 "my2.cnf": iniConfig, 135 }, 136 } 137 138 // for normal test 139 results, err := GetParameterFromConfiguration(&cm, true, 140 "$..slow_query_log", 141 "$..slow_query_log_file", 142 "$..log_output", 143 "$..long_query_time", 144 "$..log_error", 145 ) 146 147 require.Nil(t, err) 148 require.Equal(t, 5, len(results)) 149 150 var ( 151 slowQueryLog []interface{} 152 slowQueryLogFile []interface{} 153 logOutput []interface{} 154 longQueryTime []interface{} 155 logError []interface{} 156 ) 157 158 require.Nil(t, json.Unmarshal([]byte(results[0]), &slowQueryLog)) 159 require.Nil(t, json.Unmarshal([]byte(results[1]), &slowQueryLogFile)) 160 require.Nil(t, json.Unmarshal([]byte(results[2]), &logOutput)) 161 require.Nil(t, json.Unmarshal([]byte(results[3]), &longQueryTime)) 162 require.Nil(t, json.Unmarshal([]byte(results[4]), &logError)) 163 164 require.Equal(t, len(slowQueryLog), 2) 165 require.Equal(t, len(slowQueryLogFile), 4) 166 require.Equal(t, len(logOutput), 0) 167 require.Equal(t, len(longQueryTime), 0) 168 require.Equal(t, len(logError), 2) 169 170 require.Equal(t, "1", slowQueryLog[0]) 171 require.Equal(t, "/data/mysql/mysqld-slow.log", slowQueryLogFile[0]) 172 require.Equal(t, "/data/mysql/log/mysqld.err", logError[0]) 173 } 174 }