Skip to content

Commit 84942bb

Browse files
author
ting.wang
committed
Add test cases to test some commands with '--wait' and fix bug
"server image create" "server rebuild" "server resize" Above 3 commands are not covered by unit test. So add some unit tests. Meanwhile, fix bug. Now that image name is an optional argument, we'd better record error messages with positional arguments instead of optional argument. So, record server name. Change-Id: I41bc025d4824dc46f63a3213d82e1528bacbbe12
1 parent 02e5b6f commit 84942bb

2 files changed

Lines changed: 190 additions & 2 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -617,8 +617,8 @@ def take_action(self, parsed_args):
617617
):
618618
sys.stdout.write('\n')
619619
else:
620-
self.log.error(_('Error creating server snapshot: %s'),
621-
parsed_args.image_name)
620+
self.log.error(_('Error creating snapshot of server: %s'),
621+
parsed_args.server)
622622
sys.stdout.write(_('\nError creating server snapshot'))
623623
raise SystemExit
624624

openstackclient/tests/compute/v2/test_server.py

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,64 @@ def test_server_image_create_name(self):
595595
self.assertEqual(self.columns, columns)
596596
self.assertEqual(self.datalist(), data)
597597

598+
@mock.patch.object(common_utils, 'wait_for_status', return_value=False)
599+
def test_server_create_image_with_wait_fails(self, mock_wait_for_status):
600+
arglist = [
601+
'--wait',
602+
self.server.id,
603+
]
604+
verifylist = [
605+
('wait', True),
606+
('server', self.server.id),
607+
]
608+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
609+
610+
self.assertRaises(SystemExit, self.cmd.take_action, parsed_args)
611+
612+
mock_wait_for_status.assert_called_once_with(
613+
self.images_mock.get,
614+
self.image.id,
615+
callback=server._show_progress
616+
)
617+
618+
# ServerManager.create_image(server, image_name, metadata=)
619+
self.servers_mock.create_image.assert_called_with(
620+
self.servers_mock.get.return_value,
621+
self.server.name,
622+
)
623+
624+
@mock.patch.object(common_utils, 'wait_for_status', return_value=True)
625+
def test_server_create_image_with_wait_ok(self, mock_wait_for_status):
626+
arglist = [
627+
'--wait',
628+
self.server.id,
629+
]
630+
verifylist = [
631+
('wait', True),
632+
('server', self.server.id),
633+
]
634+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
635+
636+
# In base command class ShowOne in cliff, abstract method take_action()
637+
# returns a two-part tuple with a tuple of column names and a tuple of
638+
# data to be shown.
639+
columns, data = self.cmd.take_action(parsed_args)
640+
641+
# ServerManager.create_image(server, image_name, metadata=)
642+
self.servers_mock.create_image.assert_called_with(
643+
self.servers_mock.get.return_value,
644+
self.server.name,
645+
)
646+
647+
mock_wait_for_status.assert_called_once_with(
648+
self.images_mock.get,
649+
self.image.id,
650+
callback=server._show_progress
651+
)
652+
653+
self.assertEqual(self.columns, columns)
654+
self.assertEqual(self.datalist(), data)
655+
598656

599657
class TestServerList(TestServer):
600658

@@ -831,6 +889,58 @@ def test_rebuild_with_current_image_and_password(self):
831889
self.cimages_mock.get.assert_called_with(self.image.id)
832890
self.server.rebuild.assert_called_with(self.image, password)
833891

892+
@mock.patch.object(common_utils, 'wait_for_status', return_value=True)
893+
def test_rebuild_with_wait_ok(self, mock_wait_for_status):
894+
arglist = [
895+
'--wait',
896+
self.server.id,
897+
]
898+
verifylist = [
899+
('wait', True),
900+
('server', self.server.id),
901+
]
902+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
903+
904+
# Get the command object to test.
905+
self.cmd.take_action(parsed_args)
906+
907+
# kwargs = dict(success_status=['active', 'verify_resize'],)
908+
909+
mock_wait_for_status.assert_called_once_with(
910+
self.servers_mock.get,
911+
self.server.id,
912+
callback=server._show_progress,
913+
# **kwargs
914+
)
915+
916+
self.servers_mock.get.assert_called_with(self.server.id)
917+
self.cimages_mock.get.assert_called_with(self.image.id)
918+
self.server.rebuild.assert_called_with(self.image, None)
919+
920+
@mock.patch.object(common_utils, 'wait_for_status', return_value=False)
921+
def test_rebuild_with_wait_fails(self, mock_wait_for_status):
922+
arglist = [
923+
'--wait',
924+
self.server.id,
925+
]
926+
verifylist = [
927+
('wait', True),
928+
('server', self.server.id),
929+
]
930+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
931+
932+
self.assertRaises(SystemExit, self.cmd.take_action, parsed_args)
933+
934+
mock_wait_for_status.assert_called_once_with(
935+
self.servers_mock.get,
936+
self.server.id,
937+
callback=server._show_progress
938+
)
939+
940+
self.servers_mock.get.assert_called_with(self.server.id)
941+
self.cimages_mock.get.assert_called_with(self.image.id)
942+
self.server.rebuild.assert_called_with(self.image, None)
943+
834944

835945
class TestServerResize(TestServer):
836946

@@ -952,6 +1062,84 @@ def test_server_resize_revert(self):
9521062
self.server,
9531063
)
9541064

1065+
@mock.patch.object(common_utils, 'wait_for_status', return_value=True)
1066+
def test_server_resize_with_wait_ok(self, mock_wait_for_status):
1067+
1068+
arglist = [
1069+
'--flavor', self.flavors_get_return_value.id,
1070+
'--wait',
1071+
self.server.id,
1072+
]
1073+
1074+
verifylist = [
1075+
('flavor', self.flavors_get_return_value.id),
1076+
('confirm', False),
1077+
('revert', False),
1078+
('wait', True),
1079+
('server', self.server.id),
1080+
]
1081+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1082+
1083+
self.cmd.take_action(parsed_args)
1084+
1085+
self.servers_mock.get.assert_called_with(
1086+
self.server.id,
1087+
)
1088+
1089+
kwargs = dict(success_status=['active', 'verify_resize'],)
1090+
1091+
mock_wait_for_status.assert_called_once_with(
1092+
self.servers_mock.get,
1093+
self.server.id,
1094+
callback=server._show_progress,
1095+
**kwargs
1096+
)
1097+
1098+
self.servers_mock.resize.assert_called_with(
1099+
self.server,
1100+
self.flavors_get_return_value
1101+
)
1102+
self.assertNotCalled(self.servers_mock.confirm_resize)
1103+
self.assertNotCalled(self.servers_mock.revert_resize)
1104+
1105+
@mock.patch.object(common_utils, 'wait_for_status', return_value=False)
1106+
def test_server_resize_with_wait_fails(self, mock_wait_for_status):
1107+
1108+
arglist = [
1109+
'--flavor', self.flavors_get_return_value.id,
1110+
'--wait',
1111+
self.server.id,
1112+
]
1113+
1114+
verifylist = [
1115+
('flavor', self.flavors_get_return_value.id),
1116+
('confirm', False),
1117+
('revert', False),
1118+
('wait', True),
1119+
('server', self.server.id),
1120+
]
1121+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1122+
1123+
self.assertRaises(SystemExit, self.cmd.take_action, parsed_args)
1124+
1125+
self.servers_mock.get.assert_called_with(
1126+
self.server.id,
1127+
)
1128+
1129+
kwargs = dict(success_status=['active', 'verify_resize'],)
1130+
1131+
mock_wait_for_status.assert_called_once_with(
1132+
self.servers_mock.get,
1133+
self.server.id,
1134+
callback=server._show_progress,
1135+
**kwargs
1136+
)
1137+
1138+
self.servers_mock.resize.assert_called_with(
1139+
self.server,
1140+
self.flavors_get_return_value
1141+
)
1142+
9551143

9561144
class TestServerResume(TestServer):
9571145

0 commit comments

Comments
 (0)