diff --git a/novaclient/tests/functional/v2/test_servers.py b/novaclient/tests/functional/v2/test_servers.py index 6adf1e052..7027413de 100644 --- a/novaclient/tests/functional/v2/test_servers.py +++ b/novaclient/tests/functional/v2/test_servers.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # 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 @@ -134,9 +135,9 @@ class TestServersTagsV226(base.ClientTestBase): COMPUTE_API_VERSION = "2.26" - def _boot_server_with_tags(self): + def _boot_server_with_tags(self, tags=["t1", "t2"]): uuid = self._create_server().id - self.client.servers.set_tags(uuid, ["t1", "t2"]) + self.client.servers.set_tags(uuid, tags) return uuid def test_show(self): @@ -145,6 +146,20 @@ class TestServersTagsV226(base.ClientTestBase): self.assertEqual('["t1", "t2"]', self._get_value_from_the_table( output, "tags")) + def test_unicode_tag_correctly_displayed(self): + """Regression test for bug #1669683. + + List and dict fields with unicode cannot be correctly + displayed. + + Ensure that once we fix this it doesn't regress. + """ + # create an instance with chinese tag + uuid = self._boot_server_with_tags(tags=["中文标签"]) + output = self.nova("show %s" % uuid) + self.assertEqual('["中文标签"]', self._get_value_from_the_table( + output, "tags")) + def test_list(self): uuid = self._boot_server_with_tags() output = self.nova("server-tag-list %s" % uuid) diff --git a/novaclient/utils.py b/novaclient/utils.py index 7486ab29c..e93df6999 100644 --- a/novaclient/utils.py +++ b/novaclient/utils.py @@ -246,7 +246,7 @@ def print_dict(d, dict_property="Property", dict_value="Value", wrap=0): for k, v in sorted(d.items()): # convert dict to str to check length if isinstance(v, (dict, list)): - v = jsonutils.dumps(v) + v = jsonutils.dumps(v, ensure_ascii=False) if wrap > 0: v = textwrap.fill(six.text_type(v), wrap) # if value has a newline, add in multiple rows