Add support for auto_priority, rh_priority recovery method

As of now segment can be created with only 'auto', 'reserved_host'
recovery-methods.

Added support for rh_priority and auto_priority.

Closes-Bug: #1713971
Change-Id: I88e4145d3e38301ce363c65409c646297b50d01a
This commit is contained in:
nehaalhat 2017-08-16 18:47:46 +05:30 committed by neha.alhat
parent d4725667db
commit f36c1c20d2
5 changed files with 130 additions and 23 deletions

View File

@ -109,9 +109,9 @@ class CreateSegment(command.ShowOne):
parser.add_argument(
'recovery_method',
metavar='<recovery_method>',
choices=['auto', 'reserved_host'],
choices=['auto', 'reserved_host', 'auto_priority', 'rh_priority'],
help=_('Recovery method of segment. The supported options are: '
'auto, reserved_host.')
'auto, reserved_host, auto_priority, rh_priority.')
)
parser.add_argument(
'service_type',
@ -163,9 +163,9 @@ class UpdateSegment(command.ShowOne):
parser.add_argument(
'--recovery_method',
metavar='<recovery_method>',
choices=['auto', 'reserved_host'],
choices=['auto', 'reserved_host', 'auto_priority', 'rh_priority'],
help=_('Recovery method of segment. The supported options are: '
'auto, reserved_host')
'auto, reserved_host, auto_priority, rh_priority')
)
parser.add_argument(
'--service_type',

View File

@ -17,11 +17,14 @@ test_masakariclient
Tests for `masakariclient` module.
"""
import ddt
import mock
import uuid
from osc_lib.tests import utils as osc_lib_utils
from osc_lib import utils
from masakariclient.osc.v1.segment import CreateSegment
from masakariclient.osc.v1.segment import DeleteSegment
from masakariclient.osc.v1.segment import ShowSegment
from masakariclient.osc.v1.segment import UpdateSegment
@ -127,7 +130,7 @@ class TestV1ShowSegment(BaseV1Segment):
self.dummy_segment.to_dict(), self.columns, formatters={})
class TestV1UpdateSegment(BaseV1Segment):
class TestV1UpdateSegment(BaseV1Segment, osc_lib_utils.TestCommand):
def setUp(self):
super(TestV1UpdateSegment, self).setUp()
@ -154,15 +157,35 @@ class TestV1UpdateSegment(BaseV1Segment):
def test_take_action_by_uuid(self):
# command param
parsed_args = FakeNamespace(
segment=SEGMENT_ID,
description='FakeNamespace_description')
arglist = ['8c35987c-f416-46ca-be37-52f58fd8d294',
'--name', 'test_segment',
'--recovery_method', 'rh_priority',
'--service_type', 'test_service',
'--description', 'test_segment']
parsed_args = self.check_parser(self.update_seg, arglist, [])
self._test_take_action(parsed_args)
def test_take_action_by_name(self):
# command param
parsed_args = FakeNamespace(segment=SEGMENT_NAME)
arglist = [SEGMENT_NAME, '--name', 'test_segment',
'--recovery_method', 'auto_priority',
'--service_type', 'test_service',
'--description', 'test_segment']
parsed_args = self.check_parser(self.update_seg, arglist, [])
self._test_take_action(parsed_args)
def test_update_segment_with_recovery_method_reserved_host(self):
arglist = ['8c35987c-f416-46ca-be37-52f58fd8d294',
'--name', 'test_segment',
'--recovery_method', 'reserved_host',
'--service_type', 'test_service',
'--description', 'test_segment']
parsed_args = self.check_parser(self.update_seg, arglist, [])
self._test_take_action(parsed_args)
@mock.patch.object(utils, 'get_dict_properties')
@ -177,6 +200,14 @@ class TestV1UpdateSegment(BaseV1Segment):
mock_get_dict_properties.assert_called_once_with(
self.dummy_segment.to_dict(), self.columns, formatters={})
def test_update_with_invalid_recovery_method(self):
arglist = [SEGMENT_NAME, '--name', 'test_segment',
'--recovery_method', 'invalid-rcovery-method',
'--service_type', 'test_service',
'--description', 'test_segment']
self.assertRaises(osc_lib_utils.ParserException,
self.check_parser, self.update_seg, arglist, [])
class TestV1DeleteSegment(BaseV1Segment):
def setUp(self):
@ -218,3 +249,40 @@ class TestV1DeleteSegment(BaseV1Segment):
self.app.client_manager.ha.delete_segment.assert_called_once_with(
SEGMENT_ID, False)
@ddt.ddt
class TestV1CreateSegment(BaseV1Segment, osc_lib_utils.TestCommand):
def setUp(self):
super(TestV1CreateSegment, self).setUp()
self.cmd = CreateSegment(self.app, None)
@ddt.data({"recovery_method": "auto"},
{"recovery_method": "reserved_host"},
{"recovery_method": "auto_priority"},
{"recovery_method": "rh_priority"})
def test_create_with_all_recovery_methods(self, ddt_data):
arglist = ['test_segment', ddt_data['recovery_method'], 'test_service',
'--description', 'test_segment']
parsed_args = self.check_parser(self.cmd, arglist, [])
self._test_take_action(parsed_args, arglist)
def _test_take_action(self, parsed_args, arglist):
# return value segment list
self.app.client_manager.ha.segments.return_value = arglist
# return value segment data setup
self.app.client_manager.ha.get_segment.return_value = (
self.dummy_segment)
self.cmd.take_action(parsed_args)
self.app.client_manager.ha.create_segment.assert_called_with(
description='test_segment',
name='test_segment',
recovery_method=arglist[1],
service_type='test_service')
def test_create_segment_recovery_method_invalid(self):
arglist = ['test_segment', 'invalid_recovery_method', 'test_service',
'--description', 'test_segment']
self.assertRaises(osc_lib_utils.ParserException,
self.check_parser, self.cmd, arglist, [])

View File

@ -17,14 +17,17 @@ test_masakariclient
Tests for `masakariclient` module.
"""
import ddt
import mock
from masakariclient.common import utils
from masakariclient import shell
from masakariclient.tests import base
from masakariclient.tests.unit.v1 import fakes
import masakariclient.v1.shell as ms
@ddt.ddt
class TestV1Shell(base.TestCase):
def setUp(self):
@ -48,7 +51,6 @@ class TestV1Shell(base.TestCase):
'service_type': 'testsegment01_auto',
'id': '14',
'description': 'UPDATE Discription'}
self.segment_object = fakes.FakeSegment(self.segment_vals)
self.hosts_vals = {
'reserved': False,
@ -76,6 +78,9 @@ class TestV1Shell(base.TestCase):
'failover_segment_id': '6b985a8a-f8c0-42e4-beaa-d2fcd8dabbb6'}
self.hosts_object = fakes.FakeHost(self.hosts_vals)
def _run_command(self, cmd):
shell.main(cmd.split())
@mock.patch.object(utils, 'print_list')
def test_do_notification_list(self, mock_print_list):
service = mock.Mock()
@ -117,7 +122,8 @@ class TestV1Shell(base.TestCase):
def test_do_segment_show(self, mock_get_uuid_by_name, mock_print_dict):
mock_get_uuid_by_name.return_value = self.segment_vals.get('uuid')
service = mock.Mock()
service.get_segment.return_value = self.segment_object
segment_object = fakes.FakeSegment(self.segment_vals)
service.get_segment.return_value = segment_object
args = mock.Mock()
ms.do_segment_show(service, args)
@ -125,27 +131,50 @@ class TestV1Shell(base.TestCase):
mock_print_dict.assert_called_once_with(self.segment_vals)
@mock.patch.object(utils, 'print_dict')
def test_do_segment_create(self, mock_print_dict):
@ddt.data({"recovery_method": "auto"},
{"recovery_method": "reserved_host"},
{"recovery_method": "auto_priority"},
{"recovery_method": "rh_priority"})
def test_do_segment_create_with_all_recovery_methods(
self, ddt_data, mock_print_dict):
service = mock.Mock()
service.create_segment.return_value = self.segment_object
args = mock.Mock()
self.segment_vals['recovery_method'] = ddt_data['recovery_method']
segment_object = fakes.FakeSegment(self.segment_vals)
service.create_segment.return_value = segment_object
self._run_command(
"segment-create "
"--name 'test-segment'"
" --recovery-method %s "
"--service-type test_service" % ddt_data['recovery_method'])
ms.do_segment_create(service, args)
mock_print_dict.assert_called_once_with(self.segment_vals)
mock_print_dict.assert_called_once_with(
self.segment_vals)
def test_do_segment_create_with_invalid_recovery_method(self):
cmd = ("segment-create --name 'test-segment' --recovery-method"
" invalid_recovery_method --service-type test_service")
self.assertRaises(SystemExit, self._run_command, cmd)
@mock.patch.object(utils, 'print_dict')
@mock.patch.object(utils, 'remove_unspecified_items')
@mock.patch.object(utils, 'get_uuid_by_name')
def test_do_segment_update(self,
@ddt.data({"recovery_method": "auto"},
{"recovery_method": "reserved_host"},
{"recovery_method": "auto_priority"},
{"recovery_method": "rh_priority"})
def test_do_segment_update(self, ddt_data,
mock_get_uuid_by_name,
mock_remove_unspecified_items,
mock_print_dict):
mock_get_uuid_by_name.return_value = self.segment_vals.get('uuid')
self.segment_vals['recovery_method'] = ddt_data['recovery_method']
mock_remove_unspecified_items.return_value = self.segment_vals
service = mock.Mock()
service.update_segment.return_value = self.segment_object
segment_object = fakes.FakeSegment(self.segment_vals)
service.update_segment.return_value = segment_object
args = mock.Mock()
args.recovery_method = ddt_data['recovery_method']
ms.do_segment_update(service, args)
mock_get_uuid_by_name.assert_called_once_with(service, args.id)
attrs = {
@ -157,12 +186,18 @@ class TestV1Shell(base.TestCase):
mock_remove_unspecified_items.assert_called_once_with(attrs)
mock_print_dict.assert_called_once_with(self.segment_vals)
def test_do_segment_update_with_invalid_recovery_method(self):
cmd = ("segment-update --id bdba001e-c01b-490e-9405-fdf72d849b41 "
"--recovery-method invalid_recovery_method")
self.assertRaises(SystemExit, self._run_command, cmd)
@mock.patch.object(utils, 'print_dict')
@mock.patch.object(utils, 'get_uuid_by_name')
def test_do_segment_delete(self, mock_get_uuid_by_name, mock_print_dict):
mock_get_uuid_by_name.return_value = self.segment_vals.get('uuid')
service = mock.Mock()
service.delete_segment.return_value = self.segment_object
segment_object = fakes.FakeSegment(self.segment_vals)
service.delete_segment.return_value = segment_object
args = mock.Mock()
ms.do_segment_delete(service, args)

View File

@ -101,9 +101,10 @@ def do_segment_show(service, args):
@utils.arg('--name', metavar='<SEGMENT_NAME>', required=True,
help='Name of segment.')
@utils.arg('--recovery-method', metavar='<RECOVERY_METHOD>', required=True,
choices=['auto', 'reserved_host'],
choices=['auto', 'reserved_host', 'auto_priority', 'rh_priority'],
help='Recovery method. '
'The supported options are: auto, reserved_host.')
'The supported options are: auto, reserved_host,'
' auto_priority, rh_priority.')
@utils.arg('--service-type', metavar='<SERVICE_TYPE>', required=True,
help='Service type of segment.')
@utils.arg('--description', metavar='<DESCRIPTION>', required=False,
@ -128,10 +129,11 @@ def do_segment_create(service, args):
@utils.arg('--name', metavar='<SEGMENT_NAME>',
required=False, help='Name of segment.')
@utils.arg('--recovery-method', metavar='<RECOVERY_METHOD>',
choices=['auto', 'reserved_host'],
choices=['auto', 'reserved_host', 'auto_priority', 'rh_priority'],
required=False,
help='Recovery method. '
'The supported options are: auto, reserved_host.')
'The supported options are: auto, reserved_host, '
'auto_priority, rh_priority.')
@utils.arg('--service-type', metavar='<SERVICE_TYPE>',
required=False, help='Service type of segment.')
@utils.arg('--description', metavar='<DESCRIPTION>',

View File

@ -5,11 +5,13 @@
hacking>=0.12.0,!=0.13.0,<0.14 # Apache-2.0
coverage>=3.6 # Apache-2.0
ddt>=1.0.1 # MIT
python-subunit>=0.0.18 # Apache-2.0/BSD
sphinx>=1.2.1,!=1.3b1,<1.4 # BSD
oslosphinx>=4.7.0 # Apache-2.0
oslotest>=1.10.0 # Apache-2.0
os-testr>=0.8.0 # Apache-2.0
requests-mock>=1.1.0 # Apache-2.0
testrepository>=0.0.18 # Apache-2.0/BSD
testscenarios>=0.4 # Apache-2.0/BSD
testtools>=1.4.0 # MIT