summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-05-28 09:59:58 +0000
committerGerrit Code Review <review@openstack.org>2012-05-28 09:59:58 +0000
commitd7e613dabc2dbc28d9405a5b450dc2b4dfa9d47b (patch)
tree8cdd40cd47da365242aef96d5ff97f192a6723e8 /nova/tests
parent0add75a7ff674cd650a962bfbc1f24121313bfde (diff)
parent7b89917ece552b6b3dfe92ecc878531d9bfd9125 (diff)
Merge "_s3_create update only pertinent metadata"
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/glance/stubs.py2
-rw-r--r--nova/tests/image/test_s3.py59
2 files changed, 60 insertions, 1 deletions
diff --git a/nova/tests/glance/stubs.py b/nova/tests/glance/stubs.py
index ccf431b69..e3bdf9dab 100644
--- a/nova/tests/glance/stubs.py
+++ b/nova/tests/glance/stubs.py
@@ -140,7 +140,7 @@ class StubGlanceClient(object):
return self.images[-1]
- def update_image(self, image_id, metadata, data):
+ def update_image(self, image_id, metadata, data, features):
for i, image in enumerate(self.images):
if image['id'] == str(image_id):
if 'id' in metadata:
diff --git a/nova/tests/image/test_s3.py b/nova/tests/image/test_s3.py
index 124666df9..9f078fc49 100644
--- a/nova/tests/image/test_s3.py
+++ b/nova/tests/image/test_s3.py
@@ -15,7 +15,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+import binascii
+import eventlet
+import mox
import os
+import tempfile
from nova import context
import nova.db.api
@@ -58,6 +62,21 @@ ami_manifest_xml = """<?xml version="1.0" ?>
</manifest>
"""
+file_manifest_xml = """<?xml version="1.0" ?>
+<manifest>
+ <image>
+ <ec2_encrypted_key>foo</ec2_encrypted_key>
+ <user_encrypted_key>foo</user_encrypted_key>
+ <ec2_encrypted_iv>foo</ec2_encrypted_iv>
+ <parts count="1">
+ <part index="0">
+ <filename>foo</filename>
+ </part>
+ </parts>
+ </image>
+</manifest>
+"""
+
class TestS3ImageService(test.TestCase):
def setUp(self):
@@ -133,6 +152,46 @@ class TestS3ImageService(test.TestCase):
'no_device': True}]
self.assertEqual(block_device_mapping, expected_bdm)
+ def test_s3_create_is_public(self):
+ metadata = {'properties': {
+ 'image_location': 'mybucket/my.img.manifest.xml'},
+ 'name': 'mybucket/my.img'}
+ handle, tempf = tempfile.mkstemp(dir='/tmp')
+
+ ignore = mox.IgnoreArg()
+ mockobj = self.mox.CreateMockAnything()
+ self.stubs.Set(self.image_service, '_conn', mockobj)
+ mockobj(ignore).AndReturn(mockobj)
+ self.stubs.Set(mockobj, 'get_bucket', mockobj)
+ mockobj(ignore).AndReturn(mockobj)
+ self.stubs.Set(mockobj, 'get_key', mockobj)
+ mockobj(ignore).AndReturn(mockobj)
+ self.stubs.Set(mockobj, 'get_contents_as_string', mockobj)
+ mockobj().AndReturn(file_manifest_xml)
+ self.stubs.Set(self.image_service, '_download_file', mockobj)
+ mockobj(ignore, ignore, ignore).AndReturn(tempf)
+ self.stubs.Set(binascii, 'a2b_hex', mockobj)
+ mockobj(ignore).AndReturn('foo')
+ mockobj(ignore).AndReturn('foo')
+ self.stubs.Set(self.image_service, '_decrypt_image', mockobj)
+ mockobj(ignore, ignore, ignore, ignore, ignore).AndReturn(mockobj)
+ self.stubs.Set(self.image_service, '_untarzip_image', mockobj)
+ mockobj(ignore, ignore).AndReturn(tempf)
+ self.mox.ReplayAll()
+
+ img = self.image_service._s3_create(self.context, metadata)
+ eventlet.sleep()
+ translated = self.image_service._translate_id_to_uuid(context, img)
+ uuid = translated['id']
+ self.glance_service = nova.image.get_default_image_service()
+ updated_image = self.glance_service.update(self.context, uuid,
+ {'is_public': True}, None,
+ {'x-glance-registry-purge-props': False})
+ self.assertTrue(updated_image['is_public'])
+ self.assertEqual(updated_image['status'], 'active')
+ self.assertEqual(updated_image['properties']['image_state'],
+ 'available')
+
def test_s3_malicious_tarballs(self):
self.assertRaises(exception.NovaException,
self.image_service._test_for_malicious_tarball,