Import all the stacktester stuff as-is (s/stacktester/kong/, though).
diff --git a/kong/tests/test_server_meta.py b/kong/tests/test_server_meta.py
new file mode 100644
index 0000000..226e0fb
--- /dev/null
+++ b/kong/tests/test_server_meta.py
@@ -0,0 +1,173 @@
+
+import json
+
+import unittest2 as unittest
+
+from kong import openstack
+
+
+class ServersMetadataTest(unittest.TestCase):
+
+ @classmethod
+ def setUpClass(self):
+ self.os = openstack.Manager()
+ self.image_ref = self.os.config.env.image_ref
+ self.flavor_ref = self.os.config.env.flavor_ref
+
+ def setUp(self):
+ server = {
+ 'name' : 'testserver',
+ 'imageRef' : self.image_ref,
+ 'flavorRef' : self.flavor_ref,
+ 'metadata' : {
+ 'testEntry' : 'testValue',
+ },
+ }
+
+ created_server = self.os.nova.create_server(server)
+ self.server_id = created_server['id']
+
+ def tearDown(self):
+ self.os.nova.delete_server(self.server_id)
+
+
+ def test_get_server_metadata(self):
+ """Retrieve metadata for a server"""
+
+ url = '/servers/%s/metadata' % self.server_id
+ response, body = self.os.nova.request('GET', url)
+ self.assertEqual(200, response.status)
+
+ result = json.loads(body)
+ expected = {
+ 'metadata' : {
+ 'testEntry' : 'testValue',
+ },
+ }
+ self.assertEqual(expected, result)
+
+ def test_post_server_metadata(self):
+ """Create or update metadata for a server"""
+
+ post_metadata = {
+ 'metadata' : {
+ 'new_entry1' : 'new_value1',
+ 'new_entry2' : 'new_value2',
+ },
+ }
+ post_body = json.dumps(post_metadata)
+
+ url = '/servers/%s/metadata' % self.server_id
+ response, body = self.os.nova.request('POST', url, body=post_body)
+ self.assertEqual(200, response.status)
+
+ url = '/servers/%s/metadata' % self.server_id
+ response, body = self.os.nova.request('GET', url)
+ self.assertEqual(200, response.status)
+
+ result = json.loads(body)
+ expected = post_metadata
+ expected['metadata']['testEntry'] = 'testValue'
+ self.assertEqual(expected, result)
+
+ def test_put_server_metadata(self):
+ """Overwrite all metadata for a server"""
+
+ expected = {
+ 'metadata' : {
+ 'new_entry1' : 'new_value1',
+ 'new_entry2' : 'new_value2',
+ },
+ }
+
+ url = '/servers/%s/metadata' % self.server_id
+ post_body = json.dumps(expected)
+ response, body = self.os.nova.request('PUT', url, body=post_body)
+ self.assertEqual(200, response.status)
+
+ url = '/servers/%s/metadata' % self.server_id
+ response, body = self.os.nova.request('GET', url)
+ self.assertEqual(200, response.status)
+
+ result = json.loads(body)
+ # We want to make sure 'testEntry' was removed
+ self.assertEqual(expected, result)
+
+ def test_get_server_metadata_key(self):
+ """Retrieve specific metadata key for a server"""
+
+ url = '/servers/%s/metadata/testEntry' % self.server_id
+ response, body = self.os.nova.request('GET', url)
+ self.assertEqual(200, response.status)
+
+ result = json.loads(body)
+ expected = {
+ 'meta':{
+ 'testEntry':'testValue',
+ },
+ }
+
+ self.assertDictEqual(expected, result)
+
+ def test_add_server_metadata_key(self):
+ """Set specific metadata key on a server"""
+
+ expected_meta = {
+ 'meta' : {
+ 'new_meta1' : 'new_value1',
+ },
+ }
+
+ put_body = json.dumps(expected_meta)
+
+ url = '/servers/%s/metadata/new_meta1' % self.server_id
+ response, body = self.os.nova.request('PUT', url, body=put_body)
+ self.assertEqual(200, response.status)
+ result = json.loads(body)
+ self.assertDictEqual(expected_meta, result)
+
+ expected_metadata = {
+ 'metadata' : {
+ 'testEntry' : 'testValue',
+ 'new_meta1' : 'new_value1',
+ },
+ }
+
+ # Now check all metadata to make sure the other values are there
+ url = '/servers/%s/metadata' % self.server_id
+ response, body = self.os.nova.request('GET', url)
+ result = json.loads(body)
+ self.assertDictEqual(expected_metadata, result)
+
+ def test_update_server_metadata_key(self):
+ """Update specific metadata key for a server"""
+
+ expected_meta = {
+ 'meta' : {
+ 'testEntry' : 'testValue2',
+ },
+ }
+ put_body = json.dumps(expected_meta)
+
+ url = '/servers/%s/metadata/testEntry' % self.server_id
+ response, body = self.os.nova.request('PUT', url, body=put_body)
+ self.assertEqual(200, response.status)
+ result = json.loads(body)
+ self.assertEqual(expected_meta, result)
+
+ def test_delete_server_metadata_key(self):
+ """Delete metadata for a server"""
+
+ url = '/servers/%s/metadata/testEntry' % self.server_id
+ response, body = self.os.nova.request('DELETE', url)
+ self.assertEquals(204, response.status)
+
+ url = '/servers/%s/metadata/testEntry' % self.server_id
+ response, body = self.os.nova.request('GET', url)
+ self.assertEquals(404, response.status)
+
+ url = '/servers/%s/metadata' % self.server_id
+ response, body = self.os.nova.request('GET', url)
+ self.assertEquals(200, response.status)
+ result = json.loads(body)
+ self.assertDictEqual({'metadata':{}}, result)