@@ -1185,6 +1185,209 @@ def test_server_lock_multi_servers(self):
11851185 self .run_method_with_servers ('lock' , 3 )
11861186
11871187
1188+ class TestServerMigrate (TestServer ):
1189+
1190+ def setUp (self ):
1191+ super (TestServerMigrate , self ).setUp ()
1192+
1193+ methods = {
1194+ 'migrate' : None ,
1195+ 'live_migrate' : None ,
1196+ }
1197+ self .server = compute_fakes .FakeServer .create_one_server (
1198+ methods = methods )
1199+
1200+ # This is the return value for utils.find_resource()
1201+ self .servers_mock .get .return_value = self .server
1202+
1203+ self .servers_mock .migrate .return_value = None
1204+ self .servers_mock .live_migrate .return_value = None
1205+
1206+ # Get the command object to test
1207+ self .cmd = server .MigrateServer (self .app , None )
1208+
1209+ def test_server_migrate_no_options (self ):
1210+ arglist = [
1211+ self .server .id ,
1212+ ]
1213+ verifylist = [
1214+ ('live' , None ),
1215+ ('block_migration' , False ),
1216+ ('disk_overcommit' , False ),
1217+ ('wait' , False ),
1218+ ]
1219+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
1220+
1221+ result = self .cmd .take_action (parsed_args )
1222+
1223+ self .servers_mock .get .assert_called_with (self .server .id )
1224+ self .server .migrate .assert_called_with ()
1225+ self .assertNotCalled (self .servers_mock .live_migrate )
1226+ self .assertIsNone (result )
1227+
1228+ def test_server_migrate_with_block_migration (self ):
1229+ arglist = [
1230+ '--block-migration' , self .server .id ,
1231+ ]
1232+ verifylist = [
1233+ ('live' , None ),
1234+ ('block_migration' , True ),
1235+ ('disk_overcommit' , False ),
1236+ ('wait' , False ),
1237+ ]
1238+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
1239+
1240+ self .assertRaises (exceptions .CommandError , self .cmd .take_action ,
1241+ parsed_args )
1242+
1243+ self .servers_mock .get .assert_called_with (self .server .id )
1244+ self .assertNotCalled (self .servers_mock .live_migrate )
1245+ self .assertNotCalled (self .servers_mock .migrate )
1246+
1247+ def test_server_migrate_with_disk_overcommit (self ):
1248+ arglist = [
1249+ '--disk-overcommit' , self .server .id ,
1250+ ]
1251+ verifylist = [
1252+ ('live' , None ),
1253+ ('block_migration' , False ),
1254+ ('disk_overcommit' , True ),
1255+ ('wait' , False ),
1256+ ]
1257+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
1258+
1259+ self .assertRaises (exceptions .CommandError , self .cmd .take_action ,
1260+ parsed_args )
1261+
1262+ self .servers_mock .get .assert_called_with (self .server .id )
1263+ self .assertNotCalled (self .servers_mock .live_migrate )
1264+ self .assertNotCalled (self .servers_mock .migrate )
1265+
1266+ def test_server_live_migrate (self ):
1267+ arglist = [
1268+ '--live' , 'fakehost' , self .server .id ,
1269+ ]
1270+ verifylist = [
1271+ ('live' , 'fakehost' ),
1272+ ('block_migration' , False ),
1273+ ('disk_overcommit' , False ),
1274+ ('wait' , False ),
1275+ ]
1276+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
1277+
1278+ result = self .cmd .take_action (parsed_args )
1279+
1280+ self .servers_mock .get .assert_called_with (self .server .id )
1281+ self .server .live_migrate .assert_called_with (block_migration = False ,
1282+ disk_over_commit = False ,
1283+ host = 'fakehost' )
1284+ self .assertNotCalled (self .servers_mock .migrate )
1285+ self .assertIsNone (result )
1286+
1287+ def test_server_block_live_migrate (self ):
1288+ arglist = [
1289+ '--live' , 'fakehost' , '--block-migration' , self .server .id ,
1290+ ]
1291+ verifylist = [
1292+ ('live' , 'fakehost' ),
1293+ ('block_migration' , True ),
1294+ ('disk_overcommit' , False ),
1295+ ('wait' , False ),
1296+ ]
1297+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
1298+
1299+ result = self .cmd .take_action (parsed_args )
1300+
1301+ self .servers_mock .get .assert_called_with (self .server .id )
1302+ self .server .live_migrate .assert_called_with (block_migration = True ,
1303+ disk_over_commit = False ,
1304+ host = 'fakehost' )
1305+ self .assertNotCalled (self .servers_mock .migrate )
1306+ self .assertIsNone (result )
1307+
1308+ def test_server_live_migrate_with_disk_overcommit (self ):
1309+ arglist = [
1310+ '--live' , 'fakehost' , '--disk-overcommit' , self .server .id ,
1311+ ]
1312+ verifylist = [
1313+ ('live' , 'fakehost' ),
1314+ ('block_migration' , False ),
1315+ ('disk_overcommit' , True ),
1316+ ('wait' , False ),
1317+ ]
1318+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
1319+
1320+ result = self .cmd .take_action (parsed_args )
1321+
1322+ self .servers_mock .get .assert_called_with (self .server .id )
1323+ self .server .live_migrate .assert_called_with (block_migration = False ,
1324+ disk_over_commit = True ,
1325+ host = 'fakehost' )
1326+ self .assertNotCalled (self .servers_mock .migrate )
1327+ self .assertIsNone (result )
1328+
1329+ def test_server_live_migrate_with_false_value_options (self ):
1330+ arglist = [
1331+ '--live' , 'fakehost' , '--no-disk-overcommit' ,
1332+ '--shared-migration' , self .server .id ,
1333+ ]
1334+ verifylist = [
1335+ ('live' , 'fakehost' ),
1336+ ('block_migration' , False ),
1337+ ('disk_overcommit' , False ),
1338+ ('wait' , False ),
1339+ ]
1340+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
1341+
1342+ result = self .cmd .take_action (parsed_args )
1343+
1344+ self .servers_mock .get .assert_called_with (self .server .id )
1345+ self .server .live_migrate .assert_called_with (block_migration = False ,
1346+ disk_over_commit = False ,
1347+ host = 'fakehost' )
1348+ self .assertNotCalled (self .servers_mock .migrate )
1349+ self .assertIsNone (result )
1350+
1351+ @mock .patch .object (common_utils , 'wait_for_status' , return_value = True )
1352+ def test_server_migrate_with_wait (self , mock_wait_for_status ):
1353+ arglist = [
1354+ '--wait' , self .server .id ,
1355+ ]
1356+ verifylist = [
1357+ ('live' , None ),
1358+ ('block_migration' , False ),
1359+ ('disk_overcommit' , False ),
1360+ ('wait' , True ),
1361+ ]
1362+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
1363+
1364+ result = self .cmd .take_action (parsed_args )
1365+
1366+ self .servers_mock .get .assert_called_with (self .server .id )
1367+ self .server .migrate .assert_called_with ()
1368+ self .assertNotCalled (self .servers_mock .live_migrate )
1369+ self .assertIsNone (result )
1370+
1371+ @mock .patch .object (common_utils , 'wait_for_status' , return_value = False )
1372+ def test_server_migrate_with_wait_fails (self , mock_wait_for_status ):
1373+ arglist = [
1374+ '--wait' , self .server .id ,
1375+ ]
1376+ verifylist = [
1377+ ('live' , None ),
1378+ ('block_migration' , False ),
1379+ ('disk_overcommit' , False ),
1380+ ('wait' , True ),
1381+ ]
1382+ parsed_args = self .check_parser (self .cmd , arglist , verifylist )
1383+
1384+ self .assertRaises (SystemExit , self .cmd .take_action , parsed_args )
1385+
1386+ self .servers_mock .get .assert_called_with (self .server .id )
1387+ self .server .migrate .assert_called_with ()
1388+ self .assertNotCalled (self .servers_mock .live_migrate )
1389+
1390+
11881391class TestServerPause (TestServer ):
11891392
11901393 def setUp (self ):
0 commit comments