@@ -2072,6 +2072,62 @@ func (suite *ApplierTestSuite) TestApplyIterationMoveTableCopyQueriesNoRows() {
20722072 suite .Require ().Equal (0 , count )
20732073}
20742074
2075+ func (suite * ApplierTestSuite ) TestShowStatusVariable () {
2076+ ctx := context .Background ()
2077+
2078+ _ , err := suite .db .ExecContext (ctx , fmt .Sprintf ("CREATE TABLE %s (id INT, item_id INT);" , getTestTableName ()))
2079+ suite .Require ().NoError (err )
2080+
2081+ connectionConfig , err := getTestConnectionConfig (ctx , suite .mysqlContainer )
2082+ suite .Require ().NoError (err )
2083+
2084+ migrationContext := newTestMigrationContext ()
2085+ migrationContext .ApplierConnectionConfig = connectionConfig
2086+ migrationContext .SetConnectionConfig ("innodb" )
2087+
2088+ applier := NewApplier (migrationContext )
2089+ defer applier .Teardown ()
2090+
2091+ suite .Require ().NoError (applier .InitDBConnections ())
2092+
2093+ // Uptime is always present in `SHOW GLOBAL STATUS` and is non-negative.
2094+ result , err := applier .ShowStatusVariable ("Uptime" )
2095+ suite .Require ().NoError (err )
2096+ suite .Require ().GreaterOrEqual (result , int64 (0 ))
2097+ }
2098+
2099+ func (suite * ApplierTestSuite ) TestShowStatusVariableMoveTablesMode () {
2100+ ctx := context .Background ()
2101+
2102+ _ , err := suite .db .ExecContext (ctx , fmt .Sprintf ("CREATE TABLE %s (id INT, item_id INT);" , getTestTableName ()))
2103+ suite .Require ().NoError (err )
2104+
2105+ connectionConfig , err := getTestConnectionConfig (ctx , suite .mysqlContainer )
2106+ suite .Require ().NoError (err )
2107+
2108+ migrationContext := newTestMigrationContext ()
2109+ migrationContext .ApplierConnectionConfig = connectionConfig
2110+ migrationContext .MoveTables .ConnectionConfig = connectionConfig
2111+ migrationContext .SetConnectionConfig ("innodb" )
2112+ migrationContext .OriginalTableColumns = sql .NewColumnList ([]string {"id" , "item_id" })
2113+ migrationContext .MoveTables .TableNames = []string {testMysqlTableName }
2114+ migrationContext .MoveTables .TargetDatabase = testMysqlDatabaseOther
2115+
2116+ applier := NewApplier (migrationContext )
2117+ defer applier .Teardown ()
2118+
2119+ suite .Require ().NoError (applier .InitDBConnections ())
2120+
2121+ // In move-tables mode the status variable must be read from the
2122+ // move-tables target DB connection rather than the applier DB.
2123+ suite .Require ().True (migrationContext .IsMoveTablesMode ())
2124+ suite .Require ().NotNil (applier .moveTablesTargetDB )
2125+
2126+ result , err := applier .ShowStatusVariable ("Uptime" )
2127+ suite .Require ().NoError (err )
2128+ suite .Require ().GreaterOrEqual (result , int64 (0 ))
2129+ }
2130+
20752131func TestApplier (t * testing.T ) {
20762132 if testing .Short () {
20772133 t .Skip ("skipping applier test suite in short mode" )
0 commit comments