You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2014/02/27 15:20:19 UTC
git commit: Improve error parsing in the DigitalOcean driver.
Repository: libcloud
Updated Branches:
refs/heads/trunk d10676afa -> 047dd064d
Improve error parsing in the DigitalOcean driver.
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/047dd064
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/047dd064
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/047dd064
Branch: refs/heads/trunk
Commit: 047dd064db66a57f4273293b1e5109f2a49e8d36
Parents: d10676a
Author: Tomaz Muraus <to...@apache.org>
Authored: Thu Feb 27 15:10:42 2014 +0100
Committer: Tomaz Muraus <to...@apache.org>
Committed: Thu Feb 27 15:14:31 2014 +0100
----------------------------------------------------------------------
CHANGES.rst | 5 +++++
docs/development.rst | 3 +++
libcloud/compute/drivers/digitalocean.py | 8 +++++++
.../digitalocean/error_invalid_image.json | 1 +
libcloud/test/compute/test_digitalocean.py | 22 ++++++++++++++++++--
5 files changed, 37 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/047dd064/CHANGES.rst
----------------------------------------------------------------------
diff --git a/CHANGES.rst b/CHANGES.rst
index b24c39c..74ea79e 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -34,6 +34,11 @@ Compute
(GITHUB-252)
[Rahul Ranjan]
+- Improve error parsing in the DigitalOcean driver.
+
+ Reported by Deni Bertovic.
+ [Tomaz Muraus]
+
Changes with Apache Libcloud 0.14.1
-----------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/047dd064/docs/development.rst
----------------------------------------------------------------------
diff --git a/docs/development.rst b/docs/development.rst
index 5d9b673..b3ef500 100644
--- a/docs/development.rst
+++ b/docs/development.rst
@@ -14,6 +14,9 @@ If you need help or get stuck at any point during this process, stop by on our
IRC channel (:ref:`#libcloud on freenode <irc>`) and we will do our best to
assist you.
+Getting started with contributing to Libcloud
+---------------------------------------------
+
General contribution guidelines
-------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/047dd064/libcloud/compute/drivers/digitalocean.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/digitalocean.py b/libcloud/compute/drivers/digitalocean.py
index 962862c..7dbed41 100644
--- a/libcloud/compute/drivers/digitalocean.py
+++ b/libcloud/compute/drivers/digitalocean.py
@@ -32,6 +32,14 @@ class DigitalOceanResponse(JsonResponse):
elif self.status == httplib.UNAUTHORIZED:
body = self.parse_body()
raise InvalidCredsError(body['message'])
+ else:
+ body = self.parse_body()
+
+ if 'error_message' in body:
+ error = '%s (code: %s)' % (body['error_message'], self.status)
+ else:
+ error = body
+ return error
class SSHKey(object):
http://git-wip-us.apache.org/repos/asf/libcloud/blob/047dd064/libcloud/test/compute/fixtures/digitalocean/error_invalid_image.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/digitalocean/error_invalid_image.json b/libcloud/test/compute/fixtures/digitalocean/error_invalid_image.json
new file mode 100644
index 0000000..e1ccb4f
--- /dev/null
+++ b/libcloud/test/compute/fixtures/digitalocean/error_invalid_image.json
@@ -0,0 +1 @@
+{"status":"ERROR","error_message":"You specified an invalid image for Droplet creation.","message":"You specified an invalid image for Droplet creation."}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/047dd064/libcloud/test/compute/test_digitalocean.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_digitalocean.py b/libcloud/test/compute/test_digitalocean.py
index 400b605..ee9ef55 100644
--- a/libcloud/test/compute/test_digitalocean.py
+++ b/libcloud/test/compute/test_digitalocean.py
@@ -23,15 +23,16 @@ except ImportError:
from libcloud.utils.py3 import httplib
from libcloud.common.types import InvalidCredsError
+from libcloud.compute.base import NodeImage
from libcloud.compute.drivers.digitalocean import DigitalOceanNodeDriver
-from libcloud.test import MockHttpTestCase
+from libcloud.test import LibcloudTestCase, MockHttpTestCase
from libcloud.test.file_fixtures import ComputeFileFixtures
from libcloud.test.secrets import DIGITAL_OCEAN_PARAMS
# class DigitalOceanTests(unittest.TestCase, TestCaseMixin):
-class DigitalOceanTests(unittest.TestCase):
+class DigitalOceanTests(LibcloudTestCase):
def setUp(self):
DigitalOceanNodeDriver.connectionCls.conn_classes = \
@@ -79,6 +80,18 @@ class DigitalOceanTests(unittest.TestCase):
self.assertEqual(nodes[0].name, 'test-2')
self.assertEqual(nodes[0].public_ips, [])
+ def test_create_node_invalid_size(self):
+ image = NodeImage(id='invalid', name=None, driver=self.driver)
+ size = self.driver.list_sizes()[0]
+ location = self.driver.list_locations()[0]
+
+ DigitalOceanMockHttp.type = 'INVALID_IMAGE'
+ expected_msg = r'You specified an invalid image for Droplet creation. \(code: 404\)'
+ self.assertRaisesRegexp(Exception, expected_msg,
+ self.driver.create_node,
+ name='test', size=size, image=image,
+ location=location)
+
def test_reboot_node_success(self):
node = self.driver.list_nodes()[0]
result = self.driver.reboot_node(node)
@@ -127,6 +140,11 @@ class DigitalOceanMockHttp(MockHttpTestCase):
body = self.fixtures.load('list_nodes.json')
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+ def _droplets_new_INVALID_IMAGE(self, method, url, body, headers):
+ # reboot_node
+ body = self.fixtures.load('error_invalid_image.json')
+ return (httplib.NOT_FOUND, body, {}, httplib.responses[httplib.NOT_FOUND])
+
def _droplets_119461_reboot(self, method, url, body, headers):
# reboot_node
body = self.fixtures.load('reboot_node.json')