@@ -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