@@ -889,6 +889,82 @@ func (suite *MigratorTestSuite) TestMoveTablesStateInitializesColumnMetadata() {
889889 })
890890}
891891
892+ func (suite * MigratorTestSuite ) TestMoveTablesNoopDropsTargetTables () {
893+ ctx := context .Background ()
894+ targetTableNames := []string {testMysqlTableName , "test_noop_target" }
895+
896+ migrationContext := newTestMigrationContext ()
897+ migrationContext .Noop = true
898+ migrationContext .Checkpoint = true
899+ migrationContext .MoveTables .TableNames = targetTableNames
900+ migrationContext .MoveTables .TargetDatabase = testMysqlDatabase
901+ migrationContext .InitMoveTableContainers ()
902+
903+ migrator := NewMigrator (migrationContext , "test" )
904+ migrator .applier = NewApplier (migrationContext )
905+ migrator .applier .moveTablesTargetDB = suite .db
906+ suite .Require ().NoError (migrator .applier .CreateCheckpointTable ())
907+
908+ for _ , tableName := range targetTableNames {
909+ _ , err := suite .db .ExecContext (ctx , fmt .Sprintf ("CREATE TABLE %s.%s (id INT PRIMARY KEY)" ,
910+ sql .EscapeName (testMysqlDatabase ), sql .EscapeName (tableName )))
911+ suite .Require ().NoError (err )
912+ }
913+
914+ suite .Require ().NoError (migrator .moveTablesFinalCleanup ())
915+
916+ for _ , tableName := range targetTableNames {
917+ exists , err := migrator .applier .targetTableExists (tableName )
918+ suite .Require ().NoError (err )
919+ suite .Require ().False (exists , "noop cleanup must drop target table %s" , tableName )
920+ }
921+ checkpointExists , err := migrator .applier .targetTableExists (migrationContext .GetCheckpointTableName ())
922+ suite .Require ().NoError (err )
923+ suite .Require ().False (checkpointExists , "fresh noop cleanup must drop its checkpoint table" )
924+ }
925+
926+ func (suite * MigratorTestSuite ) TestMoveTablesResumedNoopPreservesTargetTables () {
927+ ctx := context .Background ()
928+ targetTableNames := []string {testMysqlTableName , "test_noop_resume_target" }
929+
930+ migrationContext := newTestMigrationContext ()
931+ migrationContext .Noop = true
932+ migrationContext .Resume = true
933+ migrationContext .Checkpoint = true
934+ migrationContext .MoveTables .TableNames = targetTableNames
935+ migrationContext .MoveTables .TargetDatabase = testMysqlDatabase
936+ migrationContext .InitMoveTableContainers ()
937+
938+ migrator := NewMigrator (migrationContext , "test" )
939+ migrator .applier = NewApplier (migrationContext )
940+ migrator .applier .moveTablesTargetDB = suite .db
941+ suite .Require ().NoError (migrator .applier .CreateCheckpointTable ())
942+
943+ for _ , tableName := range targetTableNames {
944+ _ , err := suite .db .ExecContext (ctx , fmt .Sprintf ("CREATE TABLE %s.%s (id INT PRIMARY KEY)" ,
945+ sql .EscapeName (testMysqlDatabase ), sql .EscapeName (tableName )))
946+ suite .Require ().NoError (err )
947+ }
948+ defer func () {
949+ for _ , tableName := range append (targetTableNames , migrationContext .GetCheckpointTableName ()) {
950+ _ , err := suite .db .ExecContext (ctx , fmt .Sprintf ("DROP TABLE IF EXISTS %s.%s" ,
951+ sql .EscapeName (testMysqlDatabase ), sql .EscapeName (tableName )))
952+ suite .Require ().NoError (err )
953+ }
954+ }()
955+
956+ suite .Require ().NoError (migrator .moveTablesFinalCleanup ())
957+
958+ for _ , tableName := range targetTableNames {
959+ exists , err := migrator .applier .targetTableExists (tableName )
960+ suite .Require ().NoError (err )
961+ suite .Require ().True (exists , "resumed noop cleanup must preserve target table %s" , tableName )
962+ }
963+ checkpointExists , err := migrator .applier .targetTableExists (migrationContext .GetCheckpointTableName ())
964+ suite .Require ().NoError (err )
965+ suite .Require ().True (checkpointExists , "resumed noop cleanup must preserve its checkpoint table" )
966+ }
967+
892968func (suite * MigratorTestSuite ) TestRetryBatchCopyWithHooks () {
893969 ctx := context .Background ()
894970
0 commit comments