Restructure layout of functions, follow alphabetical ordering
diff --git a/ec2stack/providers/cloudstack/images.py b/ec2stack/providers/cloudstack/images.py
index 0b28384..ba1fa2c 100644
--- a/ec2stack/providers/cloudstack/images.py
+++ b/ec2stack/providers/cloudstack/images.py
@@ -6,26 +6,6 @@
 
 
 @helpers.authentication_required
-def describe_images():
-    args = {'templatefilter': 'executable', 'command': 'listTemplates'}
-    response = cloudstack.describe_item(
-        args, 'template', errors.invalid_image_id, 'ImageId'
-    )
-
-    return _describe_images_response(
-        response
-    )
-
-
-def _describe_images_response(response):
-    return {
-        'template_name_or_list': 'images.xml',
-        'response_type': 'DescribeImagesResponse',
-        'response': response
-    }
-
-
-@helpers.authentication_required
 def describe_image_attribute():
     image_id = helpers.get('ImageId')
     attribute = helpers.get('Attribute')
@@ -55,6 +35,26 @@
     }
 
 
+@helpers.authentication_required
+def describe_images():
+    args = {'templatefilter': 'executable', 'command': 'listTemplates'}
+    response = cloudstack.describe_item(
+        args, 'template', errors.invalid_image_id, 'ImageId'
+    )
+
+    return _describe_images_response(
+        response
+    )
+
+
+def _describe_images_response(response):
+    return {
+        'template_name_or_list': 'images.xml',
+        'response_type': 'DescribeImagesResponse',
+        'response': response
+    }
+
+
 def describe_image_by_id(image_id):
     args = {
         'id': image_id,
diff --git a/ec2stack/providers/cloudstack/instances.py b/ec2stack/providers/cloudstack/instances.py
index a411f06..479a0b5 100644
--- a/ec2stack/providers/cloudstack/instances.py
+++ b/ec2stack/providers/cloudstack/instances.py
@@ -9,34 +9,6 @@
 
 
 @helpers.authentication_required
-def describe_instances():
-    args = {'command': 'listVirtualMachines'}
-    response = cloudstack.describe_item(
-        args, 'virtualmachine', errors.invalid_instance_id, 'InstanceId'
-    )
-
-    return _describe_instances_response(
-        response
-    )
-
-
-def describe_instance_by_id(instance_id):
-    args = {'id': instance_id, 'command': 'listVirtualMachines'}
-    response = cloudstack.describe_item_request(
-        args, 'virtualmachine', errors.invalid_instance_id
-    )
-    return response
-
-
-def _describe_instances_response(response):
-    return {
-        'template_name_or_list': 'instances.xml',
-        'response_type': 'DescribeInstancesResponse',
-        'response': response
-    }
-
-
-@helpers.authentication_required
 def describe_instance_attribute():
     instance_id = helpers.get('InstanceId')
     attribute = helpers.get('Attribute')
@@ -70,6 +42,34 @@
 
 
 @helpers.authentication_required
+def describe_instances():
+    args = {'command': 'listVirtualMachines'}
+    response = cloudstack.describe_item(
+        args, 'virtualmachine', errors.invalid_instance_id, 'InstanceId'
+    )
+
+    return _describe_instances_response(
+        response
+    )
+
+
+def describe_instance_by_id(instance_id):
+    args = {'id': instance_id, 'command': 'listVirtualMachines'}
+    response = cloudstack.describe_item_request(
+        args, 'virtualmachine', errors.invalid_instance_id
+    )
+    return response
+
+
+def _describe_instances_response(response):
+    return {
+        'template_name_or_list': 'instances.xml',
+        'response_type': 'DescribeInstancesResponse',
+        'response': response
+    }
+
+
+@helpers.authentication_required
 def run_instance():
     helpers.require_parameters(
         ['ImageId', 'MinCount', 'MaxCount'])
@@ -159,6 +159,32 @@
 
 
 @helpers.authentication_required
+def reboot_instance():
+    helpers.require_parameters(['InstanceId.1'])
+    instance_id = helpers.get('InstanceId.1')
+    _reboot_instance_request(instance_id)
+    return _reboot_instance_response()
+
+
+def _reboot_instance_request(instance_id):
+    args = {'command': 'rebootVirtualMachine',
+            'id': instance_id}
+    response = requester.make_request_async(args)
+    response = response['virtualmachine']
+    return response
+
+
+def _reboot_instance_response():
+    response = {
+        'template_name_or_list': 'status.xml',
+        'response_type': 'RebootInstancesResponse',
+        'return': 'true'
+    }
+
+    return response
+
+
+@helpers.authentication_required
 def start_instance():
     helpers.require_parameters(['InstanceId.1'])
     instance_id = helpers.get('InstanceId.1')
@@ -193,40 +219,6 @@
 
 
 @helpers.authentication_required
-def terminate_instance():
-    helpers.require_parameters(['InstanceId.1'])
-    instance_id = helpers.get('InstanceId.1')
-    previous_instance_state_description = describe_instance_by_id(instance_id)
-    new_instance_state_description = _terminate_instance_request(instance_id)
-    return _terminate_instance_response(
-        previous_instance_state_description,
-        new_instance_state_description
-    )
-
-
-def _terminate_instance_request(instance_id):
-    args = {'command': 'destroyVirtualMachine',
-            'id': instance_id}
-
-    response = requester.make_request_async(args)
-
-    response = response['virtualmachine']
-
-    return response
-
-
-def _terminate_instance_response(previous_state, new_state):
-    response = {
-        'template_name_or_list': 'change_instance_state.xml',
-        'response_type': 'TerminateInstancesResponse',
-        'previous_state': previous_state,
-        'new_state': new_state
-    }
-
-    return response
-
-
-@helpers.authentication_required
 def stop_instance():
     helpers.require_parameters(['InstanceId.1'])
     instance_id = helpers.get('InstanceId.1')
@@ -258,26 +250,34 @@
 
 
 @helpers.authentication_required
-def reboot_instance():
+def terminate_instance():
     helpers.require_parameters(['InstanceId.1'])
     instance_id = helpers.get('InstanceId.1')
-    _reboot_instance_request(instance_id)
-    return _reboot_instance_response()
+    previous_instance_state_description = describe_instance_by_id(instance_id)
+    new_instance_state_description = _terminate_instance_request(instance_id)
+    return _terminate_instance_response(
+        previous_instance_state_description,
+        new_instance_state_description
+    )
 
 
-def _reboot_instance_request(instance_id):
-    args = {'command': 'rebootVirtualMachine',
+def _terminate_instance_request(instance_id):
+    args = {'command': 'destroyVirtualMachine',
             'id': instance_id}
+
     response = requester.make_request_async(args)
+
     response = response['virtualmachine']
+
     return response
 
 
-def _reboot_instance_response():
+def _terminate_instance_response(previous_state, new_state):
     response = {
-        'template_name_or_list': 'status.xml',
-        'response_type': 'RebootInstancesResponse',
-        'return': 'true'
+        'template_name_or_list': 'change_instance_state.xml',
+        'response_type': 'TerminateInstancesResponse',
+        'previous_state': previous_state,
+        'new_state': new_state
     }
 
     return response
diff --git a/ec2stack/providers/cloudstack/keypairs.py b/ec2stack/providers/cloudstack/keypairs.py
index ab1e878..8292d48 100644
--- a/ec2stack/providers/cloudstack/keypairs.py
+++ b/ec2stack/providers/cloudstack/keypairs.py
@@ -39,26 +39,6 @@
 
 
 @helpers.authentication_required
-def describe_keypairs():
-    args = {'command': 'listSSHKeyPairs'}
-    response = cloudstack.describe_item(
-        args, 'sshkeypair', errors.invalid_keypair_name, 'KeyName'
-    )
-
-    return _describe_keypair_response(
-        response
-    )
-
-
-def _describe_keypair_response(response):
-    return {
-        'template_name_or_list': 'keypairs.xml',
-        'response_type': 'DescribeKeyPairsResponse',
-        'response': response
-    }
-
-
-@helpers.authentication_required
 def delete_keypair():
     helpers.require_parameters(['KeyName'])
     _delete_keypair_request()
@@ -82,6 +62,26 @@
 
 
 @helpers.authentication_required
+def describe_keypairs():
+    args = {'command': 'listSSHKeyPairs'}
+    response = cloudstack.describe_item(
+        args, 'sshkeypair', errors.invalid_keypair_name, 'KeyName'
+    )
+
+    return _describe_keypair_response(
+        response
+    )
+
+
+def _describe_keypair_response(response):
+    return {
+        'template_name_or_list': 'keypairs.xml',
+        'response_type': 'DescribeKeyPairsResponse',
+        'response': response
+    }
+
+
+@helpers.authentication_required
 def import_keypair():
     helpers.require_parameters(['KeyName', 'PublicKeyMaterial'])
     response = _import_keypair_request()
diff --git a/ec2stack/providers/cloudstack/security_groups.py b/ec2stack/providers/cloudstack/security_groups.py
index da8ef02..57282f8 100644
--- a/ec2stack/providers/cloudstack/security_groups.py
+++ b/ec2stack/providers/cloudstack/security_groups.py
@@ -8,6 +8,57 @@
 
 
 @helpers.authentication_required
+def authenticate_security_group_egress():
+    rule_type = 'egress'
+    response = _authenticate_security_group_request(rule_type)
+    return _authenticate_security_group_response(response, rule_type)
+
+
+def _authenticate_security_group_request(rule_type):
+    args = _parse_security_group_request()
+
+    if rule_type == 'egress':
+        args['command'] = 'authorizeSecurityGroupEgress'
+    elif rule_type == 'ingress':
+        args['command'] = 'authorizeSecurityGroupIngress'
+
+    response = requester.make_request_async(args)
+
+    return response
+
+
+def _authenticate_security_group_response(response, rule_type):
+    if 'errortext' in response:
+        if 'Failed to authorize security group' in response['errortext']:
+            cidrlist = str(helpers.get('CidrIp'))
+            protocol = str(helpers.get('IpProtocol'))
+            from_port = str(helpers.get('FromPort'))
+            to_port = str(helpers.get('toPort'))
+            raise Ec2stackError(
+                '400',
+                'InvalidPermission.Duplicate',
+                'the specified rule "peer: ' + cidrlist + ', ' + protocol +
+                ', from port: ' + from_port + ', to port: ' + to_port +
+                ', ALLOW" already exists'
+            )
+        elif 'Unable to find security group' in response['errortext']:
+            errors.invalid_security_group()
+
+        errors.invalid_paramater_value(response['errortext'])
+    else:
+        if rule_type == 'ingress':
+            rule_type = 'AuthorizeSecurityGroupIngressResponse'
+        elif rule_type == 'egress':
+            rule_type = 'AuthorizeSecurityGroupEgressResponse'
+
+        return {
+            'template_name_or_list': 'status.xml',
+            'response_type': rule_type,
+            'return': 'true'
+        }
+
+
+@helpers.authentication_required
 def create_security_group():
     helpers.require_parameters(['GroupName', 'GroupDescription'])
     response = _create_security_group_request()
@@ -99,57 +150,6 @@
 
 
 @helpers.authentication_required
-def authenticate_security_group_egress():
-    rule_type = 'egress'
-    response = _authenticate_security_group_request(rule_type)
-    return _authenticate_security_group_response(response, rule_type)
-
-
-def _authenticate_security_group_request(rule_type):
-    args = _parse_security_group_request()
-
-    if rule_type == 'egress':
-        args['command'] = 'authorizeSecurityGroupEgress'
-    elif rule_type == 'ingress':
-        args['command'] = 'authorizeSecurityGroupIngress'
-
-    response = requester.make_request_async(args)
-
-    return response
-
-
-def _authenticate_security_group_response(response, rule_type):
-    if 'errortext' in response:
-        if 'Failed to authorize security group' in response['errortext']:
-            cidrlist = str(helpers.get('CidrIp'))
-            protocol = str(helpers.get('IpProtocol'))
-            from_port = str(helpers.get('FromPort'))
-            to_port = str(helpers.get('toPort'))
-            raise Ec2stackError(
-                '400',
-                'InvalidPermission.Duplicate',
-                'the specified rule "peer: ' + cidrlist + ', ' + protocol +
-                ', from port: ' + from_port + ', to port: ' + to_port +
-                ', ALLOW" already exists'
-            )
-        elif 'Unable to find security group' in response['errortext']:
-            errors.invalid_security_group()
-
-        errors.invalid_paramater_value(response['errortext'])
-    else:
-        if rule_type == 'ingress':
-            rule_type = 'AuthorizeSecurityGroupIngressResponse'
-        elif rule_type == 'egress':
-            rule_type = 'AuthorizeSecurityGroupEgressResponse'
-
-        return {
-            'template_name_or_list': 'status.xml',
-            'response_type': rule_type,
-            'return': 'true'
-        }
-
-
-@helpers.authentication_required
 def revoke_security_group_ingress():
     rule_type = 'ingress'
     _revoke_security_group_request(rule_type)
diff --git a/ec2stack/providers/cloudstack/volumes.py b/ec2stack/providers/cloudstack/volumes.py
index 82649fa..321fa4b 100644
--- a/ec2stack/providers/cloudstack/volumes.py
+++ b/ec2stack/providers/cloudstack/volumes.py
@@ -22,22 +22,38 @@
 
 
 @helpers.authentication_required
-def describe_volumes():
-    args = {'command': 'listVolumes'}
-    response = cloudstack.describe_item(
-        args, 'volume', errors.invalid_volume_id, 'VolumeId'
-    )
-
-    return _describe_volumes_response(
-        response
-    )
+def attach_volume():
+    helpers.require_parameters(['VolumeId', 'InstanceId', 'Device'])
+    response = _attach_volume_request()
+    return _attach_volume_response(response)
 
 
-def _describe_volumes_response(response):
+def _attach_volume_request():
+    args = {}
+
+    volume_id = helpers.get('VolumeId')
+    instance_id = helpers.get('InstanceId')
+    device = helpers.get('Device')
+
+    args['id'] = volume_id
+    args['command'] = 'attachVolume'
+    args['virtualmachineid'] = instance_id
+    args['device'] = device
+
+    response = requester.make_request_async(args)
+
+    return response
+
+
+def _attach_volume_response(response):
+    if 'errortext' in response:
+        helpers.error_to_aws(response, volume_error_to_aws)
+
+    response = response['volume']
     return {
-        'template_name_or_list': 'volumes.xml',
-        'response_type': 'DescribeVolumesResponse',
-        'response': response,
+        'template_name_or_list': 'volume_attachment.xml',
+        'response_type': 'AttachVolumeResponse',
+        'response': response
     }
 
 
@@ -85,38 +101,50 @@
 
 
 @helpers.authentication_required
-def attach_volume():
-    helpers.require_parameters(['VolumeId', 'InstanceId', 'Device'])
-    response = _attach_volume_request()
-    return _attach_volume_response(response)
+def delete_volume():
+    helpers.require_parameters(['VolumeId'])
+    response = _delete_volume_request()
+
+    return _delete_volume_response(response)
 
 
-def _attach_volume_request():
-    args = {}
+def _delete_volume_request():
+    args = {'id': helpers.get('VolumeId'), 'command': 'deleteVolume'}
 
-    volume_id = helpers.get('VolumeId')
-    instance_id = helpers.get('InstanceId')
-    device = helpers.get('Device')
-
-    args['id'] = volume_id
-    args['command'] = 'attachVolume'
-    args['virtualmachineid'] = instance_id
-    args['device'] = device
-
-    response = requester.make_request_async(args)
+    response = requester.make_request(args)
+    response = response['deletevolumeresponse']
 
     return response
 
 
-def _attach_volume_response(response):
+def _delete_volume_response(response):
     if 'errortext' in response:
         helpers.error_to_aws(response, volume_error_to_aws)
 
-    response = response['volume']
     return {
-        'template_name_or_list': 'volume_attachment.xml',
-        'response_type': 'AttachVolumeResponse',
-        'response': response
+        'template_name_or_list': 'status.xml',
+        'response_type': 'DeleteVolumeResponse',
+        'return': 'true'
+    }
+
+
+@helpers.authentication_required
+def describe_volumes():
+    args = {'command': 'listVolumes'}
+    response = cloudstack.describe_item(
+        args, 'volume', errors.invalid_volume_id, 'VolumeId'
+    )
+
+    return _describe_volumes_response(
+        response
+    )
+
+
+def _describe_volumes_response(response):
+    return {
+        'template_name_or_list': 'volumes.xml',
+        'response_type': 'DescribeVolumesResponse',
+        'response': response,
     }
 
 
@@ -155,31 +183,3 @@
         'response_type': 'DetachVolumeResponse',
         'response': response
     }
-
-
-@helpers.authentication_required
-def delete_volume():
-    helpers.require_parameters(['VolumeId'])
-    response = _delete_volume_request()
-
-    return _delete_volume_response(response)
-
-
-def _delete_volume_request():
-    args = {'id': helpers.get('VolumeId'), 'command': 'deleteVolume'}
-
-    response = requester.make_request(args)
-    response = response['deletevolumeresponse']
-
-    return response
-
-
-def _delete_volume_response(response):
-    if 'errortext' in response:
-        helpers.error_to_aws(response, volume_error_to_aws)
-
-    return {
-        'template_name_or_list': 'status.xml',
-        'response_type': 'DeleteVolumeResponse',
-        'return': 'true'
-    }
diff --git a/tests/instances_tests.py b/tests/instances_tests.py
index 37ae3c9..5f0a837 100644
--- a/tests/instances_tests.py
+++ b/tests/instances_tests.py
@@ -11,6 +11,50 @@
 
 class InstancesTestCase(Ec2StackAppTestCase):
 
+    def test_describe_instance_attribute(self):
+        data = self.get_example_data()
+        data['Action'] = 'DescribeInstanceAttribute'
+        data['InstanceId'] = '43791f77-26f8-48ca-b557-3a9392f735ae'
+        data['Attribute'] = 'instanceType'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/valid_describe_instance.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_ok(response)
+        assert 'DescribeInstanceAttributeResponse' in response.data
+
+    def test_describe_invalid_instance_attribute(self):
+        data = self.get_example_data()
+        data['Action'] = 'DescribeInstanceAttribute'
+        data['InstanceId'] = '43791f77-26f8-48ca-b557-3a9392f735ae'
+        data['Attribute'] = 'invalid_attribute'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/valid_describe_instance.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_bad_request(response)
+        assert 'InvalidParameterValue' in response.data
+
     def test_describe_instances(self):
         data = self.get_example_data()
         data['Action'] = 'DescribeInstances'
@@ -31,7 +75,7 @@
         self.assert_ok(response)
         assert 'DescribeInstancesResponse' in response.data
 
-     def test_empty_response_describe_instances(self):
+    def test_empty_response_describe_instances(self):
         data = self.get_example_data()
         data['Action'] = 'DescribeInstances'
         data['Signature'] = generate_signature(data, 'POST', 'localhost')
@@ -115,16 +159,15 @@
         self.assert_bad_request(response)
         assert 'InvalidInstanceId.NotFound' in response.data
 
-    def test_describe_instance_attribute(self):
+    def test_reboot_instance(self):
         data = self.get_example_data()
-        data['Action'] = 'DescribeInstanceAttribute'
-        data['InstanceId'] = '43791f77-26f8-48ca-b557-3a9392f735ae'
-        data['Attribute'] = 'instanceType'
+        data['Action'] = 'RebootInstances'
+        data['InstanceId.1'] = '076166a1-9f6e-11e3-b8df-3c075456b21a'
         data['Signature'] = generate_signature(data, 'POST', 'localhost')
 
         get = mock.Mock()
         get.return_value.text = read_file(
-            'tests/data/valid_describe_instance.json'
+            'tests/data/valid_reboot_instance.json'
         )
         get.return_value.status_code = 200
 
@@ -135,29 +178,7 @@
             )
 
         self.assert_ok(response)
-        assert 'DescribeInstanceAttributeResponse' in response.data
-
-    def test_describe_invalid_instance_attribute(self):
-        data = self.get_example_data()
-        data['Action'] = 'DescribeInstanceAttribute'
-        data['InstanceId'] = '43791f77-26f8-48ca-b557-3a9392f735ae'
-        data['Attribute'] = 'invalid_attribute'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get = mock.Mock()
-        get.return_value.text = read_file(
-            'tests/data/valid_describe_instance.json'
-        )
-        get.return_value.status_code = 200
-
-        with mock.patch('requests.get', get):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_bad_request(response)
-        assert 'InvalidParameterValue' in response.data
+        assert 'RebootInstancesResponse' in response.data
 
     def test_start_instance(self):
         data = self.get_example_data()
@@ -249,26 +270,6 @@
         self.assert_ok(response)
         assert 'TerminateInstancesResponse' in response.data
 
-    def test_reboot_instance(self):
-        data = self.get_example_data()
-        data['Action'] = 'RebootInstances'
-        data['InstanceId.1'] = '076166a1-9f6e-11e3-b8df-3c075456b21a'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get = mock.Mock()
-        get.return_value.text = read_file(
-            'tests/data/valid_reboot_instance.json'
-        )
-        get.return_value.status_code = 200
-
-        with mock.patch('requests.get', get):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_ok(response)
-        assert 'RebootInstancesResponse' in response.data
 
 # TODO revist this at a later point
 #    def test_run_instance(self):
diff --git a/tests/security_group_tests.py b/tests/security_group_tests.py
index 0975af8..f2b0853 100644
--- a/tests/security_group_tests.py
+++ b/tests/security_group_tests.py
@@ -11,6 +11,180 @@
 
 class SecurityGroupTestCase(Ec2StackAppTestCase):
 
+    def test_authorize_security_group_ingress_by_name(self):
+        data = self.get_example_data()
+        data['Action'] = 'AuthorizeSecurityGroupIngress'
+        data['GroupName'] = 'test'
+        data['FromPort'] = '1000'
+        data['ToPort'] = '1024'
+        data['IpProtocol'] = 'tcp'
+        data['CidrIp'] = '0.0.0.0/0'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/authorize_security_group_ingress.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_ok(response)
+        assert 'AuthorizeSecurityGroupIngressResponse' in response.data
+
+    def test_authorize_security_group_ingress_by_id(self):
+        data = self.get_example_data()
+        data['Action'] = 'AuthorizeSecurityGroupIngress'
+        data['GroupId'] = '7ae5b92f-3a0d-4977-bc33-f1aaecee5776'
+        data['FromPort'] = '-1'
+        data['ToPort'] = '-1'
+        data['IpProtocol'] = 'icmp'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/authorize_security_group_ingress.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_ok(response)
+        assert 'AuthorizeSecurityGroupIngressResponse' in response.data
+
+    def test_authorize_security_group_egress_by_name(self):
+        data = self.get_example_data()
+        data['Action'] = 'AuthorizeSecurityGroupEgress'
+        data['GroupName'] = 'test'
+        data['FromPort'] = '1000'
+        data['ToPort'] = '1024'
+        data['IpProtocol'] = 'tcp'
+        data['CidrIp'] = '0.0.0.0/0'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/authorize_security_group_egress.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_ok(response)
+        assert 'AuthorizeSecurityGroupEgressResponse' in response.data
+
+    def test_authorize_security_group_egress_by_id(self):
+        data = self.get_example_data()
+        data['Action'] = 'AuthorizeSecurityGroupEgress'
+        data['GroupId'] = '7ae5b92f-3a0d-4977-bc33-f1aaecee5776'
+        data['FromPort'] = '-1'
+        data['ToPort'] = '-1'
+        data['IpProtocol'] = 'icmp'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/authorize_security_group_egress.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_ok(response)
+        assert 'AuthorizeSecurityGroupEgressResponse' in response.data
+
+    def test_duplicate_authorize_security_group(self):
+        data = self.get_example_data()
+        data['Action'] = 'AuthorizeSecurityGroupEgress'
+        data['GroupName'] = 'test'
+        data['FromPort'] = '1000'
+        data['ToPort'] = '1024'
+        data['IpProtocol'] = 'tcp'
+        data['CidrIp'] = '0.0.0.0/0'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/duplicate_authorize_security_group_egress.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_bad_request(response)
+        assert 'InvalidPermission.Duplicate' in response.data
+
+    def test_invalid_rule_authorize_security_group(self):
+        data = self.get_example_data()
+        data['Action'] = 'AuthorizeSecurityGroupEgress'
+        data['GroupName'] = 'test'
+        data['FromPort'] = '1000'
+        data['ToPort'] = '99999'
+        data['IpProtocol'] = 'tcp'
+        data['CidrIp'] = '0.0.0.0/24'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/invalid_authorize_security_group_egress.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_bad_request(response)
+        assert 'InvalidParameterValue' in response.data
+
+    def test_invalid_security_group_authorize_security_group(self):
+        data = self.get_example_data()
+        data['Action'] = 'AuthorizeSecurityGroupEgress'
+        data['GroupName'] = 'invalid-security-group'
+        data['FromPort'] = '1000'
+        data['ToPort'] = '1024'
+        data['IpProtocol'] = 'tcp'
+        data['CidrIp'] = '0.0.0.0/24'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/'
+            'invalid_security_group_authorize_security_group.json'
+        )
+        get.return_value.status_code = 431
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_bad_request(response)
+        assert 'InvalidGroup.NotFound' in response.data
+
     def test_create_security_group(self):
         data = self.get_example_data()
         data['Action'] = 'CreateSecurityGroup'
@@ -258,180 +432,6 @@
         self.assert_bad_request(response)
         assert 'InvalidGroup.NotFound' in response.data
 
-    def test_authorize_security_group_ingress_by_name(self):
-        data = self.get_example_data()
-        data['Action'] = 'AuthorizeSecurityGroupIngress'
-        data['GroupName'] = 'test'
-        data['FromPort'] = '1000'
-        data['ToPort'] = '1024'
-        data['IpProtocol'] = 'tcp'
-        data['CidrIp'] = '0.0.0.0/0'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get = mock.Mock()
-        get.return_value.text = read_file(
-            'tests/data/authorize_security_group_ingress.json'
-        )
-        get.return_value.status_code = 200
-
-        with mock.patch('requests.get', get):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_ok(response)
-        assert 'AuthorizeSecurityGroupIngressResponse' in response.data
-
-    def test_authorize_security_group_ingress_by_id(self):
-        data = self.get_example_data()
-        data['Action'] = 'AuthorizeSecurityGroupIngress'
-        data['GroupId'] = '7ae5b92f-3a0d-4977-bc33-f1aaecee5776'
-        data['FromPort'] = '-1'
-        data['ToPort'] = '-1'
-        data['IpProtocol'] = 'icmp'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get = mock.Mock()
-        get.return_value.text = read_file(
-            'tests/data/authorize_security_group_ingress.json'
-        )
-        get.return_value.status_code = 200
-
-        with mock.patch('requests.get', get):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_ok(response)
-        assert 'AuthorizeSecurityGroupIngressResponse' in response.data
-
-    def test_authorize_security_group_egress_by_name(self):
-        data = self.get_example_data()
-        data['Action'] = 'AuthorizeSecurityGroupEgress'
-        data['GroupName'] = 'test'
-        data['FromPort'] = '1000'
-        data['ToPort'] = '1024'
-        data['IpProtocol'] = 'tcp'
-        data['CidrIp'] = '0.0.0.0/0'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get = mock.Mock()
-        get.return_value.text = read_file(
-            'tests/data/authorize_security_group_egress.json'
-        )
-        get.return_value.status_code = 200
-
-        with mock.patch('requests.get', get):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_ok(response)
-        assert 'AuthorizeSecurityGroupEgressResponse' in response.data
-
-    def test_authorize_security_group_egress_by_id(self):
-        data = self.get_example_data()
-        data['Action'] = 'AuthorizeSecurityGroupEgress'
-        data['GroupId'] = '7ae5b92f-3a0d-4977-bc33-f1aaecee5776'
-        data['FromPort'] = '-1'
-        data['ToPort'] = '-1'
-        data['IpProtocol'] = 'icmp'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get = mock.Mock()
-        get.return_value.text = read_file(
-            'tests/data/authorize_security_group_egress.json'
-        )
-        get.return_value.status_code = 200
-
-        with mock.patch('requests.get', get):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_ok(response)
-        assert 'AuthorizeSecurityGroupEgressResponse' in response.data
-
-    def test_duplicate_authorize_security_group(self):
-        data = self.get_example_data()
-        data['Action'] = 'AuthorizeSecurityGroupEgress'
-        data['GroupName'] = 'test'
-        data['FromPort'] = '1000'
-        data['ToPort'] = '1024'
-        data['IpProtocol'] = 'tcp'
-        data['CidrIp'] = '0.0.0.0/0'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get = mock.Mock()
-        get.return_value.text = read_file(
-            'tests/data/duplicate_authorize_security_group_egress.json'
-        )
-        get.return_value.status_code = 200
-
-        with mock.patch('requests.get', get):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_bad_request(response)
-        assert 'InvalidPermission.Duplicate' in response.data
-
-    def test_invalid_rule_authorize_security_group(self):
-        data = self.get_example_data()
-        data['Action'] = 'AuthorizeSecurityGroupEgress'
-        data['GroupName'] = 'test'
-        data['FromPort'] = '1000'
-        data['ToPort'] = '99999'
-        data['IpProtocol'] = 'tcp'
-        data['CidrIp'] = '0.0.0.0/24'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get = mock.Mock()
-        get.return_value.text = read_file(
-            'tests/data/invalid_authorize_security_group_egress.json'
-        )
-        get.return_value.status_code = 200
-
-        with mock.patch('requests.get', get):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_bad_request(response)
-        assert 'InvalidParameterValue' in response.data
-
-    def test_invalid_security_group_authorize_security_group(self):
-        data = self.get_example_data()
-        data['Action'] = 'AuthorizeSecurityGroupEgress'
-        data['GroupName'] = 'invalid-security-group'
-        data['FromPort'] = '1000'
-        data['ToPort'] = '1024'
-        data['IpProtocol'] = 'tcp'
-        data['CidrIp'] = '0.0.0.0/24'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get = mock.Mock()
-        get.return_value.text = read_file(
-            'tests/data/'
-            'invalid_security_group_authorize_security_group.json'
-        )
-        get.return_value.status_code = 431
-
-        with mock.patch('requests.get', get):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_bad_request(response)
-        assert 'InvalidGroup.NotFound' in response.data
-
     def test_revoke_security_group_ingress(self):
         data = self.get_example_data()
         data['Action'] = 'RevokeSecurityGroupIngress'
diff --git a/tests/volume_tests.py b/tests/volume_tests.py
index c94da94..ebd77c0 100644
--- a/tests/volume_tests.py
+++ b/tests/volume_tests.py
@@ -11,14 +11,17 @@
 
 class VolumeTestCase(Ec2StackAppTestCase):
 
-    def test_describe_volumes(self):
+    def test_attach_volume(self):
         data = self.get_example_data()
-        data['Action'] = 'DescribeVolumes'
+        data['Action'] = 'AttachVolume'
+        data['VolumeId'] = '0896ccff-1b7a-4c17-8390-02a602de2efe'
+        data['InstanceId'] = 'ba918d10-f83a-459d-a5b9-330793c3c6a3'
+        data['Device'] = '/dev/sha'
         data['Signature'] = generate_signature(data, 'POST', 'localhost')
 
         get = mock.Mock()
         get.return_value.text = read_file(
-            'tests/data/valid_describe_key_pairs.json'
+            'tests/data/valid_attach_volume.json'
         )
         get.return_value.status_code = 200
 
@@ -29,39 +32,19 @@
             )
 
         self.assert_ok(response)
-        assert 'DescribeVolumesResponse' in response.data
+        assert 'AttachVolumeResponse' in response.data
 
-    def test_describe_volume_by_id(self):
+    def test_attach_volume_invalid_volume(self):
         data = self.get_example_data()
-        data['Action'] = 'DescribeVolumes'
-        data['VolumeId.1'] = 'de2d8297-eaaf-4e81-8ffe-97f37ddbbde5'
+        data['Action'] = 'AttachVolume'
+        data['VolumeId'] = '0896ccff-1b7a-4c17-8390-02a602de2efe'
+        data['InstanceId'] = 'ba918d10-f83a-459d-a5b9-330793c3c6a3'
+        data['Device'] = '/dev/sha'
         data['Signature'] = generate_signature(data, 'POST', 'localhost')
 
         get = mock.Mock()
         get.return_value.text = read_file(
-            'tests/data/valid_describe_volumes.json'
-        )
-        get.return_value.status_code = 200
-
-        with mock.patch('requests.get', get):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_ok(response)
-        assert 'DescribeVolumesResponse' in response.data
-        assert 'de2d8297-eaaf-4e81-8ffe-97f37ddbbde5' in response.data
-
-    def test_invalid_describe_volume_by_id(self):
-        data = self.get_example_data()
-        data['Action'] = 'DescribeVolumes'
-        data['VolumeId.1'] = 'invalid-volume-id'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get = mock.Mock()
-        get.return_value.text = read_file(
-            'tests/data/valid_describe_volumes.json'
+            'tests/data/invalid_attach_volume.json'
         )
         get.return_value.status_code = 200
 
@@ -72,28 +55,7 @@
             )
 
         self.assert_bad_request(response)
-        assert 'InvalidVolume.NotFound' in response.data
-
-    def test_empty_response_describe_volume_by_id(self):
-        data = self.get_example_data()
-        data['Action'] = 'DescribeVolumes'
-        data['VolumeId.1'] = 'invalid-volume-id'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get = mock.Mock()
-        get.return_value.text = read_file(
-            'tests/data/empty_describe_volumes.json'
-        )
-        get.return_value.status_code = 200
-
-        with mock.patch('requests.get', get):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_bad_request(response)
-        assert 'InvalidVolume.NotFound' in response.data
+        assert 'InvalidVolume.Attached' in response.data
 
     def test_create_volume_by_size(self):
         data = self.get_example_data()
@@ -241,17 +203,56 @@
         self.assert_bad_request(response)
         assert 'InvalidDiskOffering.NotFound' in response.data
 
-    def test_attach_volume(self):
+    def test_delete_volume(self):
         data = self.get_example_data()
-        data['Action'] = 'AttachVolume'
-        data['VolumeId'] = '0896ccff-1b7a-4c17-8390-02a602de2efe'
-        data['InstanceId'] = 'ba918d10-f83a-459d-a5b9-330793c3c6a3'
-        data['Device'] = '/dev/sha'
+        data['Action'] = 'DeleteVolume'
+        data['VolumeId'] = 'volumeid'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get_request = mock.Mock()
+        get_request.return_value.text = read_file(
+            'tests/data/delete_volume_response.json'
+        )
+        get_request.return_value.status_code = 200
+
+        with mock.patch('requests.get', get_request):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_ok(response)
+        assert 'DeleteVolumeResponse' in response.data
+
+    def test_delete_volume_invalid_volume_id(self):
+        data = self.get_example_data()
+        data['Action'] = 'DeleteVolume'
+        data['VolumeId'] = 'volumeid'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get_request = mock.Mock()
+        get_request.return_value.text = read_file(
+            'tests/data/invalid_volume_id.json'
+        )
+        get_request.return_value.status_code = 200
+
+        with mock.patch('requests.get', get_request):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_bad_request(response)
+        assert 'InvalidVolume.NotFound' in response.data
+
+    def test_describe_volumes(self):
+        data = self.get_example_data()
+        data['Action'] = 'DescribeVolumes'
         data['Signature'] = generate_signature(data, 'POST', 'localhost')
 
         get = mock.Mock()
         get.return_value.text = read_file(
-            'tests/data/valid_attach_volume.json'
+            'tests/data/valid_describe_key_pairs.json'
         )
         get.return_value.status_code = 200
 
@@ -262,19 +263,39 @@
             )
 
         self.assert_ok(response)
-        assert 'AttachVolumeResponse' in response.data
+        assert 'DescribeVolumesResponse' in response.data
 
-    def test_attach_volume_invalid_volume(self):
+    def test_describe_volume_by_id(self):
         data = self.get_example_data()
-        data['Action'] = 'AttachVolume'
-        data['VolumeId'] = '0896ccff-1b7a-4c17-8390-02a602de2efe'
-        data['InstanceId'] = 'ba918d10-f83a-459d-a5b9-330793c3c6a3'
-        data['Device'] = '/dev/sha'
+        data['Action'] = 'DescribeVolumes'
+        data['VolumeId.1'] = 'de2d8297-eaaf-4e81-8ffe-97f37ddbbde5'
         data['Signature'] = generate_signature(data, 'POST', 'localhost')
 
         get = mock.Mock()
         get.return_value.text = read_file(
-            'tests/data/invalid_attach_volume.json'
+            'tests/data/valid_describe_volumes.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_ok(response)
+        assert 'DescribeVolumesResponse' in response.data
+        assert 'de2d8297-eaaf-4e81-8ffe-97f37ddbbde5' in response.data
+
+    def test_invalid_describe_volume_by_id(self):
+        data = self.get_example_data()
+        data['Action'] = 'DescribeVolumes'
+        data['VolumeId.1'] = 'invalid-volume-id'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/valid_describe_volumes.json'
         )
         get.return_value.status_code = 200
 
@@ -285,7 +306,28 @@
             )
 
         self.assert_bad_request(response)
-        assert 'InvalidVolume.Attached' in response.data
+        assert 'InvalidVolume.NotFound' in response.data
+
+    def test_empty_response_describe_volume_by_id(self):
+        data = self.get_example_data()
+        data['Action'] = 'DescribeVolumes'
+        data['VolumeId.1'] = 'invalid-volume-id'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/empty_describe_volumes.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_bad_request(response)
+        assert 'InvalidVolume.NotFound' in response.data
 
     def test_detach_volume(self):
         data = self.get_example_data()
@@ -372,45 +414,3 @@
 
         self.assert_bad_request(response)
         assert 'InvalidVolume.Detached' in response.data
-
-    def test_delete_volume(self):
-        data = self.get_example_data()
-        data['Action'] = 'DeleteVolume'
-        data['VolumeId'] = 'volumeid'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get_request = mock.Mock()
-        get_request.return_value.text = read_file(
-            'tests/data/delete_volume_response.json'
-        )
-        get_request.return_value.status_code = 200
-
-        with mock.patch('requests.get', get_request):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_ok(response)
-        assert 'DeleteVolumeResponse' in response.data
-
-    def test_delete_volume_invalid_volume_id(self):
-        data = self.get_example_data()
-        data['Action'] = 'DeleteVolume'
-        data['VolumeId'] = 'volumeid'
-        data['Signature'] = generate_signature(data, 'POST', 'localhost')
-
-        get_request = mock.Mock()
-        get_request.return_value.text = read_file(
-            'tests/data/invalid_volume_id.json'
-        )
-        get_request.return_value.status_code = 200
-
-        with mock.patch('requests.get', get_request):
-            response = self.post(
-                '/',
-                data=data
-            )
-
-        self.assert_bad_request(response)
-        assert 'InvalidVolume.NotFound' in response.data