Files
python-magnumclient/magnumclient/tests/osc/unit/v1/test_nodegroups.py
Sean McGinnis 3eafa2a001 Use unittest.mock instead of third party mock
Now that we no longer support py27, we can use the standard library
unittest.mock module instead of the third party mock lib.

Change-Id: I4a5b1ec999110a50fc904f3ae93e3983efa64f88
Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
2020-04-18 11:58:37 -05:00

334 lines
10 KiB
Python

# Copyright (c) 2018 European Organization for Nuclear Research.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import copy
from mock import call
from unittest import mock
from magnumclient.osc.v1 import nodegroups as osc_nodegroups
from magnumclient.tests.osc.unit.v1 import fakes as magnum_fakes
class TestNodeGroup(magnum_fakes.TestMagnumClientOSCV1):
def setUp(self):
super(TestNodeGroup, self).setUp()
self.ng_mock = self.app.client_manager.container_infra.nodegroups
class TestNodeGroupCreate(TestNodeGroup):
def setUp(self):
super(TestNodeGroupCreate, self).setUp()
self.nodegroup = magnum_fakes.FakeNodeGroup.create_one_nodegroup()
self.ng_mock.create = mock.Mock()
self.ng_mock.create.return_value = self.nodegroup
self.ng_mock.get = mock.Mock()
self.ng_mock.get.return_value = copy.deepcopy(self.nodegroup)
self.ng_mock.update = mock.Mock()
self.ng_mock.update.return_value = self.nodegroup
self._default_args = {
'name': 'fake-nodegroup',
'node_count': 1,
'role': 'worker',
'min_node_count': 1,
'max_node_count': None,
}
# Get the command object to test
self.cmd = osc_nodegroups.CreateNodeGroup(self.app, None)
self.data = tuple(map(lambda x: getattr(self.nodegroup, x),
osc_nodegroups.NODEGROUP_ATTRIBUTES))
def test_nodegroup_create_required_args_pass(self):
"""Verifies required arguments."""
arglist = [
self.nodegroup.cluster_id,
self.nodegroup.name
]
verifylist = [
('cluster', self.nodegroup.cluster_id),
('name', self.nodegroup.name)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
self.ng_mock.create.assert_called_with(self.nodegroup.cluster_id,
**self._default_args)
def test_nodegroup_create_missing_required_arg(self):
"""Verifies missing required arguments."""
arglist = [
self.nodegroup.name
]
verifylist = [
('name', self.nodegroup.name)
]
self.assertRaises(magnum_fakes.MagnumParseException,
self.check_parser, self.cmd, arglist, verifylist)
def test_nodegroup_create_with_labels(self):
"""Verifies labels are properly parsed when given as argument."""
expected_args = self._default_args
expected_args['labels'] = {
'arg1': 'value1', 'arg2': 'value2'
}
arglist = [
'--labels', 'arg1=value1',
'--labels', 'arg2=value2',
self.nodegroup.cluster_id,
self.nodegroup.name
]
verifylist = [
('labels', ['arg1=value1', 'arg2=value2']),
('name', self.nodegroup.name),
('cluster', self.nodegroup.cluster_id)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
self.ng_mock.create.assert_called_with(self.nodegroup.cluster_id,
**expected_args)
class TestNodeGroupDelete(TestNodeGroup):
def setUp(self):
super(TestNodeGroupDelete, self).setUp()
self.ng_mock.delete = mock.Mock()
self.ng_mock.delete.return_value = None
# Get the command object to test
self.cmd = osc_nodegroups.DeleteNodeGroup(self.app, None)
def test_nodegroup_delete_one(self):
arglist = ['foo', 'fake-nodegroup']
verifylist = [
('cluster', 'foo'),
('nodegroup', ['fake-nodegroup'])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
self.ng_mock.delete.assert_called_with('foo', 'fake-nodegroup')
def test_nodegroup_delete_multiple(self):
arglist = ['foo', 'fake-nodegroup1', 'fake-nodegroup2']
verifylist = [
('cluster', 'foo'),
('nodegroup', ['fake-nodegroup1', 'fake-nodegroup2'])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
self.ng_mock.delete.assert_has_calls(
[call('foo', 'fake-nodegroup1'), call('foo', 'fake-nodegroup2')]
)
def test_nodegroup_delete_no_args(self):
arglist = []
verifylist = [
('cluster', ''),
('nodegroup', [])
]
self.assertRaises(magnum_fakes.MagnumParseException,
self.check_parser, self.cmd, arglist, verifylist)
class TestNodeGroupUpdate(TestNodeGroup):
def setUp(self):
super(TestNodeGroupUpdate, self).setUp()
self.ng_mock.update = mock.Mock()
self.ng_mock.update.return_value = None
# Get the command object to test
self.cmd = osc_nodegroups.UpdateNodeGroup(self.app, None)
def test_nodegroup_update_pass(self):
arglist = ['foo', 'ng1', 'remove', 'bar']
verifylist = [
('cluster', 'foo'),
('nodegroup', 'ng1'),
('op', 'remove'),
('attributes', [['bar']])
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
self.ng_mock.update.assert_called_with(
'foo', 'ng1',
[{'op': 'remove', 'path': '/bar'}]
)
def test_nodegroup_update_bad_op(self):
arglist = ['cluster', 'ng1', 'foo', 'bar']
verifylist = [
('cluster', 'cluster'),
('nodegroup', 'ng1'),
('op', 'foo'),
('attributes', ['bar'])
]
self.assertRaises(magnum_fakes.MagnumParseException,
self.check_parser, self.cmd, arglist, verifylist)
class TestNodeGroupShow(TestNodeGroup):
def setUp(self):
super(TestNodeGroupShow, self).setUp()
self.nodegroup = magnum_fakes.FakeNodeGroup.create_one_nodegroup()
self.ng_mock.get = mock.Mock()
self.ng_mock.get.return_value = self.nodegroup
self.data = tuple(map(lambda x: getattr(self.nodegroup, x),
osc_nodegroups.NODEGROUP_ATTRIBUTES))
# Get the command object to test
self.cmd = osc_nodegroups.ShowNodeGroup(self.app, None)
def test_nodegroup_show_pass(self):
arglist = ['fake-cluster', 'fake-nodegroup']
verifylist = [
('cluster', 'fake-cluster'),
('nodegroup', 'fake-nodegroup')
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
self.ng_mock.get.assert_called_with(
'fake-cluster', 'fake-nodegroup')
self.assertEqual(osc_nodegroups.NODEGROUP_ATTRIBUTES, columns)
self.assertEqual(self.data, data)
def test_nodegroup_show_no_nodegroup_fail(self):
arglist = ['fake-cluster']
verifylist = [
('cluster', 'fake-cluster'),
('nodegroup', '')
]
self.assertRaises(magnum_fakes.MagnumParseException,
self.check_parser, self.cmd, arglist, verifylist)
def test_nodegroup_show_no_args(self):
arglist = []
verifylist = [
('cluster', ''),
('nodegroup', '')
]
self.assertRaises(magnum_fakes.MagnumParseException,
self.check_parser, self.cmd, arglist, verifylist)
class TestNodeGroupList(TestNodeGroup):
nodegroup = magnum_fakes.FakeNodeGroup.create_one_nodegroup()
columns = ['uuid', 'name', 'flavor_id', 'image_id', 'node_count',
'status', 'role']
datalist = (
(
nodegroup.uuid,
nodegroup.name,
nodegroup.flavor_id,
nodegroup.image_id,
nodegroup.node_count,
nodegroup.status,
nodegroup.role,
),
)
def setUp(self):
super(TestNodeGroupList, self).setUp()
self.ng_mock.list = mock.Mock()
self.ng_mock.list.return_value = [self.nodegroup]
# Get the command object to test
self.cmd = osc_nodegroups.ListNodeGroup(self.app, None)
def test_nodegroup_list_no_options(self):
arglist = []
verifylist = [
('cluster', ''),
('limit', None),
('sort_key', None),
('sort_dir', None),
]
self.assertRaises(magnum_fakes.MagnumParseException,
self.check_parser, self.cmd, arglist, verifylist)
def test_nodegroup_list_ok(self):
arglist = ['fake-cluster']
verifylist = [
('cluster', 'fake-cluster'),
('limit', None),
('sort_key', None),
('sort_dir', None),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
self.ng_mock.list.assert_called_with(
'fake-cluster',
limit=None,
sort_dir=None,
sort_key=None,
role=None,
)
self.assertEqual(self.columns, columns)
self.assertEqual(self.datalist, tuple(data))
def test_nodegroup_list_options(self):
arglist = [
'fake-cluster',
'--limit', '1',
'--sort-key', 'key',
'--sort-dir', 'asc'
]
verifylist = [
('cluster', 'fake-cluster'),
('limit', 1),
('sort_key', 'key'),
('sort_dir', 'asc')
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
self.ng_mock.list.assert_called_with(
'fake-cluster',
limit=1,
sort_dir='asc',
sort_key='key',
role=None
)