add some zone unit tests
diff --git a/tests/data/empty_describe_zone.json b/tests/data/empty_describe_zone.json
new file mode 100644
index 0000000..c575b3d
--- /dev/null
+++ b/tests/data/empty_describe_zone.json
@@ -0,0 +1,5 @@
+{
+    "listzonesresponse": {
+        "zone": {}
+    }
+}
diff --git a/tests/data/valid_describe_zone.json b/tests/data/valid_describe_zone.json
new file mode 100644
index 0000000..5a4cf60
--- /dev/null
+++ b/tests/data/valid_describe_zone.json
@@ -0,0 +1,17 @@
+{
+    "listzonesresponse": {
+        "count": 1,
+        "zone": [
+            {
+                "localstorageenabled": true,
+                "name": "CH-GV2",
+                "zonetoken": "ccb0a60c-79c8-3230-ab8b-8bdbe8c45bb7",
+                "securitygroupsenabled": true,
+                "allocationstate": "Enabled",
+                "dhcpprovider": "VirtualRouter",
+                "networktype": "Basic",
+                "id": "1128bd56-b4d9-4ac6-a7b9-c715b187ce11"
+            }
+        ]
+    }
+}
diff --git a/tests/instances_tests.py b/tests/instances_tests.py
index a05d289..127b26e 100644
--- a/tests/instances_tests.py
+++ b/tests/instances_tests.py
@@ -59,7 +59,7 @@
 
         get = mock.Mock()
         get.return_value.text = read_file(
-            'tests/data/valid_describe_instance_attribute.json'
+            'tests/data/valid_describe_instances.json'
         )
         get.return_value.status_code = 200
 
diff --git a/tests/zones_tests.py b/tests/zones_tests.py
new file mode 100644
index 0000000..f32e8df
--- /dev/null
+++ b/tests/zones_tests.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+import mock
+
+from ec2stack.helpers import read_file, generate_signature
+from . import Ec2StackAppTestCase
+
+
+class ZonesTestCase(Ec2StackAppTestCase):
+
+    def test_describe_zone(self):
+        data = self.get_example_data()
+        data['Action'] = 'DescribeAvailabilityZones'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/valid_describe_key_pairs.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_ok(response)
+        assert 'DescribeAvailabilityZonesResponse' in response.data
+
+    def test_describe_instance_by_name(self):
+        data = self.get_example_data()
+        data['Action'] = 'DescribeAvailabilityZones'
+        data['ZoneName.1'] = 'CH-GV2'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/valid_describe_zone.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_ok(response)
+        assert 'DescribeAvailabilityZonesResponse' in response.data
+        assert 'CH-GV2' in response.data
+
+    def test_invalid_describe_instance_by_name(self):
+        data = self.get_example_data()
+        data['Action'] = 'DescribeAvailabilityZones'
+        data['ZoneName.1'] = 'invalid-zone-name'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/valid_describe_zone.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_bad_request(response)
+        assert 'InvalidZone.NotFound' in response.data
+
+    def test_empty_response_describe_zone_by_name(self):
+        data = self.get_example_data()
+        data['Action'] = 'DescribeAvailabilityZones'
+        data['ZoneName.1'] = 'invalid-zone-name'
+        data['Signature'] = generate_signature(data, 'POST', 'localhost')
+
+        get = mock.Mock()
+        get.return_value.text = read_file(
+            'tests/data/empty_describe_zone.json'
+        )
+        get.return_value.status_code = 200
+
+        with mock.patch('requests.get', get):
+            response = self.post(
+                '/',
+                data=data
+            )
+
+        self.assert_bad_request(response)
+        assert 'InvalidZone.NotFound' in response.data