From ce65164155dcf6dddf7695fbc5ca6352c121cc04 Mon Sep 17 00:00:00 2001
From: TerryHowe <terrylhowe@gmail.com>
Date: Wed, 3 Jun 2015 17:18:38 -0600
Subject: [PATCH] Add functional tests for image set

This patch includes functional tests for image set and it includes
a change to use the OSC utils.format_dict method to format the
properties.  This will give a more user friendly format to the image
commands and it gives a more consistent testable format to the
output.  Instead of:

{u'a': u'b', u'c': u'd'}

The user will see:

a=b, c=d

Change-Id: Ib396316586ffc5dbab231064d5b6dc9425507934
---
 functional/tests/image/v1/test_image.py | 23 ++++++++++++++++++++++-
 openstackclient/image/v1/image.py       |  3 +++
 openstackclient/tests/image/v1/fakes.py |  6 ++++--
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/functional/tests/image/v1/test_image.py b/functional/tests/image/v1/test_image.py
index e27ab24cd1..9f6ddcc5df 100644
--- a/functional/tests/image/v1/test_image.py
+++ b/functional/tests/image/v1/test_image.py
@@ -19,6 +19,7 @@ class ImageTests(test.TestCase):
     """Functional tests for image. """
 
     NAME = uuid.uuid4().hex
+    OTHER_NAME = uuid.uuid4().hex
     HEADERS = ['Name']
     FIELDS = ['name']
 
@@ -31,7 +32,13 @@ class ImageTests(test.TestCase):
 
     @classmethod
     def tearDownClass(cls):
-        raw_output = cls.openstack('image delete ' + cls.NAME)
+        # Rename test
+        opts = cls.get_show_opts(cls.FIELDS)
+        raw_output = cls.openstack(
+            'image set --name ' + cls.OTHER_NAME + ' ' + cls.NAME + opts)
+        cls.assertOutput(cls.OTHER_NAME + "\n", raw_output)
+        # Delete test
+        raw_output = cls.openstack('image delete ' + cls.OTHER_NAME)
         cls.assertOutput('', raw_output)
 
     def test_image_list(self):
@@ -43,3 +50,17 @@ class ImageTests(test.TestCase):
         opts = self.get_show_opts(self.FIELDS)
         raw_output = self.openstack('image show ' + self.NAME + opts)
         self.assertEqual(self.NAME + "\n", raw_output)
+
+    def test_image_set(self):
+        opts = self.get_show_opts([
+            "disk_format", "is_public", "min_disk", "min_ram", "name"])
+        raw_output = self.openstack('image set --min-disk 4 --min-ram 5 ' +
+                                    '--disk-format qcow2  --public ' +
+                                    self.NAME + opts)
+        self.assertEqual("qcow2\nTrue\n4\n5\n" + self.NAME + '\n', raw_output)
+
+    def test_image_metadata(self):
+        opts = self.get_show_opts(["name", "properties"])
+        raw_output = self.openstack(
+            'image set --property a=b --property c=d ' + self.NAME + opts)
+        self.assertEqual(self.NAME + "\na='b', c='d'\n", raw_output)
diff --git a/openstackclient/image/v1/image.py b/openstackclient/image/v1/image.py
index d4d45fa287..85a9e07683 100644
--- a/openstackclient/image/v1/image.py
+++ b/openstackclient/image/v1/image.py
@@ -275,6 +275,7 @@ class CreateImage(show.ShowOne):
 
         info = {}
         info.update(image._info)
+        info['properties'] = utils.format_dict(info.get('properties', {}))
         return zip(*sorted(six.iteritems(info)))
 
 
@@ -608,6 +609,7 @@ class SetImage(show.ShowOne):
 
         info = {}
         info.update(image._info)
+        info['properties'] = utils.format_dict(info.get('properties', {}))
         return zip(*sorted(six.iteritems(info)))
 
 
@@ -636,4 +638,5 @@ class ShowImage(show.ShowOne):
 
         info = {}
         info.update(image._info)
+        info['properties'] = utils.format_dict(info.get('properties', {}))
         return zip(*sorted(six.iteritems(info)))
diff --git a/openstackclient/tests/image/v1/fakes.py b/openstackclient/tests/image/v1/fakes.py
index 972e641589..95a8a39ceb 100644
--- a/openstackclient/tests/image/v1/fakes.py
+++ b/openstackclient/tests/image/v1/fakes.py
@@ -30,7 +30,7 @@ image_properties = {
     'Beta': 'b',
     'Gamma': 'g',
 }
-image_properties_str = "{'Alpha': 'a', 'Beta': 'b', 'Gamma': 'g'}"
+image_properties_str = "Alpha='a', Beta='b', Gamma='g'"
 image_data = 'line 1\nline 2\n'
 
 IMAGE = {
@@ -47,7 +47,9 @@ IMAGE = {
 }
 
 IMAGE_columns = tuple(sorted(IMAGE))
-IMAGE_data = tuple((IMAGE[x] for x in sorted(IMAGE)))
+IMAGE_output = dict(IMAGE)
+IMAGE_output['properties'] = image_properties_str
+IMAGE_data = tuple((IMAGE_output[x] for x in sorted(IMAGE_output)))
 
 
 class FakeImagev1Client(object):