You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by an...@apache.org on 2016/04/05 13:17:19 UTC

[28/33] libcloud git commit: Fix response class tests, fix route53 missing file. Added requests_mock as a testing dependency.

Fix response class tests, fix route53 missing file. Added requests_mock as a testing dependency.


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/6b9f90c5
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/6b9f90c5
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/6b9f90c5

Branch: refs/heads/requests
Commit: 6b9f90c59faae02cfcd92d41c412291377a9331e
Parents: 3a492b8
Author: anthony-shaw <an...@gmail.com>
Authored: Tue Apr 5 17:45:01 2016 +1000
Committer: anthony-shaw <an...@gmail.com>
Committed: Tue Apr 5 17:45:01 2016 +1000

----------------------------------------------------------------------
 libcloud/common/base.py                         |   7 +-
 .../fixtures/route53/record_does_not_exist.xml  |  17 +++
 libcloud/test/test_response_classes.py          | 144 ++++++-------------
 requirements-tests.txt                          |   3 +-
 setup.py                                        |   3 +-
 5 files changed, 70 insertions(+), 104 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/6b9f90c5/libcloud/common/base.py
----------------------------------------------------------------------
diff --git a/libcloud/common/base.py b/libcloud/common/base.py
index 67d66b1..60cfb04 100644
--- a/libcloud/common/base.py
+++ b/libcloud/common/base.py
@@ -148,11 +148,11 @@ class Response(object):
 
         # http.client In Python 3 doesn't automatically lowercase the header
         # names
-        self.headers = lowercase_keys(dict(response.getheaders()))
+        self.headers = lowercase_keys(dict(response.headers))
         self.error = response.reason
         self.status = response.status_code
 
-        self.body = response.text if response.text is not None else ''
+        self.body = response.text.strip() if response.text is not None else ''
 
         if not self.success():
             raise exception_from_message(code=self.status,
@@ -226,8 +226,7 @@ class JsonResponse(Response):
     """
 
     def parse_body(self):
-        if self.body is not None and \
-        len(self.body) == 0 and not self.parse_zero_length_body:
+        if len(self.body) == 0 and not self.parse_zero_length_body:
             return self.body
 
         try:

http://git-wip-us.apache.org/repos/asf/libcloud/blob/6b9f90c5/libcloud/test/dns/fixtures/route53/record_does_not_exist.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/dns/fixtures/route53/record_does_not_exist.xml b/libcloud/test/dns/fixtures/route53/record_does_not_exist.xml
new file mode 100644
index 0000000..6a767d1
--- /dev/null
+++ b/libcloud/test/dns/fixtures/route53/record_does_not_exist.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ListResourceRecordSetsResponse xmlns="https://route53.amazonaws.com/doc/2012-02-29/">
+   <ResourceRecordSets>
+
+      <ResourceRecordSet>
+         <Name>definitely.not.what.you.askedfor.t.com</Name>
+         <Type>CNAME</Type>
+         <TTL>86400</TTL>
+         <ResourceRecords>
+            <ResourceRecord>
+               <Value>t.com</Value>
+            </ResourceRecord>
+         </ResourceRecords>
+      </ResourceRecordSet>
+
+  </ResourceRecordSets>
+</ListResourceRecordSetsResponse>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/6b9f90c5/libcloud/test/test_response_classes.py
----------------------------------------------------------------------
diff --git a/libcloud/test/test_response_classes.py b/libcloud/test/test_response_classes.py
index 0bdd06a..37d2386 100644
--- a/libcloud/test/test_response_classes.py
+++ b/libcloud/test/test_response_classes.py
@@ -15,137 +15,85 @@
 
 import sys
 import unittest
-import zlib
-import gzip
 
-from mock import Mock
+import requests
+import requests_mock
 
-from libcloud.utils.py3 import httplib, b, StringIO, PY3
-from libcloud.common.base import Response, XmlResponse, JsonResponse
+from libcloud.common.base import XmlResponse, JsonResponse
 from libcloud.common.types import MalformedResponseError
+from libcloud.httplib_ssl import LibcloudConnection
 
 
 class ResponseClassesTests(unittest.TestCase):
     def setUp(self):
-        self._mock_response = Mock()
-        self._mock_response.getheaders.return_value = []
-        self._mock_response.status = httplib.OK
-        self._mock_response._original_data = None
-        self._mock_connection = Mock()
+        self.mock_connection = LibcloudConnection(host='mock.com', port=80)
+        self.mock_connection.driver = None
 
     def test_XmlResponse_class(self):
-        self._mock_response.text = '<foo>bar</foo>'
-        response = XmlResponse(response=self._mock_response,
-                               connection=self._mock_connection)
+        with requests_mock.mock() as m:
+            m.register_uri('GET', 'mock://test.com/2', text='<foo>bar</foo>')
+            response_obj = requests.get('mock://test.com/2')
+            response = XmlResponse(response=response_obj,
+                                   connection=self.mock_connection)
 
         parsed = response.parse_body()
         self.assertEqual(parsed.tag, 'foo')
         self.assertEqual(parsed.text, 'bar')
 
     def test_XmlResponse_class_malformed_response(self):
-        self._mock_response.text = '<foo>'
-
-        try:
-            XmlResponse(response=self._mock_response,
-                        connection=self._mock_connection)
-        except MalformedResponseError:
-            pass
-        else:
-            self.fail('Exception was not thrown')
+        with requests_mock.mock() as m:
+            m.register_uri('GET', 'mock://test.com/', text='<foo>')
+            response_obj = requests.get('mock://test.com/')
+            try:
+                XmlResponse(response=response_obj,
+                            connection=self.mock_connection)
+            except MalformedResponseError:
+                pass
+            else:
+                self.fail('Exception was not thrown')
 
     def test_XmlResponse_class_zero_length_body_strip(self):
-        self._mock_response.text = ' '
-
-        response = XmlResponse(response=self._mock_response,
-                               connection=self._mock_connection)
+        with requests_mock.mock() as m:
+            m.register_uri('GET', 'mock://test.com/', text=' ')
+            response_obj = requests.get('mock://test.com/')
+            response = XmlResponse(response=response_obj,
+                                   connection=self.mock_connection)
 
         parsed = response.parse_body()
         self.assertEqual(parsed, '')
 
     def test_JsonResponse_class_success(self):
-        self._mock_response.read.return_value = '{"foo": "bar"}'
-        response = JsonResponse(response=self._mock_response,
-                                connection=self._mock_connection)
+        with requests_mock.mock() as m:
+            m.register_uri('GET', 'mock://test.com/', text='{"foo": "bar"}')
+            response_obj = requests.get('mock://test.com/')
+            response = JsonResponse(response=response_obj,
+                                    connection=self.mock_connection)
 
         parsed = response.parse_body()
         self.assertEqual(parsed, {'foo': 'bar'})
 
     def test_JsonResponse_class_malformed_response(self):
-        self._mock_response.text = '{"foo": "bar'
-
-        try:
-            JsonResponse(response=self._mock_response,
-                         connection=self._mock_connection)
-        except MalformedResponseError:
-            pass
-        else:
-            self.fail('Exception was not thrown')
+        with requests_mock.mock() as m:
+            m.register_uri('GET', 'mock://test.com/', text='{"foo": "bar"')
+            response_obj = requests.get('mock://test.com/')
+            try:
+                JsonResponse(response=response_obj,
+                             connection=self.mock_connection)
+            except MalformedResponseError:
+                pass
+            else:
+                self.fail('Exception was not thrown')
 
     def test_JsonResponse_class_zero_length_body_strip(self):
-        self._mock_response.text = ' '
-
-        response = JsonResponse(response=self._mock_response,
-                                connection=self._mock_connection)
+        with requests_mock.mock() as m:
+            m.register_uri('GET', 'mock://test.com/', text=' ')
+            response_obj = requests.get('mock://test.com/')
+            response = JsonResponse(response=response_obj,
+                                    connection=self.mock_connection)
 
         parsed = response.parse_body()
         self.assertEqual(parsed, '')
 
-    def test_deflate_encoding(self):
-        original_data = 'foo bar ponies, wooo zlib'
-        compressed_data = zlib.compress(b(original_data))
-
-        self._mock_response.text = compressed_data
-        self._mock_response.getheaders.return_value = \
-            {'Content-Encoding': 'deflate'}
-
-        response = Response(response=self._mock_response,
-                            connection=self._mock_connection)
-
-        body = response.parse_body()
-        self.assertEqual(body, original_data)
-
-        self._mock_response.getheaders.return_value = \
-            {'Content-Encoding': 'zlib'}
-
-        response = Response(response=self._mock_response,
-                            connection=self._mock_connection)
-
-        body = response.parse_body()
-        self.assertEqual(body, original_data)
-
-    def test_gzip_encoding(self):
-        original_data = 'foo bar ponies, wooo gzip'
-
-        if PY3:
-            from io import BytesIO
-            string_io = BytesIO()
-        else:
-            string_io = StringIO()
-
-        stream = gzip.GzipFile(fileobj=string_io, mode='w')
-        stream.write(b(original_data))
-        stream.close()
-        compressed_data = string_io.getvalue()
-
-        self._mock_response.text = compressed_data
-        self._mock_response.getheaders.return_value = \
-            {'Content-Encoding': 'gzip'}
-
-        response = Response(response=self._mock_response,
-                            connection=self._mock_connection)
-
-        body = response.parse_body()
-        self.assertEqual(body, original_data)
-
-        self._mock_response.getheaders.return_value = \
-            {'Content-Encoding': 'x-gzip'}
-
-        response = Response(response=self._mock_response,
-                            connection=self._mock_connection)
-
-        body = response.parse_body()
-        self.assertEqual(body, original_data)
-
 
 if __name__ == '__main__':
     sys.exit(unittest.main())

http://git-wip-us.apache.org/repos/asf/libcloud/blob/6b9f90c5/requirements-tests.txt
----------------------------------------------------------------------
diff --git a/requirements-tests.txt b/requirements-tests.txt
index 3a40ef0..22317b2 100644
--- a/requirements-tests.txt
+++ b/requirements-tests.txt
@@ -1,4 +1,5 @@
 pep8>=1.7.0,<1.8
 flake8>=2.5.1,<2.6
 mock>=1.0.1,<1.1
-requests
\ No newline at end of file
+requests
+requests_mock
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/6b9f90c5/setup.py
----------------------------------------------------------------------
diff --git a/setup.py b/setup.py
index dc1589f..351fcb9 100644
--- a/setup.py
+++ b/setup.py
@@ -60,7 +60,8 @@ SUPPORTED_VERSIONS = ['2.5', '2.6', '2.7', 'PyPy', '3.x']
 
 TEST_REQUIREMENTS = [
     'mock',
-    'requests'
+    'requests',
+    'requests-mock'
 ]
 
 if PY2_pre_279 or PY3_pre_32: