diff --git a/fuelclient/cli/error.py b/fuelclient/cli/error.py index 36bb523..a878242 100644 --- a/fuelclient/cli/error.py +++ b/fuelclient/cli/error.py @@ -88,6 +88,10 @@ class ExecutedErrorNonZeroExitCode(FuelClientException): """Subshell command returned non-zero exit code.""" +class LabelEmptyKeyError(BadDataException): + """Should be raised when user provides labels with empty key.""" + + def exceptions_decorator(func): """Handles HTTP errors and expected exceptions that may occur in methods of APIClient class diff --git a/fuelclient/tests/v1/integration/test_client.py b/fuelclient/tests/v1/integration/test_client.py index 2fffd6a..e8c9f58 100644 --- a/fuelclient/tests/v1/integration/test_client.py +++ b/fuelclient/tests/v1/integration/test_client.py @@ -61,7 +61,7 @@ class TestHandlers(base.BaseTestCase): cases = [ ("env --create --name=TestEnv --release=1 --mode=multinode", "400 Client Error: Bad Request (Cannot deploy in multinode " - "mode in current release. Need to be one of [u'ha_compact']") + "mode in current release. Need to be one of: ha_compact") ] for cmd, err in cases: self.check_for_stderr(cmd, err, check_errors=False) diff --git a/fuelclient/tests/v2/unit/lib/test_node.py b/fuelclient/tests/v2/unit/lib/test_node.py index e318057..1b918c5 100644 --- a/fuelclient/tests/v2/unit/lib/test_node.py +++ b/fuelclient/tests/v2/unit/lib/test_node.py @@ -156,6 +156,17 @@ class TestNodeFacade(test_api.BaseLibTest): self.assertTrue(matcher_put.called) self.assertEqual(data, matcher_put.last_request.json()) + def test_set_labels_with_empty_key(self): + labels = ['key_1=val_1', ' = val_2', 'key_3 = '] + node_ids = ['42'] + + msg = 'Wrong label "{0}" was provided. Label key couldn\'t ' \ + 'be an empty string.'.format(labels[1]) + with self.assertRaisesRegexp(error.LabelEmptyKeyError, msg): + self.client.set_labels_for_nodes(labels=labels, node_ids=node_ids) + + self.assertFalse(self.top_matcher.called) + def test_delete_specific_labels_for_all_nodes(self): labels = ['key_1', ' key_3 '] data = {'labels': {'key_2': None}} diff --git a/fuelclient/v1/node.py b/fuelclient/v1/node.py index bcd3c1c..652a861 100644 --- a/fuelclient/v1/node.py +++ b/fuelclient/v1/node.py @@ -112,6 +112,10 @@ class NodeClient(base_v1.BaseV1Client): for label in labels: key, val, _ = self._split_label(label) + if not key: + msg = 'Wrong label "{0}" was provided. Label key couldn\'t ' \ + 'be an empty string.'.format(label) + raise error.LabelEmptyKeyError(msg) labels_to_update[key] = val if node_ids: