diff --git a/CHANGELOG.md b/CHANGELOG.md index 1390460..406bac0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.68.0 12-Aug-2022 + +### NEW FEATURES + +* Add file `connection_super_user.conf` and `connection_super_user.json` to each sandbox + ## 1.67.0 10-Aug-2022 ### Code improvements diff --git a/common/VERSION b/common/VERSION index 77c582d..21807ec 100644 --- a/common/VERSION +++ b/common/VERSION @@ -1 +1 @@ -1.67.0 \ No newline at end of file +1.68.0 \ No newline at end of file diff --git a/globals/globals.go b/globals/globals.go index 37026ae..a5791c1 100644 --- a/globals/globals.go +++ b/globals/globals.go @@ -244,42 +244,44 @@ const ( ExportSupportedMysqlVersions = "supported-mysql-versions" // Instantiated in sandbox package - AutoCnfName = "auto.cnf" - DataDirName = "data" - ScriptAddOption = "add_option" - ScriptClear = "clear" - ScriptGrantsMysql = "grants.mysql" - ScriptInitDb = "init_db" - ScriptAfterStart = "after_start" - ScriptLoadGrants = "load_grants" - ScriptMy = "my" - ScriptMySandboxCnf = "my.sandbox.cnf" - ScriptMysqlsh = "mysqlsh" - ScriptNoClear = "no_clear" - ScriptPostGrantsSql = "post_grants.sql" - ScriptPreGrantsSql = "pre_grants.sql" - ScriptRestart = "restart" - ScriptSbInclude = "sb_include" - ScriptSendKill = "send_kill" - ScriptShowBinlog = "show_binlog" - ScriptShowLog = "show_log" - ScriptShowRelayLog = "show_relaylog" - ScriptStart = "start" - ScriptStatus = "status" - ScriptStop = "stop" - ScriptTestSb = "test_sb" - ScriptUse = "use" - ScriptUseAdmin = "use_admin" - ScriptConnectionConf = "connection.conf" - ScriptConnectionSql = "connection.sql" - ScriptConnectionJson = "connection.json" - ScriptReplicateFrom = "replicate_from" - ScriptCloneConnectionSql = "clone_connection.sql" - ScriptCloneFrom = "clone_from" - ScriptMetadata = "metadata" - ScriptSysbench = "sysbench" - ScriptSysbenchReady = "sysbench_ready" - ScriptWipeAndRestart = "wipe_and_restart" + AutoCnfName = "auto.cnf" + DataDirName = "data" + ScriptAddOption = "add_option" + ScriptClear = "clear" + ScriptGrantsMysql = "grants.mysql" + ScriptInitDb = "init_db" + ScriptAfterStart = "after_start" + ScriptLoadGrants = "load_grants" + ScriptMy = "my" + ScriptMySandboxCnf = "my.sandbox.cnf" + ScriptMysqlsh = "mysqlsh" + ScriptNoClear = "no_clear" + ScriptPostGrantsSql = "post_grants.sql" + ScriptPreGrantsSql = "pre_grants.sql" + ScriptRestart = "restart" + ScriptSbInclude = "sb_include" + ScriptSendKill = "send_kill" + ScriptShowBinlog = "show_binlog" + ScriptShowLog = "show_log" + ScriptShowRelayLog = "show_relaylog" + ScriptStart = "start" + ScriptStatus = "status" + ScriptStop = "stop" + ScriptTestSb = "test_sb" + ScriptUse = "use" + ScriptUseAdmin = "use_admin" + ScriptConnectionConf = "connection.conf" + ScriptConnectionSuperConf = "connection_super_user.conf" + ScriptConnectionSql = "connection.sql" + ScriptConnectionJson = "connection.json" + ScriptConnectionSuperJson = "connection_super_user.json" + ScriptReplicateFrom = "replicate_from" + ScriptCloneConnectionSql = "clone_connection.sql" + ScriptCloneFrom = "clone_from" + ScriptMetadata = "metadata" + ScriptSysbench = "sysbench" + ScriptSysbenchReady = "sysbench_ready" + ScriptWipeAndRestart = "wipe_and_restart" ScriptCheckMsNodes = "check_ms_nodes" ScriptCheckNodes = "check_nodes" diff --git a/globals/template_names.go b/globals/template_names.go index a839098..6212a27 100644 --- a/globals/template_names.go +++ b/globals/template_names.go @@ -97,49 +97,51 @@ const ( TmplTidbMock = "tidb_mock" // single - TmplShowBinlog = "show_binlog" - TmplShowRelaylog = "show_relaylog" - TmplCloneFrom = "clone_from" - TmplSemisyncSlaveOptions = "semisync_slave_options" - TmplGrants8x = "grants8x" - TmplExposeDdTables = "expose_dd_tables" - TmplUseAdmin = "use_admin" - TmplShowLog = "show_log" - TmplWipeAndRestart = "wipe_and_restart" - TmplCopyright = "copyright" - TmplReplCrashSafeOptions = "repl_crash_safe_options" - TmplSbLocked = "sb_locked" - TmplSbInclude = "sb_include" - TmplConnectionInfoSql = "connection_info_sql" - TmplMetadata = "metadata" - TmplSemisyncMasterOptions = "semisync_master_options" - TmplGrants57 = "grants57" - TmplLoadGrants = "load_grants" - TmplMy = "my" - TmplAfterStart = "after_start" - TmplConnectionInfoJson = "connection_info_json" - TmplClear = "clear" - TmplStatus = "status" - TmplTaskUserGrants = "task_user_grants" - TmplTestSb = "test_sb" - TmplMyCnf = "my_cnf" - TmplRestart = "restart" - TmplSysbench = "sysbench" - TmplSysbenchReady = "sysbench_ready" - TmplStop = "stop" - TmplGrants5x = "grants5x" - TmplAddOption = "add_option" - TmplReplicateFrom = "replicate_from" - TmplGtidOptions56 = "gtid_options_56" - TmplGtidOptions57 = "gtid_options_57" - TmplCloneConnectionSql = "clone_connection_sql" - TmplInitDb = "init_db" - TmplUse = "use" - TmplMysqlsh = "mysqlsh" - TmplSendKill = "send_kill" - TmplConnectionInfoConf = "connection_info_conf" - TmplReplicationOptions = "replication_options" - TmplStart = "start" + TmplShowBinlog = "show_binlog" + TmplShowRelaylog = "show_relaylog" + TmplCloneFrom = "clone_from" + TmplSemisyncSlaveOptions = "semisync_slave_options" + TmplGrants8x = "grants8x" + TmplExposeDdTables = "expose_dd_tables" + TmplUseAdmin = "use_admin" + TmplShowLog = "show_log" + TmplWipeAndRestart = "wipe_and_restart" + TmplCopyright = "copyright" + TmplReplCrashSafeOptions = "repl_crash_safe_options" + TmplSbLocked = "sb_locked" + TmplSbInclude = "sb_include" + TmplConnectionInfoSql = "connection_info_sql" + TmplMetadata = "metadata" + TmplSemisyncMasterOptions = "semisync_master_options" + TmplGrants57 = "grants57" + TmplLoadGrants = "load_grants" + TmplMy = "my" + TmplAfterStart = "after_start" + TmplConnectionInfoJson = "connection_info_json" + TmplConnectionInfoSuperJson = "connection_info_super_json" + TmplClear = "clear" + TmplStatus = "status" + TmplTaskUserGrants = "task_user_grants" + TmplTestSb = "test_sb" + TmplMyCnf = "my_cnf" + TmplRestart = "restart" + TmplSysbench = "sysbench" + TmplSysbenchReady = "sysbench_ready" + TmplStop = "stop" + TmplGrants5x = "grants5x" + TmplAddOption = "add_option" + TmplReplicateFrom = "replicate_from" + TmplGtidOptions56 = "gtid_options_56" + TmplGtidOptions57 = "gtid_options_57" + TmplCloneConnectionSql = "clone_connection_sql" + TmplInitDb = "init_db" + TmplUse = "use" + TmplMysqlsh = "mysqlsh" + TmplSendKill = "send_kill" + TmplConnectionInfoConf = "connection_info_conf" + TmplReplicationOptions = "replication_options" + TmplConnectionInfoSuperConf = "connection_info_super_conf" + TmplStart = "start" // pxc TmplPxcReplication = "pxc_replication" diff --git a/ops/sql.go b/ops/sql.go index 54defdd..87a13d5 100644 --- a/ops/sql.go +++ b/ops/sql.go @@ -34,12 +34,15 @@ type sandboxConnection struct { } // getSandboxConnection finds the connection credentials in a given sandbox directory -func getSandboxConnection(sandboxPath string) (sandboxConnection, error) { +func getSandboxConnection(sandboxPath string, asSuperUser bool) (sandboxConnection, error) { var sc sandboxConnection if !common.DirExists(sandboxPath) { return sc, fmt.Errorf(globals.ErrDirectoryNotFound, sandboxPath) } connectionFile := path.Join(sandboxPath, globals.ScriptConnectionJson) + if asSuperUser { + connectionFile = path.Join(sandboxPath, globals.ScriptConnectionSuperJson) + } if !common.FileExists(connectionFile) { return sc, fmt.Errorf(globals.ErrFileNotFound, connectionFile) } @@ -53,9 +56,9 @@ func getSandboxConnection(sandboxPath string) (sandboxConnection, error) { } // RunSandboxQuery runs a SQL query in a given sandbox directory -func RunSandboxQuery[T comparable](sandboxPath, query string) (interface{}, error) { +func RunSandboxQuery[T comparable](sandboxPath, query string, asSuperUser bool) (interface{}, error) { - credentials, err := getSandboxConnection(sandboxPath) + credentials, err := getSandboxConnection(sandboxPath, asSuperUser) if err != nil { return "", err } diff --git a/sandbox/sandbox.go b/sandbox/sandbox.go index 2b1d60d..ee28b29 100644 --- a/sandbox/sandbox.go +++ b/sandbox/sandbox.go @@ -931,7 +931,9 @@ func createSingleSandbox(sandboxDef SandboxDef) (execList []concurrent.Execution {globals.ScriptAfterStart, globals.TmplAfterStart, true}, {globals.ScriptConnectionSql, globals.TmplConnectionInfoSql, false}, {globals.ScriptConnectionConf, globals.TmplConnectionInfoConf, false}, + {globals.ScriptConnectionSuperConf, globals.TmplConnectionInfoSuperConf, false}, {globals.ScriptConnectionJson, globals.TmplConnectionInfoJson, false}, + {globals.ScriptConnectionSuperJson, globals.TmplConnectionInfoSuperJson, false}, {globals.ScriptReplicateFrom, globals.TmplReplicateFrom, true}, {globals.ScriptMetadata, globals.TmplMetadata, true}, {globals.ScriptSysbench, globals.TmplSysbench, true}, diff --git a/sandbox/templates.go b/sandbox/templates.go index fe4e8e4..8be5a1a 100644 --- a/sandbox/templates.go +++ b/sandbox/templates.go @@ -161,9 +161,15 @@ var ( //go:embed templates/single/connection_info_json.gotxt ConnectionInfoJson string + //go:embed templates/single/connection_info_super_json.gotxt + ConnectionInfoSuperJson string + //go:embed templates/single/connection_info_conf.gotxt ConnectionInfoConf string + //go:embed templates/single/connection_info_super_conf.gotxt + ConnectionInfoSuperConf string + //go:embed templates/single/clone_connection_sql.gotxt cloneConnectionSql string @@ -362,11 +368,21 @@ var ( Notes: "", Contents: ConnectionInfoConf, }, + globals.TmplConnectionInfoSuperConf: TemplateDesc{ + Description: "connection info use this sandbox as super user (.conf)", + Notes: "", + Contents: ConnectionInfoSuperConf, + }, globals.TmplConnectionInfoJson: TemplateDesc{ Description: "connection info to replicate from this sandbox (.json)", Notes: "", Contents: ConnectionInfoJson, }, + globals.TmplConnectionInfoSuperJson: TemplateDesc{ + Description: "connection info to use this sandbox as super user (.json)", + Notes: "", + Contents: ConnectionInfoSuperJson, + }, globals.TmplReplicateFrom: TemplateDesc{ Description: "starts replication from another sandbox", Notes: "", diff --git a/sandbox/templates/single/connection_info_super_conf.gotxt b/sandbox/templates/single/connection_info_super_conf.gotxt new file mode 100644 index 0000000..ba980f4 --- /dev/null +++ b/sandbox/templates/single/connection_info_super_conf.gotxt @@ -0,0 +1,5 @@ + +master_host = {{.SbHost}} +master_port = {{.Port}} +master_user = {{.DbUser}} +master_password = {{.DbPassword}} diff --git a/sandbox/templates/single/connection_info_super_json.gotxt b/sandbox/templates/single/connection_info_super_json.gotxt new file mode 100644 index 0000000..cfb5855 --- /dev/null +++ b/sandbox/templates/single/connection_info_super_json.gotxt @@ -0,0 +1,7 @@ + +{ + "master_host" : "{{.SbHost}}", + "master_port" : {{.Port}}, + "master_user" : "{{.DbUser}}", + "master_password" : "{{.DbPassword}}" +} diff --git a/ts/commands.go b/ts/commands.go index 6cbc649..75fd98e 100644 --- a/ts/commands.go +++ b/ts/commands.go @@ -162,11 +162,11 @@ func runSqlInSandbox(ts *testscript.TestScript, neg bool, args []string) { var strResult string if isANumber(wanted) { - result, err := ops.RunSandboxQuery[int](sbDir, query) + result, err := ops.RunSandboxQuery[int](sbDir, query, true) ts.Check(err) strResult = fmt.Sprintf("%d", result.(int)) } else { - result, err := ops.RunSandboxQuery[string](sbDir, query) + result, err := ops.RunSandboxQuery[string](sbDir, query, true) ts.Check(err) strResult = result.(string) } diff --git a/ts/templates/feature/dd-expose-tables.tmpl b/ts/templates/feature/dd-expose-tables.tmpl index ee84caf..dfc3157 100644 --- a/ts/templates/feature/dd-expose-tables.tmpl +++ b/ts/templates/feature/dd-expose-tables.tmpl @@ -43,12 +43,8 @@ stdout '# fail : 0' run_sql_in_sandbox $sb_dir 'select VERSION()' {{.DbVersion}}-debug run_sql_in_sandbox $sb_dir 'select @@debug is not null' 1 -exec $sb_dir/use -BN -e 'select count(*) from mysql.tables where name =''tables'' and schema_id=1' -stdout '\b1\b' -! stderr . -exec $sb_dir/use -BN -e 'select count(*) from information_schema.tables where table_name =''tables'' and table_schema=''mysql''' -stdout '\b1\b' -! stderr . +run_sql_in_sandbox $sb_dir 'select count(*) from mysql.tables where name =''tables'' and schema_id=1' 1 +run_sql_in_sandbox $sb_dir 'select count(*) from information_schema.tables where table_name =''tables'' and table_schema=''mysql''' 1 # sandbox cleanup exec dbdeployer delete msb_{{.DbPathVer}}_dd