Merge branch 'do-dns-query-params' of https://github.com/andrewsomething/libcloud into andrewsomething-do-dns-query-params
diff --git a/libcloud/dns/drivers/digitalocean.py b/libcloud/dns/drivers/digitalocean.py
index ef24b94..e393b05 100644
--- a/libcloud/dns/drivers/digitalocean.py
+++ b/libcloud/dns/drivers/digitalocean.py
@@ -20,6 +20,8 @@
     'DigitalOceanDNSDriver'
 ]
 
+import json
+
 from libcloud.utils.py3 import httplib
 
 from libcloud.common.digitalocean import DigitalOcean_v2_BaseDriver
@@ -128,7 +130,7 @@
         except Exception:
             params['ip_address'] = '127.0.0.1'
 
-        res = self.connection.request('/v2/domains', params=params,
+        res = self.connection.request('/v2/domains', data=json.dumps(params),
                                       method='POST')
 
         return Zone(id=res.object['domain']['name'],
@@ -183,7 +185,7 @@
                 params['ttl'] = extra['ttl']
 
         res = self.connection.request('/v2/domains/%s/records' % zone.id,
-                                      params=params,
+                                      data=json.dumps(params),
                                       method='POST')
 
         return Record(id=res.object['domain_record']['id'],
@@ -243,7 +245,7 @@
 
         res = self.connection.request('/v2/domains/%s/records/%s' %
                                       (record.zone.id, record.id),
-                                      params=params,
+                                      data=json.dumps(params),
                                       method='PUT')
 
         return Record(id=res.object['domain_record']['id'],
diff --git a/libcloud/test/dns/fixtures/digitalocean/_v2_domains_UNPROCESSABLE_ENTITY.json b/libcloud/test/dns/fixtures/digitalocean/_v2_domains_UNPROCESSABLE_ENTITY.json
new file mode 100644
index 0000000..102aa9d
--- /dev/null
+++ b/libcloud/test/dns/fixtures/digitalocean/_v2_domains_UNPROCESSABLE_ENTITY.json
@@ -0,0 +1 @@
+{"id":"unprocessable_entity","message":"Request body malformed."}
diff --git a/libcloud/test/dns/test_digitalocean.py b/libcloud/test/dns/test_digitalocean.py
index 453e9c3..7e2c54e 100644
--- a/libcloud/test/dns/test_digitalocean.py
+++ b/libcloud/test/dns/test_digitalocean.py
@@ -110,7 +110,8 @@
         'EMPTY': httplib.OK,
         'NOT_FOUND': httplib.NOT_FOUND,
         'UNAUTHORIZED': httplib.UNAUTHORIZED,
-        'UPDATE': httplib.OK
+        'UPDATE': httplib.OK,
+        'UNPROCESSABLE': httplib.UNPROCESSABLE_ENTITY,
     }
 
     def _v2_domains(self, method, url, body, headers):
@@ -119,6 +120,10 @@
                 httplib.responses[self.response_map[self.type]])
 
     def _v2_domains_CREATE(self, method, url, body, headers):
+        if body is None:
+            body = self.fixtures.load('_v2_domains_UNPROCESSABLE_ENTITY.json')
+            return (self.response_map[self.type], body, {},
+                    httplib.responses[self.response_map['UNPROCESSABLE']])
         body = self.fixtures.load('_v2_domains_CREATE.json')
         return (self.response_map[self.type], body, {},
                 httplib.responses[self.response_map[self.type]])
@@ -144,6 +149,10 @@
 
     def _v2_domains_testdomain_records_CREATE(self, method, url,
                                               body, headers):
+        if body is None:
+            body = self.fixtures.load('_v2_domains_UNPROCESSABLE_ENTITY.json')
+            return (self.response_map[self.type], body, {},
+                    httplib.responses[self.response_map['UNPROCESSABLE']])
         body = self.fixtures.load('_v2_domains_testdomain_records_CREATE.json')
         return (self.response_map[self.type], body, {},
                 httplib.responses[self.response_map[self.type]])
@@ -163,6 +172,10 @@
 
     def _v2_domains_testdomain_records_1234564_UPDATE(
             self, method, url, body, headers):
+        if body is None:
+            body = self.fixtures.load('_v2_domains_UNPROCESSABLE_ENTITY.json')
+            return (self.response_map[self.type], body, {},
+                    httplib.responses[self.response_map['UNPROCESSABLE']])
         body = self.fixtures.load(
             '_v2_domains_testdomain_records_1234564_UPDATE.json')
         return (self.response_map[self.type], body, {},