Step 1 of refactoring compute tests

* Move all compute tests under /tempest/tests/compute
* Add standard license header for all compute tests
* Fix all imports to align with HACKING standards

Change-Id: If90b65eeda7938d7dafee0590df854ffb34b1350
diff --git a/tempest/tests/compute/test_servers_negative.py b/tempest/tests/compute/test_servers_negative.py
new file mode 100644
index 0000000..31f737c
--- /dev/null
+++ b/tempest/tests/compute/test_servers_negative.py
@@ -0,0 +1,276 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack, LLC
+# 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.
+
+import sys
+
+from nose.plugins.attrib import attr
+import unittest2 as unittest
+
+from tempest import exceptions
+from tempest import openstack
+from tempest.common.utils.data_utils import rand_name
+from tempest.tests.compute.base import BaseComputeTest
+
+
+class ServersNegativeTest(BaseComputeTest):
+
+    @classmethod
+    def setUpClass(cls):
+        cls.client = cls.servers_client
+        cls.img_client = cls.images_client
+        cls.alt_os = openstack.AltManager()
+        cls.alt_client = cls.alt_os.servers_client
+
+    @classmethod
+    def tearDownClass(cls):
+        for server in cls.servers:
+            try:
+                cls.client.delete_server(server['id'])
+            except exceptions.NotFound:
+                continue
+
+    @attr(type='negative')
+    def test_server_name_blank(self):
+        """Create a server with name parameter empty"""
+        try:
+                resp, server = self.client.create_server('', self.image_ref,
+                                                         self.flavor_ref)
+        except exceptions.BadRequest:
+            pass
+        else:
+            self.fail('Server name cannot be blank')
+
+    @attr(type='negative')
+    def test_personality_file_contents_not_encoded(self):
+        """Use an unencoded file when creating a server with personality"""
+        file_contents = 'This is a test file.'
+        personality = [{'path': '/etc/testfile.txt',
+                        'contents': file_contents}]
+
+        try:
+            resp, server = self.client.create_server('test',
+                                                      self.image_ref,
+                                                      self.flavor_ref,
+                                                      personality=personality)
+        except exceptions.BadRequest:
+            pass
+        else:
+            self.fail('Unencoded file contents should not be accepted')
+
+    @attr(type='negative')
+    def test_create_with_invalid_image(self):
+        """Create a server with an unknown image"""
+        try:
+            resp, server = self.client.create_server('fail', -1,
+                                                     self.flavor_ref)
+        except exceptions.BadRequest:
+            pass
+        else:
+            self.fail('Cannot create a server with an invalid image')
+
+    @attr(type='negative')
+    def test_create_with_invalid_flavor(self):
+        """Create a server with an unknown flavor"""
+        try:
+            self.client.create_server('fail', self.image_ref, -1)
+        except exceptions.BadRequest:
+            pass
+        else:
+            self.fail('Cannot create a server with an invalid flavor')
+
+    @attr(type='negative')
+    def test_invalid_access_ip_v4_address(self):
+        """An access IPv4 address must match a valid address pattern"""
+        accessIPv4 = '1.1.1.1.1.1'
+        name = rand_name('server')
+        try:
+            resp, server = self.client.create_server(name,
+                                                     self.image_ref,
+                                                     self.flavor_ref,
+                                                     accessIPv4=accessIPv4)
+        except exceptions.BadRequest:
+            pass
+        else:
+            self.fail('Access IPv4 address must match the correct format')
+
+    @attr(type='negative')
+    def test_invalid_ip_v6_address(self):
+        """An access IPv6 address must match a valid address pattern"""
+        accessIPv6 = 'notvalid'
+        name = rand_name('server')
+        try:
+            resp, server = self.client.create_server(name,
+                                                     self.image_ref,
+                                                     self.flavor_ref,
+                                                     accessIPv6=accessIPv6)
+        except exceptions.BadRequest:
+            pass
+        else:
+            self.fail('Access IPv6 address must match the correct format')
+
+    @attr(type='negative')
+    def test_reboot_deleted_server(self):
+        """Reboot a deleted server"""
+        self.name = rand_name('server')
+        resp, create_server = self.client.create_server(self.name,
+                                                 self.image_ref,
+                                                 self.flavor_ref)
+        self.server_id = create_server['id']
+        self.client.delete_server(self.server_id)
+        self.client.wait_for_server_termination(self.server_id)
+        try:
+            resp1, reboot_server = self.client.reboot(self.server_id, 'SOFT')
+        except exceptions.NotFound:
+            pass
+        else:
+            self.fail('Should not be able to reboot a deleted server')
+
+    @attr(type='negative')
+    def test_rebuild_deleted_server(self):
+        """Rebuild a deleted server"""
+        self.name = rand_name('server')
+        resp, create_server = self.client.create_server(self.name,
+                                                 self.image_ref,
+                                                 self.flavor_ref)
+        self.server_id = create_server['id']
+        self.client.delete_server(self.server_id)
+        self.client.wait_for_server_termination(self.server_id)
+        try:
+            resp1, rebuild_server = self.client.rebuild(self.server_id,
+                                                self.image_ref_alt)
+        except exceptions.NotFound:
+            pass
+        else:
+            self.fail('Should not be able to rebuild a deleted server')
+
+    @attr(type='negative')
+    def test_create_numeric_server_name(self):
+        """Create a server with a numeric name"""
+
+        server_name = 12345
+        self.assertRaises(exceptions.BadRequest, self.client.create_server,
+                          server_name, self.image_ref, self.flavor_ref)
+
+    @attr(type='negative')
+    def test_create_server_name_length_exceeds_256(self):
+        """Create a server with name length exceeding 256 characters"""
+
+        server_name = 'a' * 256
+        self.assertRaises(exceptions.BadRequest, self.client.create_server,
+                          server_name, self.image_ref, self.flavor_ref)
+
+    @attr(type='negative')
+    def test_create_with_invalid_network_uuid(self):
+        """Pass invalid network uuid while creating a server"""
+
+        server_name = rand_name('server')
+        networks = [{'fixed_ip': '10.0.1.1', 'uuid':'a-b-c-d-e-f-g-h-i-j'}]
+
+        self.assertRaises(exceptions.BadRequest, self.client.create_server,
+                         server_name, self.image_ref, self.flavor_ref,
+                         networks=networks)
+
+    @attr(type='negative')
+    def test_create_with_non_existant_keypair(self):
+        """Pass a non existant keypair while creating a server"""
+
+        key_name = rand_name('key')
+        server_name = rand_name('server')
+        self.assertRaises(exceptions.BadRequest, self.client.create_server,
+                        server_name, self.image_ref, self.flavor_ref,
+                        key_name=key_name)
+
+    @unittest.skip("Until Bug 1004007 is fixed")
+    @attr(type='negative')
+    def test_create_server_metadata_exceeds_length_limit(self):
+        """Pass really long metadata while creating a server"""
+
+        server_name = rand_name('server')
+        metadata = {'a': 'b' * 260}
+        self.assertRaises(exceptions.OverLimit, self.client.create_server,
+                        server_name, self.image_ref, self.flavor_ref,
+                        meta=metadata)
+
+    @attr(type='negative')
+    def test_update_name_of_non_existent_server(self):
+        """Update name of a non-existent server"""
+
+        server_name = rand_name('server')
+        new_name = rand_name('server') + '_updated'
+
+        self.assertRaises(exceptions.NotFound, self.client.update_server,
+                        server_name, name=new_name)
+
+    @attr(type='negative')
+    def test_update_server_set_empty_name(self):
+        """Update name of the server to an empty string"""
+
+        server_name = rand_name('server')
+        new_name = ''
+
+        self.assertRaises(exceptions.BadRequest, self.client.update_server,
+                        server_name, name=new_name)
+
+    @attr(type='negative')
+    def test_update_server_of_another_tenant(self):
+        """Update name of a server that belongs to another tenant"""
+
+        server = self.create_server()
+        new_name = server['id'] + '_new'
+        self.assertRaises(exceptions.NotFound,
+                        self.alt_client.update_server, server['id'],
+                        name=new_name)
+
+    @attr(type='negative')
+    def test_update_server_name_length_exceeds_256(self):
+        """Update name of server exceed the name length limit"""
+
+        server = self.create_server()
+        new_name = 'a' * 256
+        self.assertRaises(exceptions.BadRequest,
+                        self.client.update_server, server['id'], name=new_name)
+
+    @attr(type='negative')
+    def test_delete_non_existent_server(self):
+        """Delete a non existent server"""
+
+        self.assertRaises(exceptions.NotFound, self.client.delete_server,
+                        '999erra43')
+
+    @attr(type='negative')
+    def test_delete_a_server_of_another_tenant(self):
+        """Delete a server that belongs to another tenant"""
+
+        server = self.create_server()
+        resp, body = self.client.delete_server(server['id'])
+        self.assertEqual(resp['status'], '204')
+        self.assertRaises(exceptions.NotFound, self.alt_client.delete_server,
+                         server['id'])
+
+    @attr(type='negative')
+    def test_delete_server_pass_negative_id(self):
+        """Pass an invalid string parameter to delete server"""
+
+        self.assertRaises(exceptions.NotFound, self.client.delete_server,
+                        -1)
+
+    @attr(type='negative')
+    def test_delete_server_pass_id_exceeding_length_limit(self):
+        """Pass a server ID that exceeds length limit to delete server"""
+
+        self.assertRaises(exceptions.NotFound, self.client.delete_server,
+                          sys.maxint + 1)