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())