Adds constructor for InvalidInputError

This change allows keyword arguments to constructor of
InvalidInputError exception. And supports the use of ``reason``
as well as user-defined arguments as part of the error message.

Closes-bug: #1546878
Co-Authored-By: Debayan Ray <debayan.ray@gmail.com>
Change-Id: I99d901b58e45a90be128f1006a447ce69ebe91a1
This commit is contained in:
kesper 2016-06-13 11:24:05 +05:30 committed by Debayan Ray
parent 4845cf77b2
commit 32a1cc26f8
2 changed files with 82 additions and 0 deletions

View File

@ -24,6 +24,21 @@ class InvalidInputError(Exception):
message = "Invalid Input: %(reason)s"
# Note(deray): Not mandating the user to provide the ``reason`` attribute
# parameter while raising InvalidInputError exception. This is because of
# backward-compatibility reasons. See its unit test file to know about its
# different ways of usage.
def __init__(self, message=None, **kwargs):
if not message:
message = self.message
if 'reason' not in kwargs:
kwargs['reason'] = 'Unknown'
message = message % kwargs
super(InvalidInputError, self).__init__(message)
class IloError(ProliantUtilsException):
"""Base Exception.

View File

@ -0,0 +1,67 @@
# Copyright 2016 Hewlett Packard Enterprise Development LP
# 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.
"""Test Class for Exception."""
import unittest
import ddt
from proliantutils import exception
@ddt.ddt
class ExceptionTestCase(unittest.TestCase):
def setUp(self):
super(ExceptionTestCase, self).setUp()
@ddt.data(('check your input', # input - exception message
None, # input - exception kwargs
'check your input'), # expected raised exception message
('check your input. %(reason)s',
{'reason': 'invalid input provided'},
'check your input. invalid input provided'),
('check your input. %(why)s',
{'why': 'invalid input provided'},
'check your input. invalid input provided'),
("just check your input.. that's all. no any reason given",
{'reason': 'some reason'},
"just check your input.. that's all. no any reason given"),
(None,
{'reason': 'Input not supported'},
'Invalid Input: Input not supported'),
(None,
None,
'Invalid Input: Unknown'),)
@ddt.unpack
def test_InvalidInputError(self, input_exc_message, input_exc_kwargs,
expected_exc_message):
# | GIVEN |
def raising_invalid_input_error_exc_with(msg, **kwargs):
raise exception.InvalidInputError(msg, **kwargs)
input_exc_kwargs = input_exc_kwargs or {}
# | WHEN | & | THEN |
with self.assertRaises(exception.InvalidInputError) as cm:
raising_invalid_input_error_exc_with(input_exc_message,
**input_exc_kwargs)
the_exception = cm.exception
self.assertEqual(expected_exc_message, str(the_exception))