diff --git a/doc/api_samples/os-cloudpipe/cloud-pipe-create-req.json b/doc/api_samples/os-cloudpipe/cloud-pipe-create-req.json new file mode 100644 index 000000000000..dd1cf348c69d --- /dev/null +++ b/doc/api_samples/os-cloudpipe/cloud-pipe-create-req.json @@ -0,0 +1,5 @@ +{ + "cloudpipe": { + "project_id": "cloudpipe-059f21e3-c20e-4efc-9e7a-eba2ab3c6f9a" + } +} \ No newline at end of file diff --git a/doc/api_samples/os-cloudpipe/cloud-pipe-create-req.xml b/doc/api_samples/os-cloudpipe/cloud-pipe-create-req.xml new file mode 100644 index 000000000000..e80a9113dca4 --- /dev/null +++ b/doc/api_samples/os-cloudpipe/cloud-pipe-create-req.xml @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/doc/api_samples/os-cloudpipe/cloud-pipe-create-resp.json b/doc/api_samples/os-cloudpipe/cloud-pipe-create-resp.json new file mode 100644 index 000000000000..8c555bf99dfb --- /dev/null +++ b/doc/api_samples/os-cloudpipe/cloud-pipe-create-resp.json @@ -0,0 +1,5 @@ +{ + "cloudpipe": { + "instance_id": "72afecab-24b0-437e-b1d9-88a83be701b3" + } +} \ No newline at end of file diff --git a/doc/api_samples/os-cloudpipe/cloud-pipe-create-resp.xml b/doc/api_samples/os-cloudpipe/cloud-pipe-create-resp.xml new file mode 100644 index 000000000000..fafa90a3bea8 --- /dev/null +++ b/doc/api_samples/os-cloudpipe/cloud-pipe-create-resp.xml @@ -0,0 +1,4 @@ + + + 1a17f615-343b-430f-976a-457c029eddb7 + \ No newline at end of file diff --git a/doc/api_samples/os-cloudpipe/cloud-pipe-get-resp.json b/doc/api_samples/os-cloudpipe/cloud-pipe-get-resp.json new file mode 100644 index 000000000000..9efac48bbad6 --- /dev/null +++ b/doc/api_samples/os-cloudpipe/cloud-pipe-get-resp.json @@ -0,0 +1,15 @@ +{ + "cloudpipes": [ + { + "cloudpipe": { + "created_at": "2012-09-25T18:18:55Z", + "instance_id": "72afecab-24b0-437e-b1d9-88a83be701b3", + "internal_ip": "192.168.0.3", + "project_id": "cloudpipe-059f21e3-c20e-4efc-9e7a-eba2ab3c6f9a", + "public_ip": "127.0.0.1", + "public_port": 22, + "state": "down" + } + } + ] +} \ No newline at end of file diff --git a/doc/api_samples/os-cloudpipe/cloud-pipe-get-resp.xml b/doc/api_samples/os-cloudpipe/cloud-pipe-get-resp.xml new file mode 100644 index 000000000000..6981aa5bd7c1 --- /dev/null +++ b/doc/api_samples/os-cloudpipe/cloud-pipe-get-resp.xml @@ -0,0 +1,12 @@ + + + + 127.0.0.1 + 2012-09-25T18:18:49Z + 22 + down + 1a17f615-343b-430f-976a-457c029eddb7 + 192.168.0.3 + cloudpipe-6405f2ca-caf9-493b-a1f6-e55f595d75ab + + \ No newline at end of file diff --git a/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-create-req.json.tpl b/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-create-req.json.tpl new file mode 100644 index 000000000000..c8fc75995a95 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-create-req.json.tpl @@ -0,0 +1,5 @@ +{ + "cloudpipe": { + "project_id": "%(project_id)s" + } +} diff --git a/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-create-req.xml.tpl b/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-create-req.xml.tpl new file mode 100644 index 000000000000..b0a60b896c37 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-create-req.xml.tpl @@ -0,0 +1,3 @@ + diff --git a/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-create-resp.json.tpl b/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-create-resp.json.tpl new file mode 100644 index 000000000000..6aa2ff60e2b2 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-create-resp.json.tpl @@ -0,0 +1,3 @@ +{ + "instance_id": "%(id)s" +} diff --git a/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-create-resp.xml.tpl b/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-create-resp.xml.tpl new file mode 100644 index 000000000000..63064cc51ab0 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-create-resp.xml.tpl @@ -0,0 +1,3 @@ + + %(uuid)s + diff --git a/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-get-resp.json.tpl b/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-get-resp.json.tpl new file mode 100644 index 000000000000..cec85fc5cc3c --- /dev/null +++ b/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-get-resp.json.tpl @@ -0,0 +1,13 @@ +{ + "cloudpipes": [ + { + "created_at": "%(timestamp)s", + "instance_id": "%(uuid)s", + "internal_ip": "%(ip)s", + "project_id": "%(project_id)s", + "public_ip": "%(ip)s", + "public_port": 22, + "state": "down" + } + ] +} diff --git a/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-get-resp.xml.tpl b/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-get-resp.xml.tpl new file mode 100644 index 000000000000..417ca3305d50 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-cloudpipe/cloud-pipe-get-resp.xml.tpl @@ -0,0 +1,12 @@ + + + + %(ip)s + %(timestamp)s + 22 + down + %(uuid)s + %(ip)s + %(project_id)s + + diff --git a/nova/tests/integrated/test_api_samples.py b/nova/tests/integrated/test_api_samples.py index df239db2a5b7..d89173d99e44 100644 --- a/nova/tests/integrated/test_api_samples.py +++ b/nova/tests/integrated/test_api_samples.py @@ -20,8 +20,10 @@ import uuid from lxml import etree +from nova.cloudpipe.pipelib import CloudPipe from nova import context from nova import flags +from nova.network.manager import NetworkManager from nova.openstack.common import importutils from nova.openstack.common import jsonutils from nova.openstack.common.log import logging @@ -987,3 +989,49 @@ class VirtualInterfacesJsonTest(ServersSampleBase): class VirtualInterfacesXmlTest(VirtualInterfacesJsonTest): ctype = 'xml' + + +class CloudPipeSampleJsonTest(ApiSampleTestBase): + extension_name = "nova.api.openstack.compute.contrib.cloudpipe.Cloudpipe" + + def setUp(self): + super(CloudPipeSampleJsonTest, self).setUp() + + def get_user_data(self, project_id): + """Stub method to generate user data for cloudpipe tests""" + return "VVNFUiBEQVRB\n" + + def network_api_get(self, context, network_uuid): + """Stub to get a valid network and its information""" + return {'vpn_public_address': '127.0.0.1', + 'vpn_public_port': 22} + + self.stubs.Set(CloudPipe, 'get_encoded_zip', get_user_data) + self.stubs.Set(NetworkManager, "get_network", network_api_get) + + def test_cloud_pipe_create(self): + """Get api samples of cloud pipe extension creation""" + FLAGS.vpn_image_id = fake.get_valid_image_id() + project = {'project_id': 'cloudpipe-' + str(uuid.uuid4())} + response = self._do_post('os-cloudpipe', 'cloud-pipe-create-req', + project) + self.assertEqual(response.status, 200) + subs = self._get_regexes() + subs.update(project) + subs['image_id'] = FLAGS.vpn_image_id + self._verify_response('cloud-pipe-create-resp', subs, response) + return project + + def test_cloud_pipe_list(self): + """Get api samples of cloud pipe extension get request""" + project = self.test_cloud_pipe_create() + response = self._do_get('os-cloudpipe') + self.assertEqual(response.status, 200) + subs = self._get_regexes() + subs.update(project) + subs['image_id'] = FLAGS.vpn_image_id + return self._verify_response('cloud-pipe-get-resp', subs, response) + + +class CloudPipeSampleXmlTest(CloudPipeSampleJsonTest): + ctype = "xml"