summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
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,