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  }