diff --git a/ironicclient/tests/functional/osc/v1/base.py b/ironicclient/tests/functional/osc/v1/base.py index 0b236a9..b2a3ec9 100644 --- a/ironicclient/tests/functional/osc/v1/base.py +++ b/ironicclient/tests/functional/osc/v1/base.py @@ -227,3 +227,60 @@ class TestCase(base.FunctionalTestBase): output = self.openstack('baremetal port group show {0} {1} {2}' .format(identifier, opts, params)) return json.loads(output) + + def chassis_create(self, params=''): + """Create baremetal chassis and add cleanup. + + :param String params: Additional args and kwargs + :return: JSON object of created chassis + """ + opts = self.get_opts() + chassis = self.openstack('baremetal chassis create {0} {1}' + .format(opts, params)) + + chassis = json.loads(chassis) + if not chassis: + self.fail('Baremetal chassis has not been created!') + self.addCleanup(self.chassis_delete, chassis['uuid'], True) + + return chassis + + def chassis_delete(self, uuid, ignore_exceptions=False): + """Try to delete baremetal chassis by UUID. + + :param String uuid: UUID of the chassis + :param Bool ignore_exceptions: Ignore exception (needed for cleanUp) + :return: raw values output + :raise: CommandFailed exception when command fails to delete a chassis + """ + try: + return self.openstack('baremetal chassis delete {0}' + .format(uuid)) + except exceptions.CommandFailed: + if not ignore_exceptions: + raise + + def chassis_list(self, fields=None, params=''): + """List baremetal chassis. + + :param List fields: List of fields to show + :param String params: Additional kwargs + :return: list of JSON chassis objects + """ + opts = self.get_opts(fields=fields) + output = self.openstack('baremetal chassis list {0} {1}' + .format(opts, params)) + return json.loads(output) + + def chassis_show(self, uuid, fields=None, params=''): + """Show specified baremetal chassis. + + :param String uuid: UUID of the chassis + :param List fields: List of fields to show + :param List params: Additional kwargs + :return: JSON object of chassis + """ + opts = self.get_opts(fields) + chassis = self.openstack('baremetal chassis show {0} {1} {2}' + .format(opts, uuid, params)) + return json.loads(chassis) diff --git a/ironicclient/tests/functional/osc/v1/test_baremetal_chassis_basic.py b/ironicclient/tests/functional/osc/v1/test_baremetal_chassis_basic.py new file mode 100644 index 0000000..140fe5f --- /dev/null +++ b/ironicclient/tests/functional/osc/v1/test_baremetal_chassis_basic.py @@ -0,0 +1,86 @@ +# Copyright (c) 2016 Mirantis, Inc. +# +# 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. + +from ironicclient.tests.functional.osc.v1 import base + + +class BaremetalChassisTests(base.TestCase): + """Functional tests for baremetal chassis commands.""" + + def setUp(self): + super(BaremetalChassisTests, self).setUp() + self.chassis = self.chassis_create() + + def test_list(self): + """Check baremetal chassis list command. + + Test steps: + 1) Create baremetal chassis in setUp. + 2) List baremetal chassis. + 3) Check chassis description and UUID in chassis list. + """ + chassis_list = self.chassis_list() + self.assertIn(self.chassis['uuid'], + [x['UUID'] for x in chassis_list]) + self.assertIn(self.chassis['description'], + [x['Description'] for x in chassis_list]) + + def test_show(self): + """Check baremetal chassis show command. + + Test steps: + 1) Create baremetal chassis in setUp. + 2) Show baremetal chassis. + 3) Check chassis in chassis show. + """ + chassis = self.chassis_show(self.chassis['uuid']) + self.assertEqual(self.chassis['uuid'], chassis['uuid']) + self.assertEqual(self.chassis['description'], chassis['description']) + + def test_delete(self): + """Check baremetal chassis delete command. + + Test steps: + 1) Create baremetal chassis in setUp. + 2) Delete baremetal chassis by UUID. + 3) Check that chassis deleted successfully. + """ + output = self.chassis_delete(self.chassis['uuid']) + self.assertIn('Deleted chassis {0}'.format(self.chassis['uuid']), + output) + self.assertNotIn(self.chassis['uuid'], self.chassis_list(['UUID'])) + + def test_set_unset_extra(self): + """Check baremetal chassis set and unset commands. + + Test steps: + 1) Create baremetal chassis in setUp. + 2) Set extra data for chassis. + 3) Check that baremetal chassis extra data was set. + 4) Unset extra data for chassis. + 5) Check that baremetal chassis extra data was unset. + """ + extra_key = 'ext' + extra_value = 'testdata' + self.openstack('baremetal chassis set --extra {0}={1} {2}' + .format(extra_key, extra_value, self.chassis['uuid'])) + + show_prop = self.chassis_show(self.chassis['uuid'], ['extra']) + self.assertEqual(extra_value, show_prop['extra'][extra_key]) + + self.openstack('baremetal chassis unset --extra {0} {1}' + .format(extra_key, self.chassis['uuid'])) + + show_prop = self.chassis_show(self.chassis['uuid'], ['extra']) + self.assertNotIn(extra_key, show_prop['extra'])