Add list by name tests
diff --git a/gstack/controllers/firewalls.py b/gstack/controllers/firewalls.py
index 0c01119..34fb736 100755
--- a/gstack/controllers/firewalls.py
+++ b/gstack/controllers/firewalls.py
@@ -58,7 +58,7 @@
})
-@app.route('/compute/v1/projects/<projectid>/global/firewalls', methods=['GET'])
+@app.route('/compute/v1/projects/<projectid>/global/firewalls', methods=['GET'])
@authentication.required
def listsecuritygroups(projectid, authorization):
command = 'listSecurityGroups'
diff --git a/gstack/controllers/instances.py b/gstack/controllers/instances.py
index 5de28ea..c17ea42 100755
--- a/gstack/controllers/instances.py
+++ b/gstack/controllers/instances.py
@@ -152,12 +152,10 @@
'keyword': instance
}
)
- print virtual_machine_list
if virtual_machine_list['listvirtualmachinesresponse']:
response = helper.filter_by_name(
- data=virtual_machine_list[
- 'listvirtualmachinesresponse']['virtualmachine'],
+ data=virtual_machine_list['listvirtualmachinesresponse']['virtualmachine'],
name=instance
)
return response
@@ -338,7 +336,7 @@
populated_response = operations.create_response(
projectid=projectid,
- operationid=deletion_result['destroyvirtualmachineresponse']['jobid'],
+ operationid=deletion_result['queryasyncjobresultresponse']['jobid'],
authorization=authorization
)
diff --git a/gstack/controllers/operations.py b/gstack/controllers/operations.py
index e8c1d1e..faa7ad6 100644
--- a/gstack/controllers/operations.py
+++ b/gstack/controllers/operations.py
@@ -51,12 +51,10 @@
}
if async_result['jobstatus'] is 0:
- # handle pending case
populated_response['targetLink'] = ''
populated_response['status'] = 'PENDING'
populated_response['progress'] = 0
elif async_result['jobstatus'] is 1:
- # handle successful case
populated_response['status'] = 'DONE'
populated_response['zone'] = urllib.unquote_plus(
helper.get_root_url() +
@@ -71,9 +69,7 @@
'getinstance',
projectid=projectid,
zone=async_result['jobresult']['virtualmachine']['zonename'],
- instance=async_result['jobresult']['virtualmachine']['displayname']))
-
- # need to add a case here for error handling, its job status 2
+ instance=async_result['jobresult']['virtualmachine']['name']))
return populated_response
diff --git a/gstack/controllers/project.py b/gstack/controllers/project.py
index b18eeba..d6e0776 100755
--- a/gstack/controllers/project.py
+++ b/gstack/controllers/project.py
@@ -156,7 +156,7 @@
return response
-@app.route('//compute/v1/projects/<projectid>', methods=['GET'])
+@app.route('/compute/v1/projects/<projectid>', methods=['GET'])
@authentication.required
def getproject(authorization, projectid):
project = _get_account_by_name(authorization, projectid)
@@ -178,7 +178,7 @@
return res
-@app.route('//compute/v1/projects/<projectid>/setCommonInstanceMetadata', methods=['POST'])
+@app.route('/compute/v1/projects/<projectid>/setCommonInstanceMetadata', methods=['POST'])
@authentication.required
def setglobalmetadata(projectid, authorization):
data = json.loads(request.data)
diff --git a/tests/data/create_volume_response.json b/tests/data/create_volume_response.json
new file mode 100644
index 0000000..79826ba
--- /dev/null
+++ b/tests/data/create_volume_response.json
@@ -0,0 +1,38 @@
+{
+ "queryasyncjobresultresponse": {
+ "jobprocstatus": 0,
+ "created": "2014-02-25T19:46:35+0000",
+ "cmd": "org.apache.cloudstack.api.command.user.volume.CreateVolumeCmd",
+ "userid": "2edb33ec-95e4-11e3-b2e4-d19c9d3e5e1d",
+ "jobstatus": 1,
+ "jobid": "1f32404b-d067-43e8-8835-4cc1c55d737a",
+ "jobresultcode": 0,
+ "jobresulttype": "object",
+ "jobresult": {
+ "volume": {
+ "size": 10737418240,
+ "diskofferingname": "Custom",
+ "account": "admin",
+ "domainid": "2edae3e4-95e4-11e3-b2e4-d19c9d3e5e1d",
+ "name": "f0e2a699-1196-49bd-90cd-af809f4c32ea",
+ "created": "2014-02-25T19:46:34+0000",
+ "storagetype": "shared",
+ "type": "DATADISK",
+ "tags": [],
+ "domain": "ROOT",
+ "jobstatus": 0,
+ "jobid": "1f32404b-d067-43e8-8835-4cc1c55d737a",
+ "destroyed": false,
+ "state": "Allocated",
+ "diskofferingdisplaytext": "Custom Disk",
+ "isextractable": true,
+ "displayvolume": true,
+ "zoneid": "1e47a2fc-61c7-401c-b90e-416b472ada64",
+ "diskofferingid": "46f0a62e-ba3c-4a49-b619-877a8b2a07ed",
+ "id": "8552cdce-879a-42f3-bdb5-2e7f55a38996",
+ "zonename": "Sandbox-simulator"
+ }
+ },
+ "accountid": "2edb0c28-95e4-11e3-b2e4-d19c9d3e5e1d"
+ }
+}
diff --git a/tests/data/delete_volume_response.json b/tests/data/valid_delete_volume.json
similarity index 100%
rename from tests/data/delete_volume_response.json
rename to tests/data/valid_delete_volume.json
diff --git a/tests/disks_tests.py b/tests/disks_tests.py
index bce6a51..f9635a3 100644
--- a/tests/disks_tests.py
+++ b/tests/disks_tests.py
@@ -21,6 +21,21 @@
self.assert_ok(response)
+ def test_list_disks_with_name_filter(self):
+
+ get = mock.Mock()
+ get.return_value.text = read_file('tests/data/valid_describe_volumes.json')
+ get.return_value.status_code = 200
+
+ with mock.patch('requests.get', get):
+
+ headers = {'authorization': 'Bearer ' + str(GStackAppTestCase.access_token)}
+ response = self.get(
+ '/compute/v1/projects/projectid/zones/zonename/disks?filter=name+eq+volumename',
+ headers=headers)
+
+ self.assert_ok(response)
+
def test_aggregated_list_disks(self):
get = mock.Mock()
@@ -88,4 +103,3 @@
assert 'The resource \'/compute/v1/projects/exampleproject/zones/examplezone/disks/volumename\' was not found' \
in response.data
-
diff --git a/tests/instances_tests.py b/tests/instances_tests.py
index 5a225d3..22a6342 100644
--- a/tests/instances_tests.py
+++ b/tests/instances_tests.py
@@ -40,6 +40,20 @@
self.assert_ok(response)
+ def test_list_instances_with_name_filter(self):
+
+ get = mock.Mock()
+ get.return_value.text = read_file('tests/data/valid_describe_instance.json')
+ get.return_value.status_code = 200
+
+ with mock.patch('requests.get', get):
+ headers = {'authorization': 'Bearer ' + str(GStackAppTestCase.access_token)}
+ response = self.get(
+ '/compute/v1/projects/projectid/zones/zonename/instances?filter=name+eq+instancename',
+ headers=headers)
+
+ self.assert_ok(response)
+
def test_aggregated_list_instances_with_name_filter(self):
get = mock.Mock()
@@ -87,4 +101,19 @@
assert 'The resource \'/compute/v1/projects/exampleproject/zones/examplezone/instances/instancename\' was not found' \
in response.data
+ def test_delete_instance(self):
+
+ get = mock.Mock()
+ get.return_value.text = read_file('tests/data/valid_terminate_instance.json')
+ get.return_value.status_code = 200
+
+ get_instance_id = mock.Mock()
+ get_instance_id.return_value = {'id':'virtualmachineid'}
+
+ with mock.patch('requests.get', get):
+ with mock.patch('gstack.controllers.instances._get_virtual_machine_by_name',get_instance_id):
+ headers = {'authorization': 'Bearer ' + str(GStackAppTestCase.access_token)}
+ response = self.delete('/compute/v1/projects/exampleproject/zones/examplezone/instances/instancename', headers=headers)
+
+ self.assert_ok(response)
diff --git a/tests/utils.py b/tests/utils.py
index 3948a71..8101ea7 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -29,6 +29,9 @@
def get(self, *args, **kwargs):
return self._request(self.client.get, *args, **kwargs)
+ def delete(self, *args, **kwargs):
+ return self._request(self.client.delete, *args, **kwargs)
+
def assert_status_code(self, response, status_code):
self.assertEquals(status_code, response.status_code)
return response