python-tripleoclient/tripleoclient/tests/v1/test_overcloud_bios.py
Kevin Carter 7c40575d7b
Update client to create archive and use tripleo-common
The client utils will now run a new playbook to ensure that the local
archive directory is created early in the deployment process. This
change will allow us to build toward a swift-less deployment. All of
the client calls, save one, has been moved to use tripleo-common which
will assist us to better manage, and migrate from swift storage to a
local archive.

> As a product of this change all of the "webhook" calls have been
  removed. which was deprecated as part of the Zaqar and Mistral work.
  These calls were removed because several swift calls were tied into
  them, and because mistral is no longer part of the stack, and has
  been gone for a few cycles, we can safely remove these calls which
  do nothing.

Depends-On: Ibe9b2ffe94cdf493fc84366979d1d78b8528ea1b
Change-Id: I7531612a49527f8a21df415c648acb41ac7a0b10
Signed-off-by: Kevin Carter <kecarter@redhat.com>
2021-01-20 09:43:52 -06:00

184 lines
6.8 KiB
Python

# 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 json
import mock
import tempfile
from osc_lib.tests import utils as test_utils
from tripleoclient.tests import fakes as ooofakes
from tripleoclient.tests.v1.baremetal import fakes
from tripleoclient.v1 import overcloud_bios
class Base(fakes.TestBaremetal):
def setUp(self):
super(Base, self).setUp()
self.workflow = self.app.client_manager.workflow_engine
self.conf = {
"settings": [
{"name": "virtualization", "value": "on"},
{"name": "hyperthreading", "value": "on"}
]
}
self.app.client_manager.baremetal.node.list.return_value = []
self.execution = self.workflow.executions.create.return_value
self.execution.id = 'fake id'
self.execution.output = '{"result": null}'
class TestConfigureBIOS(Base):
def setUp(self):
super(TestConfigureBIOS, self).setUp()
app_args = mock.Mock()
app_args.verbose_level = 1
self.app.options = ooofakes.FakeOptions()
self.cmd = overcloud_bios.ConfigureBIOS(self.app, app_args)
playbook_runner = mock.patch(
'tripleoclient.utils.run_ansible_playbook',
autospec=True
)
playbook_runner.start()
self.addCleanup(playbook_runner.stop)
def test_configure_specified_nodes_ok(self):
conf = json.dumps(self.conf)
arglist = ['--configuration', conf, 'node_uuid1', 'node_uuid2']
verifylist = [
('node_uuids', ['node_uuid1', 'node_uuid2']),
('configuration', conf)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
def test_configure_specified_nodes_and_configuration_from_file(self):
with tempfile.NamedTemporaryFile('w+t') as fp:
json.dump(self.conf, fp)
fp.flush()
arglist = ['--configuration', fp.name, 'node_uuid1', 'node_uuid2']
verifylist = [
('node_uuids', ['node_uuid1', 'node_uuid2']),
('configuration', fp.name)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
def test_configure_specified_nodes_and_configuration_not_yaml(self):
arglist = ['--configuration', ':', 'node_uuid1', 'node_uuid2']
verifylist = [
('node_uuids', ['node_uuid1', 'node_uuid2']),
('configuration', ':')
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaisesRegex(RuntimeError, 'cannot be parsed as YAML',
self.cmd.take_action, parsed_args)
self.assertFalse(self.workflow.executions.create.called)
def test_configure_specified_nodes_and_configuration_bad_type(self):
for conf in ('[]', '{"settings": 42}', '{settings: [42]}'):
arglist = ['--configuration', conf, 'node_uuid1', 'node_uuid2']
verifylist = [
('node_uuids', ['node_uuid1', 'node_uuid2']),
('configuration', conf)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(TypeError, self.cmd.take_action, parsed_args)
self.assertFalse(self.workflow.executions.create.called)
def test_configure_specified_nodes_and_configuration_bad_value(self):
conf = '{"another_key": [{}]}'
arglist = ['--configuration', conf, 'node_uuid1', 'node_uuid2']
verifylist = [
('node_uuids', ['node_uuid1', 'node_uuid2']),
('configuration', conf)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(ValueError, self.cmd.take_action, parsed_args)
self.assertFalse(self.workflow.executions.create.called)
def test_configure_uuids_and_all_both_specified(self):
conf = json.dumps(self.conf)
arglist = ['--configuration', conf, 'node_uuid1', 'node_uuid2',
'--all-manageable']
verifylist = [
('node_uuids', ['node_uuid1', 'node_uuid2']),
('configuration', conf),
('all-manageable', True)
]
self.assertRaises(test_utils.ParserException, self.check_parser,
self.cmd, arglist, verifylist)
def test_configure_all_manageable_nodes_ok(self):
conf = json.dumps(self.conf)
arglist = ['--configuration', conf, '--all-manageable']
verifylist = [
('all_manageable', True),
('configuration', conf)
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
class TestResetBIOS(Base):
def setUp(self):
super(TestResetBIOS, self).setUp()
app_args = mock.Mock()
app_args.verbose_level = 1
self.app.options = ooofakes.FakeOptions()
self.cmd = overcloud_bios.ResetBIOS(self.app, app_args)
playbook_runner = mock.patch(
'tripleoclient.utils.run_ansible_playbook',
autospec=True
)
playbook_runner.start()
self.addCleanup(playbook_runner.stop)
def test_reset_specified_nodes_ok(self):
arglist = ['node_uuid1', 'node_uuid2']
verifylist = [('node_uuids', ['node_uuid1', 'node_uuid2'])]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
def test_reset_all_manageable_nodes_ok(self):
arglist = ['--all-manageable']
verifylist = [('all_manageable', True)]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
def test_reset_no_nodes(self):
arglist = []
verifylist = []
self.assertRaises(test_utils.ParserException, self.check_parser,
self.cmd, arglist, verifylist)
self.assertFalse(self.workflow.executions.create.called)
def test_reset_uuids_and_all_both_specified(self):
arglist = ['node_uuid1', 'node_uuid2', '--all-manageable']
verifylist = [
('node_uuids', ['node_uuid1', 'node_uuid2']),
('all-manageable', True)
]
self.assertRaises(test_utils.ParserException, self.check_parser,
self.cmd, arglist, verifylist)