Merge "Fixed issue with white space after pep8 review Code review changes for Fixes for lp:903989 Change-Id: Ic345f0b30f24764a6f933684577323042fdeb8aa"
diff --git a/tempest/services/nova/json/servers_client.py b/tempest/services/nova/json/servers_client.py
index 9b8ea59..b3d2ed6 100644
--- a/tempest/services/nova/json/servers_client.py
+++ b/tempest/services/nova/json/servers_client.py
@@ -16,43 +16,43 @@
         self.headers = {'Content-Type': 'application/json',
                         'Accept': 'application/json'}
 
-    def create_server(self, name, image_ref, flavor_ref, meta=None,
-                      personality=None, accessIPv4=None, accessIPv6=None,
-                      adminPass=None):
+    def create_server(self, name, image_ref, flavor_ref, **kwargs):
         """
         Creates an instance of a server.
-        name: The name of the server.
-        image_ref: The reference to the image used to build the server.
-        flavor_ref: The flavor used to build the server.
+        name (Required): The name of the server.
+        image_ref (Required): Reference to the image used to build the server.
+        flavor_ref (Required): The flavor used to build the server.
+        Following optional keyword arguments are accepted:
         adminPass: Sets the initial root password.
-        meta: A dictionary of values to be used as metadata.
+        metadata: A dictionary of values to be used as metadata.
         personality: A list of dictionaries for files to be injected into
         the server.
+        security_groups: A list of security group dicts.
+        networks: A list of network dicts with UUID and fixed_ip.
+        user_data: User data for instance.
+        availability_zone: Availability zone in which to launch instance.
         accessIPv4: The IPv4 access address for the server.
         accessIPv6: The IPv6 access address for the server.
+        min_count: Count of minimum number of instances to launch.
+        max_count: Count of maximum number of instances to launch.
         """
-
         post_body = {
             'name': name,
             'imageRef': image_ref,
             'flavorRef': flavor_ref,
+            'metadata': kwargs.get('meta'),
+            'personality': kwargs.get('personality'),
+            'adminPass': kwargs.get('adminPass'),
+            'security_groups': kwargs.get('security_groups'),
+            'networks': kwargs.get('networks'),
+            'user_data': kwargs.get('user_data'),
+            'availability_zone': kwargs.get('availability_zone'),
+            'accessIPv4': kwargs.get('accessIPv4'),
+            'accessIPv6': kwargs.get('accessIPv6'),
+            'min_count': kwargs.get('min_count'),
+            'max_count': kwargs.get('max_count'),
         }
 
-        if meta != None:
-            post_body['metadata'] = meta
-
-        if personality != None:
-            post_body['personality'] = personality
-
-        if adminPass != None:
-            post_body['adminPass'] = adminPass
-
-        if accessIPv4 != None:
-            post_body['accessIPv4'] = accessIPv4
-
-        if accessIPv6 != None:
-            post_body['accessIPv6'] = accessIPv6
-
         post_body = json.dumps({'server': post_body})
         resp, body = self.client.post('servers', post_body, self.headers)
         body = json.loads(body)
@@ -225,7 +225,7 @@
     def confirm_resize(self, server_id):
         """Confirms the flavor change for a server"""
         post_body = {
-            'confirmResize': null
+            'confirmResize': None,
         }
 
         post_body = json.dumps(post_body)
@@ -236,7 +236,7 @@
     def revert_resize(self, server_id):
         """Reverts a server back to its original flavor"""
         post_body = {
-            'revertResize': null
+            'revertResize': None,
         }
 
         post_body = json.dumps(post_body)
diff --git a/tempest/tests/test_flavors.py b/tempest/tests/test_flavors.py
index 93b4483..aadcc17 100644
--- a/tempest/tests/test_flavors.py
+++ b/tempest/tests/test_flavors.py
@@ -36,3 +36,13 @@
         """The expected flavor details should be returned"""
         resp, flavor = self.client.get_flavor_details(self.flavor_id)
         self.assertEqual(self.flavor_id, str(flavor['id']))
+
+    @attr(type='negative')
+    def test_get_non_existant_flavor(self):
+        """flavor details are not returned for non existant flavors"""
+        try:
+            resp, flavor = self.client.get_flavor_details(999)
+        except:
+            pass
+        else:
+            self.fail('Should not get details for a non-existant flavor')
diff --git a/tempest/tests/test_server_actions.py b/tempest/tests/test_server_actions.py
index 0d58fb0..73f470f 100644
--- a/tempest/tests/test_server_actions.py
+++ b/tempest/tests/test_server_actions.py
@@ -24,34 +24,36 @@
 
     def setUp(self):
         self.name = rand_name('server')
-        resp, self.server = self.client.create_server(self.name,
-                                                      self.image_ref,
-                                                      self.flavor_ref)
-        self.client.wait_for_server_status(self.server['id'], 'ACTIVE')
+        resp, server = self.client.create_server(self.name,
+                                                 self.image_ref,
+                                                 self.flavor_ref)
+        self.server_id = server['id']
+
+        self.client.wait_for_server_status(self.server_id, 'ACTIVE')
 
     def tearDown(self):
-        self.client.delete_server(self.server['id'])
+        self.client.delete_server(self.server_id)
 
     @attr(type='smoke')
     def test_change_server_password(self):
         """The server's password should be set to the provided password"""
-        resp, body = self.client.change_password(self.server['id'], 'newpass')
+        resp, body = self.client.change_password(self.server_id, 'newpass')
         self.assertEqual(202, resp.status)
-        self.client.wait_for_server_status(self.server['id'], 'ACTIVE')
+        self.client.wait_for_server_status(self.server_id, 'ACTIVE')
 
     @attr(type='smoke')
     def test_reboot_server_hard(self):
         """ The server should be power cycled """
-        resp, body = self.client.reboot(self.server['id'], 'HARD')
+        resp, body = self.client.reboot(self.server_id, 'HARD')
         self.assertEqual(202, resp.status)
-        self.client.wait_for_server_status(self.server['id'], 'ACTIVE')
+        self.client.wait_for_server_status(self.server_id, 'ACTIVE')
 
     @attr(type='smoke')
     def test_reboot_server_soft(self):
         """The server should be signaled to reboot gracefully"""
-        resp, body = self.client.reboot(self.server['id'], 'SOFT')
+        resp, body = self.client.reboot(self.server_id, 'SOFT')
         self.assertEqual(202, resp.status)
-        self.client.wait_for_server_status(self.server['id'], 'ACTIVE')
+        self.client.wait_for_server_status(self.server_id, 'ACTIVE')
 
     @attr(type='smoke')
     def test_rebuild_server(self):
@@ -62,14 +64,14 @@
         personality = [{'path': '/etc/rebuild.txt',
                        'contents': base64.b64encode(file_contents)}]
 
-        resp, rebuilt_server = self.client.rebuild(self.server['id'],
+        resp, rebuilt_server = self.client.rebuild(self.server_id,
                                                    self.image_ref_alt,
                                                    name=new_name, meta=meta,
                                                    personality=personality,
                                                    adminPass='rebuild')
 
         #Verify the properties in the initial response are correct
-        self.assertEqual(self.server['id'], rebuilt_server['id'])
+        self.assertEqual(self.server_id, rebuilt_server['id'])
         self.assertEqual(self.image_ref_alt, rebuilt_server['image']['id'])
         self.assertEqual(self.flavor_ref, rebuilt_server['flavor']['id'])
 
@@ -87,14 +89,14 @@
         the provided flavor
         """
 
-        resp, server = self.client.resize(self.id, self.flavor_ref_alt)
+        resp, server = self.client.resize(self.server_id, self.flavor_ref_alt)
         self.assertEqual(202, resp.status)
-        self.client.wait_for_server_status(self.id, 'VERIFY_RESIZE')
+        self.client.wait_for_server_status(self.server_id, 'VERIFY_RESIZE')
 
-        self.client.confirm_resize(self.id)
-        self.client.wait_for_server_status(self.id, 'ACTIVE')
+        self.client.confirm_resize(self.server_id)
+        self.client.wait_for_server_status(self.server_id, 'ACTIVE')
 
-        resp, server = self.client.get_server(self.id)
+        resp, server = self.client.get_server(self.server_id)
         self.assertEqual(self.flavor_ref_alt, server['flavor']['id'])
 
     @attr(type='smoke')
@@ -105,12 +107,12 @@
         values after a resize is reverted
         """
 
-        resp, server = self.client.resize(self.id, self.flavor_ref_alt)
+        resp, server = self.client.resize(self.server_id, self.flavor_ref_alt)
         self.assertEqual(202, resp.status)
-        self.client.wait_for_server_status(id, 'VERIFY_RESIZE')
+        self.client.wait_for_server_status(self.server_id, 'VERIFY_RESIZE')
 
-        self.client.revert_resize(self.id)
-        self.client.wait_for_server_status(id, 'ACTIVE')
+        self.client.revert_resize(self.server_id)
+        self.client.wait_for_server_status(self.server_id, 'ACTIVE')
 
-        resp, server = self.client.get_server(id)
+        resp, server = self.client.get_server(self.server_id)
         self.assertEqual(self.flavor_ref, server['flavor']['id'])