Add tests for 'iso' image type.
Remove hard coding of next available image id in tests. This prevents new test images from being added to the set generated by tests.unit.stubs.FakeDatastore
This commit is contained in:
@@ -267,7 +267,7 @@ def stub_out_registry_db_image_api(stubs):
|
||||
The "datastore" always starts with this set of image fixtures.
|
||||
|
||||
:param stubs: Set of stubout stubs
|
||||
|
||||
:return: count of items in the "datastore"
|
||||
"""
|
||||
class FakeDatastore(object):
|
||||
|
||||
@@ -301,11 +301,25 @@ def stub_out_registry_db_image_api(stubs):
|
||||
'checksum': None,
|
||||
'size': 19,
|
||||
'location': "file:///tmp/glance-tests/2",
|
||||
'properties': []}]
|
||||
'properties': []},
|
||||
{'id': 3,
|
||||
'name': 'fake iso image',
|
||||
'status': 'active',
|
||||
'disk_format': 'iso',
|
||||
'container_format': 'bare',
|
||||
'is_public': False,
|
||||
'created_at': datetime.datetime.utcnow(),
|
||||
'updated_at': datetime.datetime.utcnow(),
|
||||
'deleted_at': None,
|
||||
'deleted': False,
|
||||
'checksum': None,
|
||||
'size': 19,
|
||||
'location': "file:///tmp/glance-tests/3",
|
||||
'properties': {}}]
|
||||
|
||||
def __init__(self):
|
||||
self.images = FakeDatastore.FIXTURES
|
||||
self.next_id = 3
|
||||
self.next_id = 4
|
||||
|
||||
def image_create(self, _context, values):
|
||||
|
||||
@@ -401,3 +415,4 @@ def stub_out_registry_db_image_api(stubs):
|
||||
fake_datastore.image_get)
|
||||
stubs.Set(glance.registry.db.api, 'image_get_all_public',
|
||||
fake_datastore.image_get_all_public)
|
||||
return fake_datastore.next_id
|
||||
|
@@ -37,7 +37,7 @@ class TestRegistryAPI(unittest.TestCase):
|
||||
"""Establish a clean test environment"""
|
||||
self.stubs = stubout.StubOutForTesting()
|
||||
stubs.stub_out_registry_and_store_server(self.stubs)
|
||||
stubs.stub_out_registry_db_image_api(self.stubs)
|
||||
self.next_image_id = stubs.stub_out_registry_db_image_api(self.stubs)
|
||||
stubs.stub_out_filesystem_backend()
|
||||
self.api = rserver.API({'verbose': VERBOSE,
|
||||
'debug': DEBUG})
|
||||
@@ -134,14 +134,14 @@ class TestRegistryAPI(unittest.TestCase):
|
||||
self.assertEquals(v, res_dict['image'][k])
|
||||
|
||||
# Test ID auto-assigned properly
|
||||
self.assertEquals(3, res_dict['image']['id'])
|
||||
self.assertEquals(self.next_image_id, res_dict['image']['id'])
|
||||
|
||||
# Test status was updated properly
|
||||
self.assertEquals('active', res_dict['image']['status'])
|
||||
|
||||
def test_create_image_with_bad_container_format(self):
|
||||
"""Tests proper exception is raised if a bad disk_format is set"""
|
||||
fixture = {'id': 3,
|
||||
fixture = {'id': self.next_image_id,
|
||||
'name': 'fake public image',
|
||||
'is_public': True,
|
||||
'disk_format': 'vhd',
|
||||
@@ -158,7 +158,7 @@ class TestRegistryAPI(unittest.TestCase):
|
||||
|
||||
def test_create_image_with_bad_disk_format(self):
|
||||
"""Tests proper exception is raised if a bad disk_format is set"""
|
||||
fixture = {'id': 3,
|
||||
fixture = {'id': self.next_image_id,
|
||||
'name': 'fake public image',
|
||||
'is_public': True,
|
||||
'disk_format': 'invalid',
|
||||
@@ -192,7 +192,7 @@ class TestRegistryAPI(unittest.TestCase):
|
||||
|
||||
def test_create_image_with_bad_status(self):
|
||||
"""Tests proper exception is raised if a bad status is set"""
|
||||
fixture = {'id': 3,
|
||||
fixture = {'id': self.next_image_id,
|
||||
'name': 'fake public image',
|
||||
'is_public': True,
|
||||
'disk_format': 'vhd',
|
||||
@@ -232,7 +232,7 @@ class TestRegistryAPI(unittest.TestCase):
|
||||
image"""
|
||||
fixture = {'status': 'killed'}
|
||||
|
||||
req = webob.Request.blank('/images/3')
|
||||
req = webob.Request.blank('/images/' + str(self.next_image_id))
|
||||
|
||||
req.method = 'PUT'
|
||||
req.body = json.dumps(dict(image=fixture))
|
||||
@@ -328,7 +328,7 @@ class TestRegistryAPI(unittest.TestCase):
|
||||
"""Tests proper exception is raised if attempt to delete non-existing
|
||||
image"""
|
||||
|
||||
req = webob.Request.blank('/images/3')
|
||||
req = webob.Request.blank('/images/' + str(self.next_image_id))
|
||||
|
||||
req.method = 'DELETE'
|
||||
|
||||
@@ -342,7 +342,7 @@ class TestGlanceAPI(unittest.TestCase):
|
||||
"""Establish a clean test environment"""
|
||||
self.stubs = stubout.StubOutForTesting()
|
||||
stubs.stub_out_registry_and_store_server(self.stubs)
|
||||
stubs.stub_out_registry_db_image_api(self.stubs)
|
||||
self.next_image_id = stubs.stub_out_registry_db_image_api(self.stubs)
|
||||
stubs.stub_out_filesystem_backend()
|
||||
sql_connection = os.environ.get('GLANCE_SQL_CONNECTION', "sqlite://")
|
||||
options = {'verbose': VERBOSE,
|
||||
@@ -442,7 +442,7 @@ class TestGlanceAPI(unittest.TestCase):
|
||||
|
||||
res_body = json.loads(res.body)['image']
|
||||
self.assertEquals(res_body['location'],
|
||||
'file:///tmp/glance-tests/3')
|
||||
'file:///tmp/glance-tests/' + str(self.next_image_id))
|
||||
|
||||
# Test that the Location: header is set to the URI to
|
||||
# edit the newly-created image, as required by APP.
|
||||
@@ -450,7 +450,8 @@ class TestGlanceAPI(unittest.TestCase):
|
||||
self.assertTrue('location' in res.headers,
|
||||
"'location' not in response headers.\n"
|
||||
"res.headerlist = %r" % res.headerlist)
|
||||
self.assertTrue('/images/3' in res.headers['location'])
|
||||
self.assertTrue('/images/' + str(self.next_image_id)
|
||||
in res.headers['location'])
|
||||
|
||||
def test_image_is_checksummed(self):
|
||||
"""Test that the image contents are checksummed properly"""
|
||||
@@ -473,9 +474,9 @@ class TestGlanceAPI(unittest.TestCase):
|
||||
|
||||
res_body = json.loads(res.body)['image']
|
||||
self.assertEquals(res_body['location'],
|
||||
'file:///tmp/glance-tests/3')
|
||||
'file:///tmp/glance-tests/' + str(self.next_image_id))
|
||||
self.assertEquals(image_checksum, res_body['checksum'],
|
||||
"Mismatched checksum. Expected %s, got %s" %
|
||||
"Mismatched checksum. Expected %s, got %s" %
|
||||
(image_checksum, res_body['checksum']))
|
||||
|
||||
def test_etag_equals_checksum_header(self):
|
||||
@@ -500,7 +501,7 @@ class TestGlanceAPI(unittest.TestCase):
|
||||
# HEAD the image and check the ETag equals the checksum header...
|
||||
expected_headers = {'x-image-meta-checksum': image_checksum,
|
||||
'etag': image_checksum}
|
||||
req = webob.Request.blank("/images/3")
|
||||
req = webob.Request.blank("/images/" + str(self.next_image_id))
|
||||
req.method = 'HEAD'
|
||||
res = req.get_response(self.api)
|
||||
self.assertEquals(res.status_int, 200)
|
||||
@@ -533,9 +534,9 @@ class TestGlanceAPI(unittest.TestCase):
|
||||
self.assertEquals(res.status_int, webob.exc.HTTPBadRequest.code)
|
||||
|
||||
# Test the image was killed...
|
||||
expected_headers = {'x-image-meta-id': '3',
|
||||
expected_headers = {'x-image-meta-id': str(self.next_image_id),
|
||||
'x-image-meta-status': 'killed'}
|
||||
req = webob.Request.blank("/images/3")
|
||||
req = webob.Request.blank("/images/" + str(self.next_image_id))
|
||||
req.method = 'HEAD'
|
||||
res = req.get_response(self.api)
|
||||
self.assertEquals(res.status_int, 200)
|
||||
|
@@ -51,7 +51,7 @@ class TestRegistryClient(unittest.TestCase):
|
||||
def setUp(self):
|
||||
"""Establish a clean test environment"""
|
||||
self.stubs = stubout.StubOutForTesting()
|
||||
stubs.stub_out_registry_db_image_api(self.stubs)
|
||||
self.next_image_id = stubs.stub_out_registry_db_image_api(self.stubs)
|
||||
stubs.stub_out_registry_and_store_server(self.stubs)
|
||||
self.client = rclient.RegistryClient("0.0.0.0")
|
||||
|
||||
@@ -127,10 +127,10 @@ class TestRegistryClient(unittest.TestCase):
|
||||
new_image = self.client.add_image(fixture)
|
||||
|
||||
# Test ID auto-assigned properly
|
||||
self.assertEquals(3, new_image['id'])
|
||||
self.assertEquals(self.next_image_id, new_image['id'])
|
||||
|
||||
# Test all other attributes set
|
||||
data = self.client.get_image(3)
|
||||
data = self.client.get_image(self.next_image_id)
|
||||
|
||||
for k, v in fixture.items():
|
||||
self.assertEquals(v, data[k])
|
||||
@@ -152,7 +152,7 @@ class TestRegistryClient(unittest.TestCase):
|
||||
new_image = self.client.add_image(fixture)
|
||||
|
||||
# Test ID auto-assigned properly
|
||||
self.assertEquals(3, new_image['id'])
|
||||
self.assertEquals(self.next_image_id, new_image['id'])
|
||||
|
||||
for k, v in fixture.items():
|
||||
self.assertEquals(v, new_image[k])
|
||||
@@ -179,7 +179,7 @@ class TestRegistryClient(unittest.TestCase):
|
||||
|
||||
def test_add_image_with_bad_status(self):
|
||||
"""Tests proper exception is raised if a bad status is set"""
|
||||
fixture = {'id': 3,
|
||||
fixture = {'id': self.next_image_id,
|
||||
'name': 'fake public image',
|
||||
'is_public': True,
|
||||
'disk_format': 'vmdk',
|
||||
@@ -208,7 +208,7 @@ class TestRegistryClient(unittest.TestCase):
|
||||
|
||||
def test_update_image_not_existing(self):
|
||||
"""Tests non existing image update doesn't work"""
|
||||
fixture = {'id': 3,
|
||||
fixture = {'id': self.next_image_id,
|
||||
'name': 'fake public image',
|
||||
'is_public': True,
|
||||
'disk_format': 'vmdk',
|
||||
@@ -218,7 +218,7 @@ class TestRegistryClient(unittest.TestCase):
|
||||
|
||||
self.assertRaises(exception.NotFound,
|
||||
self.client.update_image,
|
||||
3,
|
||||
self.next_image_id,
|
||||
fixture)
|
||||
|
||||
def test_delete_image(self):
|
||||
@@ -240,7 +240,7 @@ class TestRegistryClient(unittest.TestCase):
|
||||
|
||||
self.assertRaises(exception.NotFound,
|
||||
self.client.delete_image,
|
||||
3)
|
||||
self.next_image_id)
|
||||
|
||||
|
||||
class TestClient(unittest.TestCase):
|
||||
@@ -253,7 +253,7 @@ class TestClient(unittest.TestCase):
|
||||
def setUp(self):
|
||||
"""Establish a clean test environment"""
|
||||
self.stubs = stubout.StubOutForTesting()
|
||||
stubs.stub_out_registry_db_image_api(self.stubs)
|
||||
self.next_image_id = stubs.stub_out_registry_db_image_api(self.stubs)
|
||||
stubs.stub_out_registry_and_store_server(self.stubs)
|
||||
stubs.stub_out_filesystem_backend()
|
||||
self.client = client.Client("0.0.0.0", doc_root="")
|
||||
@@ -290,7 +290,7 @@ class TestClient(unittest.TestCase):
|
||||
|
||||
self.assertRaises(exception.NotFound,
|
||||
self.client.get_image,
|
||||
3)
|
||||
self.next_image_id)
|
||||
|
||||
def test_get_image_index(self):
|
||||
"""Test correct set of public image returned"""
|
||||
@@ -347,6 +347,23 @@ class TestClient(unittest.TestCase):
|
||||
for k, v in fixture.items():
|
||||
self.assertEquals(v, data[k])
|
||||
|
||||
def test_get_image_iso_meta(self):
|
||||
"""Tests that the detailed info about an iso image is returned"""
|
||||
fixture = {'id': 3,
|
||||
'name': 'fake iso image',
|
||||
'is_public': False,
|
||||
'disk_format': 'iso',
|
||||
'container_format': 'bare',
|
||||
'status': 'active',
|
||||
'size': 19,
|
||||
'location': "file:///tmp/glance-tests/3",
|
||||
'properties': {}}
|
||||
|
||||
data = self.client.get_image_meta(3)
|
||||
|
||||
for k, v in fixture.items():
|
||||
self.assertEquals(v, data[k])
|
||||
|
||||
def test_get_image_non_existing(self):
|
||||
"""Tests that NotFound is raised when getting a non-existing image"""
|
||||
|
||||
@@ -378,10 +395,10 @@ class TestClient(unittest.TestCase):
|
||||
new_image_id = new_image['id']
|
||||
|
||||
# Test ID auto-assigned properly
|
||||
self.assertEquals(3, new_image_id)
|
||||
self.assertEquals(self.next_image_id, new_image_id)
|
||||
|
||||
# Test all other attributes set
|
||||
data = self.client.get_image_meta(3)
|
||||
data = self.client.get_image_meta(self.next_image_id)
|
||||
|
||||
for k, v in fixture.items():
|
||||
self.assertEquals(v, data[k])
|
||||
@@ -404,10 +421,10 @@ class TestClient(unittest.TestCase):
|
||||
new_image_id = new_image['id']
|
||||
|
||||
# Test ID auto-assigned properly
|
||||
self.assertEquals(3, new_image_id)
|
||||
self.assertEquals(self.next_image_id, new_image_id)
|
||||
|
||||
# Test all other attributes set
|
||||
data = self.client.get_image_meta(3)
|
||||
data = self.client.get_image_meta(self.next_image_id)
|
||||
|
||||
for k, v in fixture.items():
|
||||
self.assertEquals(v, data[k])
|
||||
@@ -416,6 +433,48 @@ class TestClient(unittest.TestCase):
|
||||
self.assertTrue('status' in data)
|
||||
self.assertEquals('active', data['status'])
|
||||
|
||||
def test_add_image_with_iso_properties(self):
|
||||
"""Tests that we can add image metadata with iso disk format"""
|
||||
fixture = {'name': 'fake public iso',
|
||||
'is_public': True,
|
||||
'disk_format': 'iso',
|
||||
'container_format': 'bare',
|
||||
'size': 19,
|
||||
'location': "file:///tmp/glance-tests/2",
|
||||
'properties': {'install': 'Bindows Heaven'},
|
||||
}
|
||||
new_image = self.client.add_image(fixture)
|
||||
new_image_id = new_image['id']
|
||||
|
||||
# Test ID auto-assigned properly
|
||||
self.assertEquals(self.next_image_id, new_image_id)
|
||||
|
||||
# Test all other attributes set
|
||||
data = self.client.get_image_meta(self.next_image_id)
|
||||
|
||||
for k, v in fixture.items():
|
||||
self.assertEquals(v, data[k])
|
||||
|
||||
# Test status was updated properly
|
||||
self.assertTrue('status' in data)
|
||||
self.assertEquals('active', data['status'])
|
||||
|
||||
def test_add_image_with_bad_iso_properties(self):
|
||||
"""Tests that we can add image metadata with iso disk format"""
|
||||
fixture = {'name': 'fake public iso',
|
||||
'is_public': True,
|
||||
'disk_format': 'iso',
|
||||
'container_format': 'vhd',
|
||||
'size': 19,
|
||||
'location': "file:///tmp/glance-tests/"
|
||||
+ str(self.next_image_id),
|
||||
'properties': {'install': 'Bindows Heaven'},
|
||||
}
|
||||
|
||||
self.assertRaises(exception.Invalid,
|
||||
self.client.add_image,
|
||||
fixture)
|
||||
|
||||
def test_add_image_already_exists(self):
|
||||
"""Tests proper exception is raised if image with ID already exists"""
|
||||
fixture = {'id': 2,
|
||||
@@ -460,9 +519,9 @@ class TestClient(unittest.TestCase):
|
||||
|
||||
new_image = self.client.add_image(fixture, image_data_fixture)
|
||||
new_image_id = new_image['id']
|
||||
self.assertEquals(3, new_image_id)
|
||||
self.assertEquals(self.next_image_id, new_image_id)
|
||||
|
||||
new_meta, new_image_chunks = self.client.get_image(3)
|
||||
new_meta, new_image_chunks = self.client.get_image(self.next_image_id)
|
||||
|
||||
new_image_data = ""
|
||||
for image_chunk in new_image_chunks:
|
||||
@@ -495,12 +554,12 @@ class TestClient(unittest.TestCase):
|
||||
|
||||
new_image = self.client.add_image(fixture, open(tmp_image_filepath))
|
||||
new_image_id = new_image['id']
|
||||
self.assertEquals(3, new_image_id)
|
||||
self.assertEquals(self.next_image_id, new_image_id)
|
||||
|
||||
if os.path.exists(tmp_image_filepath):
|
||||
os.unlink(tmp_image_filepath)
|
||||
|
||||
new_meta, new_image_chunks = self.client.get_image(3)
|
||||
new_meta, new_image_chunks = self.client.get_image(self.next_image_id)
|
||||
|
||||
new_image_data = ""
|
||||
for image_chunk in new_image_chunks:
|
||||
@@ -523,9 +582,9 @@ class TestClient(unittest.TestCase):
|
||||
|
||||
new_image = self.client.add_image(fixture, image_data_fixture)
|
||||
new_image_id = new_image['id']
|
||||
self.assertEquals(3, new_image_id)
|
||||
self.assertEquals(self.next_image_id, new_image_id)
|
||||
|
||||
new_meta, new_image_chunks = self.client.get_image(3)
|
||||
new_meta, new_image_chunks = self.client.get_image(self.next_image_id)
|
||||
|
||||
new_image_data = ""
|
||||
for image_chunk in new_image_chunks:
|
||||
@@ -570,7 +629,7 @@ class TestClient(unittest.TestCase):
|
||||
|
||||
def test_update_image_not_existing(self):
|
||||
"""Tests non existing image update doesn't work"""
|
||||
fixture = {'id': 3,
|
||||
fixture = {'id': self.next_image_id,
|
||||
'name': 'fake public image',
|
||||
'is_public': True,
|
||||
'disk_format': 'vhd',
|
||||
@@ -580,7 +639,7 @@ class TestClient(unittest.TestCase):
|
||||
|
||||
self.assertRaises(exception.NotFound,
|
||||
self.client.update_image,
|
||||
3,
|
||||
self.next_image_id,
|
||||
fixture)
|
||||
|
||||
def test_delete_image(self):
|
||||
@@ -602,4 +661,4 @@ class TestClient(unittest.TestCase):
|
||||
|
||||
self.assertRaises(exception.NotFound,
|
||||
self.client.delete_image,
|
||||
3)
|
||||
self.next_image_id)
|
||||
|
Reference in New Issue
Block a user