diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-09-09 04:57:10 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-09-09 04:57:10 +0000 |
| commit | 63f04675f5a50d589eff58c221eda875fc7c6a54 (patch) | |
| tree | 7523eefb42c5e26eae655fbaebf2087678c96740 | |
| parent | 3c4d097a6b88071339f075f4ad3234f36d9371d6 (diff) | |
| parent | 85923aa53d9b0aa3bba9082d8e0b5046a57f502e (diff) | |
Merge "Add Server Detail and Metadata tests"
21 files changed, 319 insertions, 2 deletions
diff --git a/doc/api_samples/server-detail-get-resp.json b/doc/api_samples/server-detail-get-resp.json new file mode 100644 index 000000000..3ea61531e --- /dev/null +++ b/doc/api_samples/server-detail-get-resp.json @@ -0,0 +1,56 @@ +{ + "servers": [ + { + "accessIPv4": "", + "accessIPv6": "", + "addresses": { + "private": [ + { + "addr": "192.168.0.3", + "version": 4 + } + ] + }, + "created": "2012-09-07T16:56:37Z", + "flavor": { + "id": "1", + "links": [ + { + "href": "http://openstack.example.com/openstack/flavors/1", + "rel": "bookmark" + } + ] + }, + "hostId": "16d193736a5cfdb60c697ca27ad071d6126fa13baeb670fc9d10645e", + "id": "05184ba3-00ba-4fbc-b7a2-03b62b884931", + "image": { + "id": "70a599e0-31e7-49b7-b260-868f441e862b", + "links": [ + { + "href": "http://openstack.example.com/openstack/images/70a599e0-31e7-49b7-b260-868f441e862b", + "rel": "bookmark" + } + ] + }, + "links": [ + { + "href": "http://openstack.example.com/v2/openstack/servers/05184ba3-00ba-4fbc-b7a2-03b62b884931", + "rel": "self" + }, + { + "href": "http://openstack.example.com/openstack/servers/05184ba3-00ba-4fbc-b7a2-03b62b884931", + "rel": "bookmark" + } + ], + "metadata": { + "My Server Name": "Apache1" + }, + "name": "new-server-test", + "progress": 0, + "status": "ACTIVE", + "tenant_id": "openstack", + "updated": "2012-09-07T16:56:37Z", + "user_id": "fake" + } + ] +}
\ No newline at end of file diff --git a/doc/api_samples/server-detail-get-resp.xml b/doc/api_samples/server-detail-get-resp.xml new file mode 100644 index 000000000..83bcf0f79 --- /dev/null +++ b/doc/api_samples/server-detail-get-resp.xml @@ -0,0 +1,21 @@ +<?xml version='1.0' encoding='UTF-8'?> +<servers xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1"> + <server status="ACTIVE" updated="2012-09-07T17:11:46Z" hostId="1b3afbff40723a9649091142a647b83eb6e5b49973239cdeb3d1973c" name="new-server-test" created="2012-09-07T17:11:45Z" userId="fake" tenantId="openstack" accessIPv4="" accessIPv6="" progress="0" id="7c3c0f79-343e-4b99-93bc-2ade47641e64"> + <image id="70a599e0-31e7-49b7-b260-868f441e862b"> + <atom:link href="http://openstack.example.com/openstack/images/70a599e0-31e7-49b7-b260-868f441e862b" rel="bookmark"/> + </image> + <flavor id="1"> + <atom:link href="http://openstack.example.com/openstack/flavors/1" rel="bookmark"/> + </flavor> + <metadata> + <meta key="My Server Name">Apache1</meta> + </metadata> + <addresses> + <network id="private"> + <ip version="4" addr="192.168.0.3"/> + </network> + </addresses> + <atom:link href="http://openstack.example.com/v2/openstack/servers/7c3c0f79-343e-4b99-93bc-2ade47641e64" rel="self"/> + <atom:link href="http://openstack.example.com/openstack/servers/7c3c0f79-343e-4b99-93bc-2ade47641e64" rel="bookmark"/> + </server> +</servers>
\ No newline at end of file diff --git a/doc/api_samples/server-metadata-all-req.json b/doc/api_samples/server-metadata-all-req.json new file mode 100644 index 000000000..03925e4a4 --- /dev/null +++ b/doc/api_samples/server-metadata-all-req.json @@ -0,0 +1,5 @@ +{ + "metadata" : { + "foo" : "Foo Value" + } +}
\ No newline at end of file diff --git a/doc/api_samples/server-metadata-all-req.xml b/doc/api_samples/server-metadata-all-req.xml new file mode 100644 index 000000000..72811e302 --- /dev/null +++ b/doc/api_samples/server-metadata-all-req.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<metadata xmlns="http://docs.openstack.org/compute/api/v1.1"> + <meta key="foo">Foo Value</meta> +</metadata>
\ No newline at end of file diff --git a/doc/api_samples/server-metadata-all-resp.json b/doc/api_samples/server-metadata-all-resp.json new file mode 100644 index 000000000..81cd4eb94 --- /dev/null +++ b/doc/api_samples/server-metadata-all-resp.json @@ -0,0 +1,5 @@ +{ + "metadata": { + "foo": "Foo Value" + } +}
\ No newline at end of file diff --git a/doc/api_samples/server-metadata-all-resp.xml b/doc/api_samples/server-metadata-all-resp.xml new file mode 100644 index 000000000..55c949c57 --- /dev/null +++ b/doc/api_samples/server-metadata-all-resp.xml @@ -0,0 +1,4 @@ +<?xml version='1.0' encoding='UTF-8'?> +<metadata xmlns="http://docs.openstack.org/compute/api/v1.1"> + <meta key="foo">Foo Value</meta> +</metadata>
\ No newline at end of file diff --git a/doc/api_samples/server-metadata-req.json b/doc/api_samples/server-metadata-req.json new file mode 100644 index 000000000..7124bb237 --- /dev/null +++ b/doc/api_samples/server-metadata-req.json @@ -0,0 +1,5 @@ +{ + "meta" : { + "foo" : "Bar Value" + } +}
\ No newline at end of file diff --git a/doc/api_samples/server-metadata-req.xml b/doc/api_samples/server-metadata-req.xml new file mode 100644 index 000000000..f237b2b36 --- /dev/null +++ b/doc/api_samples/server-metadata-req.xml @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<meta xmlns="http://docs.openstack.org/compute/api/v1.1" key="foo">Bar Value</meta>
\ No newline at end of file diff --git a/doc/api_samples/server-metadata-resp.json b/doc/api_samples/server-metadata-resp.json new file mode 100644 index 000000000..802b37d7f --- /dev/null +++ b/doc/api_samples/server-metadata-resp.json @@ -0,0 +1,5 @@ +{ + "meta": { + "foo": "Bar Value" + } +}
\ No newline at end of file diff --git a/doc/api_samples/server-metadata-resp.xml b/doc/api_samples/server-metadata-resp.xml new file mode 100644 index 000000000..c01e16a47 --- /dev/null +++ b/doc/api_samples/server-metadata-resp.xml @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='UTF-8'?> +<meta xmlns="http://docs.openstack.org/compute/api/v1.1" key="foo">Bar Value</meta>
\ No newline at end of file diff --git a/nova/tests/integrated/api_samples/server-detail-get-resp.json.tpl b/nova/tests/integrated/api_samples/server-detail-get-resp.json.tpl new file mode 100644 index 000000000..921bfdf88 --- /dev/null +++ b/nova/tests/integrated/api_samples/server-detail-get-resp.json.tpl @@ -0,0 +1,56 @@ +{ + "servers": [ + { + "accessIPv4": "", + "accessIPv6": "", + "addresses": { + "private": [ + { + "addr": "%(ip)s", + "version": 4 + } + ] + }, + "created": "%(timestamp)s", + "flavor": { + "id": "1", + "links": [ + { + "href": "%(host)s/openstack/flavors/1", + "rel": "bookmark" + } + ] + }, + "hostId": "%(hostid)s", + "id": "%(uuid)s", + "image": { + "id": "%(uuid)s", + "links": [ + { + "href": "%(host)s/openstack/images/%(uuid)s", + "rel": "bookmark" + } + ] + }, + "links": [ + { + "href": "%(host)s/v2/openstack/servers/%(uuid)s", + "rel": "self" + }, + { + "href": "%(host)s/openstack/servers/%(uuid)s", + "rel": "bookmark" + } + ], + "metadata": { + "My Server Name": "Apache1" + }, + "name": "new-server-test", + "progress": 0, + "status": "ACTIVE", + "tenant_id": "openstack", + "updated": "%(timestamp)s", + "user_id": "fake" + } + ] +} diff --git a/nova/tests/integrated/api_samples/server-detail-get-resp.xml.tpl b/nova/tests/integrated/api_samples/server-detail-get-resp.xml.tpl new file mode 100644 index 000000000..4465f68d7 --- /dev/null +++ b/nova/tests/integrated/api_samples/server-detail-get-resp.xml.tpl @@ -0,0 +1,21 @@ +<?xml version='1.0' encoding='UTF-8'?> +<servers xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/compute/api/v1.1"> + <server status="ACTIVE" updated="%(timestamp)s" hostId="%(hostid)s" name="new-server-test" created="%(timestamp)s" userId="fake" tenantId="openstack" accessIPv4="" accessIPv6="" progress="0" id="%(id)s"> + <image id="%(uuid)s"> + <atom:link href="%(host)s/openstack/images/%(uuid)s" rel="bookmark"/> + </image> + <flavor id="1"> + <atom:link href="%(host)s/openstack/flavors/1" rel="bookmark"/> + </flavor> + <metadata> + <meta key="My Server Name">Apache1</meta> + </metadata> + <addresses> + <network id="private"> + <ip version="4" addr="%(ip)s"/> + </network> + </addresses> + <atom:link href="%(host)s/v2/openstack/servers/%(uuid)s" rel="self"/> + <atom:link href="%(host)s/openstack/servers/%(uuid)s" rel="bookmark"/> + </server> +</servers> diff --git a/nova/tests/integrated/api_samples/server-metadata-all-req.json.tpl b/nova/tests/integrated/api_samples/server-metadata-all-req.json.tpl new file mode 100644 index 000000000..2278d2afd --- /dev/null +++ b/nova/tests/integrated/api_samples/server-metadata-all-req.json.tpl @@ -0,0 +1,5 @@ +{ + "metadata" : { + "foo" : "%(value)s" + } +} diff --git a/nova/tests/integrated/api_samples/server-metadata-all-req.xml.tpl b/nova/tests/integrated/api_samples/server-metadata-all-req.xml.tpl new file mode 100644 index 000000000..e74270673 --- /dev/null +++ b/nova/tests/integrated/api_samples/server-metadata-all-req.xml.tpl @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<metadata xmlns="http://docs.openstack.org/compute/api/v1.1"> + <meta key="foo">%(value)s</meta> +</metadata> diff --git a/nova/tests/integrated/api_samples/server-metadata-all-resp.json.tpl b/nova/tests/integrated/api_samples/server-metadata-all-resp.json.tpl new file mode 100644 index 000000000..2278d2afd --- /dev/null +++ b/nova/tests/integrated/api_samples/server-metadata-all-resp.json.tpl @@ -0,0 +1,5 @@ +{ + "metadata" : { + "foo" : "%(value)s" + } +} diff --git a/nova/tests/integrated/api_samples/server-metadata-all-resp.xml.tpl b/nova/tests/integrated/api_samples/server-metadata-all-resp.xml.tpl new file mode 100644 index 000000000..e74270673 --- /dev/null +++ b/nova/tests/integrated/api_samples/server-metadata-all-resp.xml.tpl @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<metadata xmlns="http://docs.openstack.org/compute/api/v1.1"> + <meta key="foo">%(value)s</meta> +</metadata> diff --git a/nova/tests/integrated/api_samples/server-metadata-req.json.tpl b/nova/tests/integrated/api_samples/server-metadata-req.json.tpl new file mode 100644 index 000000000..35872e95f --- /dev/null +++ b/nova/tests/integrated/api_samples/server-metadata-req.json.tpl @@ -0,0 +1,5 @@ +{ + "meta" : { + "foo" : "%(value)s" + } +} diff --git a/nova/tests/integrated/api_samples/server-metadata-req.xml.tpl b/nova/tests/integrated/api_samples/server-metadata-req.xml.tpl new file mode 100644 index 000000000..fa9d6ad48 --- /dev/null +++ b/nova/tests/integrated/api_samples/server-metadata-req.xml.tpl @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<meta xmlns="http://docs.openstack.org/compute/api/v1.1" key="foo">%(value)s</meta> diff --git a/nova/tests/integrated/api_samples/server-metadata-resp.json.tpl b/nova/tests/integrated/api_samples/server-metadata-resp.json.tpl new file mode 100644 index 000000000..85d69ec95 --- /dev/null +++ b/nova/tests/integrated/api_samples/server-metadata-resp.json.tpl @@ -0,0 +1,5 @@ +{ + "meta": { + "foo": "%(value)s" + } +} diff --git a/nova/tests/integrated/api_samples/server-metadata-resp.xml.tpl b/nova/tests/integrated/api_samples/server-metadata-resp.xml.tpl new file mode 100644 index 000000000..fa9d6ad48 --- /dev/null +++ b/nova/tests/integrated/api_samples/server-metadata-resp.xml.tpl @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<meta xmlns="http://docs.openstack.org/compute/api/v1.1" key="foo">%(value)s</meta> diff --git a/nova/tests/integrated/test_api_samples.py b/nova/tests/integrated/test_api_samples.py index 6f103f6c2..3786e2975 100644 --- a/nova/tests/integrated/test_api_samples.py +++ b/nova/tests/integrated/test_api_samples.py @@ -157,6 +157,10 @@ class ApiSampleTestBase(integrated_helpers._IntegratedTestBase): if match.groups(): matched_value = match.groups()[0] else: + if isinstance(expected, basestring): + # NOTE(danms): Ignore whitespace in this comparison + expected = expected.strip() + result = result.strip() if expected != result: raise NoMatch(_('Values do not match:\n' '%(expected)s\n%(result)s') % locals()) @@ -217,6 +221,9 @@ class ApiSampleTestBase(integrated_helpers._IntegratedTestBase): def _do_put(self, url, name, subs): return self._do_post(url, name, subs, method='PUT') + def _do_delete(self, url): + return self._get_response(url, 'DELETE') + class VersionsSampleJsonTest(ApiSampleTestBase): def test_servers_get(self): @@ -229,8 +236,8 @@ class VersionsSampleXmlTest(VersionsSampleJsonTest): ctype = 'xml' -class ServersSampleJsonTest(ApiSampleTestBase): - def test_servers_post(self): +class ServersSampleBase(ApiSampleTestBase): + def _post_server(self): subs = { 'image_id': fake.get_valid_image_id(), 'host': self._get_host(), @@ -240,6 +247,11 @@ class ServersSampleJsonTest(ApiSampleTestBase): subs = self._get_regexes() return self._verify_response('server-post-resp', subs, response) + +class ServersSampleJsonTest(ServersSampleBase): + def test_servers_post(self): + return self._post_server() + def test_servers_get(self): uuid = self.test_servers_post() response = self._do_get('servers/%s' % uuid) @@ -252,6 +264,20 @@ class ServersSampleXmlTest(ServersSampleJsonTest): ctype = 'xml' +class ServersDetailJsonTest(ServersSampleBase): + def test_servers_detail_get(self): + uuid = self._post_server() + response = self._do_get('servers/detail') + self.assertEqual(response.status, 200) + subs = self._get_regexes() + subs['hostid'] = '[a-f0-9]+' + return self._verify_response('server-detail-get-resp', subs, response) + + +class ServersDetailXmlTest(ServersDetailJsonTest): + ctype = 'xml' + + class ServersSampleAllExtensionJsonTest(ServersSampleJsonTest): all_extensions = True @@ -260,6 +286,73 @@ class ServersSampleAllExtensionXmlTest(ServersSampleXmlTest): all_extensions = True +class ServersMetadataJsonTest(ServersSampleBase): + def _create_and_set(self, subs): + uuid = self._post_server() + response = self._do_put('servers/%s/metadata' % uuid, + 'server-metadata-all-req', + subs) + self.assertEqual(response.status, 200) + self._verify_response('server-metadata-all-resp', subs, response) + + return uuid + + def test_metadata_put_all(self): + """Test setting all metadata for a server""" + subs = {'value': 'Foo Value'} + return self._create_and_set(subs) + + def test_metadata_post_all(self): + """Test updating all metadata for a server""" + subs = {'value': 'Foo Value'} + uuid = self._create_and_set(subs) + subs['value'] = 'Bar Value' + response = self._do_post('servers/%s/metadata' % uuid, + 'server-metadata-all-req', + subs) + self.assertEqual(response.status, 200) + self._verify_response('server-metadata-all-resp', subs, response) + + def test_metadata_get_all(self): + """Test getting all metadata for a server""" + subs = {'value': 'Foo Value'} + uuid = self._create_and_set(subs) + response = self._do_get('servers/%s/metadata' % uuid) + self.assertEqual(response.status, 200) + self._verify_response('server-metadata-all-resp', subs, response) + + def test_metadata_put(self): + """Test putting an individual metadata item for a server""" + subs = {'value': 'Foo Value'} + uuid = self._create_and_set(subs) + subs['value'] = 'Bar Value' + response = self._do_put('servers/%s/metadata/foo' % uuid, + 'server-metadata-req', + subs) + self.assertEqual(response.status, 200) + return self._verify_response('server-metadata-resp', subs, response) + + def test_metadata_get(self): + """Test getting an individual metadata item for a server""" + subs = {'value': 'Foo Value'} + uuid = self._create_and_set(subs) + response = self._do_get('servers/%s/metadata/foo' % uuid) + self.assertEqual(response.status, 200) + return self._verify_response('server-metadata-resp', subs, response) + + def test_metadata_delete(self): + """Test deleting an individual metadata item for a server""" + subs = {'value': 'Foo Value'} + uuid = self._create_and_set(subs) + response = self._do_delete('servers/%s/metadata/foo' % uuid) + self.assertEqual(response.status, 204) + self.assertEqual(response.read(), '') + + +class ServersMetadataXmlTest(ServersMetadataJsonTest): + ctype = 'xml' + + class ExtensionsSampleJsonTest(ApiSampleTestBase): all_extensions = True |
