Repository: libcloud
Updated Branches:
  refs/heads/trunk 74a2ce762 -> 20c924bf1


Add tests for storage-related operations on 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/e450d9ee
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/e450d9ee
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/e450d9ee

Branch: refs/heads/trunk
Commit: e450d9eeb6bcc713dc61a1e02033637978764b02
Parents: a796810
Author: Adam Wolfe Gordon <a...@digitalocean.com>
Authored: Mon Jun 6 17:26:04 2016 -0400
Committer: Anthony Shaw <anthonys...@apache.org>
Committed: Fri Jun 24 14:15:16 2016 +1000

----------------------------------------------------------------------
 .../fixtures/digitalocean_v2/attach_volume.json | 34 ++++++++++
 .../fixtures/digitalocean_v2/create_volume.json | 32 +++++++++
 .../fixtures/digitalocean_v2/detach_volume.json | 34 ++++++++++
 .../fixtures/digitalocean_v2/list_volumes.json  | 38 +++++++++++
 .../digitalocean_v2/list_volumes_empty.json     |  7 ++
 libcloud/test/compute/test_digitalocean_v2.py   | 69 ++++++++++++++++++++
 6 files changed, 214 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/e450d9ee/libcloud/test/compute/fixtures/digitalocean_v2/attach_volume.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/digitalocean_v2/attach_volume.json 
b/libcloud/test/compute/fixtures/digitalocean_v2/attach_volume.json
new file mode 100644
index 0000000..398bca0
--- /dev/null
+++ b/libcloud/test/compute/fixtures/digitalocean_v2/attach_volume.json
@@ -0,0 +1,34 @@
+{
+  "action": {
+    "region_slug": "nyc1",
+    "region": {
+      "available": true,
+      "features": [
+        "private_networking",
+        "backups",
+        "ipv6",
+        "metadata"
+      ],
+      "sizes": [
+        "512mb",
+        "1gb",
+        "2gb",
+        "4gb",
+        "8gb",
+        "16gb",
+        "32gb",
+        "48gb",
+        "64gb"
+      ],
+      "slug": "nyc1",
+      "name": "New York 1"
+    },
+    "resource_type": "backend",
+    "resource_id": null,
+    "completed_at": null,
+    "started_at": "2016-06-06T21:01:30Z",
+    "type": "attach_volume",
+    "status": "in-progress",
+    "id": 110956293
+  }
+}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/e450d9ee/libcloud/test/compute/fixtures/digitalocean_v2/create_volume.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/digitalocean_v2/create_volume.json 
b/libcloud/test/compute/fixtures/digitalocean_v2/create_volume.json
new file mode 100644
index 0000000..dd336aa
--- /dev/null
+++ b/libcloud/test/compute/fixtures/digitalocean_v2/create_volume.json
@@ -0,0 +1,32 @@
+{
+  "volume": {
+    "created_at": "2016-06-06T20:51:04Z",
+    "size_gigabytes": 4,
+    "description": "Block store for examples",
+    "name": "example",
+    "droplet_ids": [],
+    "region": {
+      "available": true,
+      "features": [
+        "private_networking",
+        "backups",
+        "ipv6",
+        "metadata"
+      ],
+      "sizes": [
+        "512mb",
+        "1gb",
+        "2gb",
+        "4gb",
+        "8gb",
+        "16gb",
+        "32gb",
+        "48gb",
+        "64gb"
+      ],
+      "slug": "nyc1",
+      "name": "New York 1"
+    },
+    "id": "62766883-2c28-11e6-b8e6-000f53306ae1"
+  }
+}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/e450d9ee/libcloud/test/compute/fixtures/digitalocean_v2/detach_volume.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/digitalocean_v2/detach_volume.json 
b/libcloud/test/compute/fixtures/digitalocean_v2/detach_volume.json
new file mode 100644
index 0000000..9ef1c33
--- /dev/null
+++ b/libcloud/test/compute/fixtures/digitalocean_v2/detach_volume.json
@@ -0,0 +1,34 @@
+{
+  "action": {
+    "region_slug": "nyc1",
+    "region": {
+      "available": true,
+      "features": [
+        "private_networking",
+        "backups",
+        "ipv6",
+        "metadata"
+      ],
+      "sizes": [
+        "512mb",
+        "1gb",
+        "2gb",
+        "4gb",
+        "8gb",
+        "16gb",
+        "32gb",
+        "48gb",
+        "64gb"
+      ],
+      "slug": "nyc1",
+      "name": "New York 1"
+    },
+    "resource_type": "backend",
+    "resource_id": null,
+    "completed_at": null,
+    "started_at": "2016-06-06T21:02:20Z",
+    "type": "detach_volume",
+    "status": "in-progress",
+    "id": 110956599
+  }
+}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/e450d9ee/libcloud/test/compute/fixtures/digitalocean_v2/list_volumes.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/digitalocean_v2/list_volumes.json 
b/libcloud/test/compute/fixtures/digitalocean_v2/list_volumes.json
new file mode 100644
index 0000000..7ab3da8
--- /dev/null
+++ b/libcloud/test/compute/fixtures/digitalocean_v2/list_volumes.json
@@ -0,0 +1,38 @@
+{
+  "volumes": [
+    {
+      "size_gigabytes": 4,
+      "region": {
+        "slug": "nyc1",
+        "sizes": [
+          "512mb",
+          "1gb",
+          "2gb",
+          "4gb",
+          "8gb",
+          "16gb",
+          "32gb",
+          "48gb",
+          "64gb"
+        ],
+        "name": "New York 1",
+        "features": [
+          "private_networking",
+          "backups",
+          "ipv6",
+          "metadata"
+        ],
+        "available": true
+      },
+      "name": "example",
+      "id": "62766883-2c28-11e6-b8e6-000f53306ae1",
+      "droplet_ids": [],
+      "description": "Block store for examples",
+      "created_at": "2016-06-06T20:51:04Z"
+    }
+  ],
+  "links": {},
+  "meta": {
+    "total": 1
+  }
+}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/e450d9ee/libcloud/test/compute/fixtures/digitalocean_v2/list_volumes_empty.json
----------------------------------------------------------------------
diff --git 
a/libcloud/test/compute/fixtures/digitalocean_v2/list_volumes_empty.json 
b/libcloud/test/compute/fixtures/digitalocean_v2/list_volumes_empty.json
new file mode 100644
index 0000000..f05e66f
--- /dev/null
+++ b/libcloud/test/compute/fixtures/digitalocean_v2/list_volumes_empty.json
@@ -0,0 +1,7 @@
+{
+  "volumes": [],
+  "links": {},
+  "meta": {
+    "total": 0
+  }
+}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/e450d9ee/libcloud/test/compute/test_digitalocean_v2.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_digitalocean_v2.py 
b/libcloud/test/compute/test_digitalocean_v2.py
index 1754ce1..25e6e76 100644
--- a/libcloud/test/compute/test_digitalocean_v2.py
+++ b/libcloud/test/compute/test_digitalocean_v2.py
@@ -189,6 +189,48 @@ class DigitalOcean_v2_Tests(LibcloudTestCase):
         nodes = self.driver._paginated_request('/v2/droplets', 'droplets')
         self.assertEqual(len(nodes), 2)
 
+    def test_list_volumes(self):
+        volumes = self.driver.list_volumes()
+        self.assertEqual(len(volumes), 1)
+        volume = volumes[0]
+        self.assertEqual(volume.id, "62766883-2c28-11e6-b8e6-000f53306ae1")
+        self.assertEqual(volume.name, "example")
+        self.assertEqual(volume.size, 4)
+        self.assertEqual(volume.driver, self.driver)
+
+    def test_list_volumes_empty(self):
+        DigitalOceanMockHttp.type = 'EMPTY'
+        volumes = self.driver.list_volumes()
+        self.assertEqual(len(volumes), 0)
+
+    def test_create_volume(self):
+        nyc1 = [r for r in self.driver.list_locations() if r.id == 'nyc1'][0]
+        DigitalOceanMockHttp.type = 'CREATE'
+        volume = self.driver.create_volume(4, 'example', nyc1)
+        self.assertEqual(volume.id, "62766883-2c28-11e6-b8e6-000f53306ae1")
+        self.assertEqual(volume.name, "example")
+        self.assertEqual(volume.size, 4)
+        self.assertEqual(volume.driver, self.driver)
+
+    def test_attach_volume(self):
+        node = self.driver.list_nodes()[0]
+        volume = self.driver.list_volumes()[0]
+        DigitalOceanMockHttp.type = 'ATTACH'
+        resp = self.driver.attach_volume(node, volume)
+        self.assertTrue(resp)
+
+    def test_detach_volume(self):
+        volume = self.driver.list_volumes()[0]
+        DigitalOceanMockHttp.type = 'DETACH'
+        resp = self.driver.detach_volume(volume)
+        self.assertTrue(resp)
+
+    def test_destroy_volume(self):
+        volume = self.driver.list_volumes()[0]
+        DigitalOceanMockHttp.type = 'DESTROY'
+        resp = self.driver.destroy_volume(volume)
+        self.assertTrue(resp)
+
 
 class DigitalOceanMockHttp(MockHttpTestCase):
     fixtures = ComputeFileFixtures('digitalocean_v2')
@@ -279,5 +321,32 @@ class DigitalOceanMockHttp(MockHttpTestCase):
         body = self.fixtures.load('list_nodes_page_1.json')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
 
+    def _v2_volumes(self, method, url, body, headers):
+        body = self.fixtures.load('list_volumes.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _v2_volumes_EMPTY(self, method, url, body, headers):
+        body = self.fixtures.load('list_volumes_empty.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _v2_volumes_CREATE(self, method, url, body, headers):
+        body = self.fixtures.load('create_volume.json')
+        return (httplib.CREATED, body, {}, httplib.responses[httplib.CREATED])
+
+    def _v2_volumes_actions_ATTACH(self, method, url, body, headers):
+        body = self.fixtures.load('attach_volume.json')
+        return (httplib.ACCEPTED, body, {},
+                httplib.responses[httplib.ACCEPTED])
+
+    def _v2_volumes_DETACH(self, method, url, body, headers):
+        body = self.fixtures.load('detach_volume.json')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _v2_volumes_62766883_2c28_11e6_b8e6_000f53306ae1_DESTROY(self, method,
+                                                                 url, body,
+                                                                 headers):
+        return (httplib.NO_CONTENT, None, {},
+                httplib.responses[httplib.NO_CONTENT])
+
 if __name__ == '__main__':
     sys.exit(unittest.main())

Reply via email to