def setUp(self): self.name = name = 'image1' self.id1 = id = '0001' self.region = region = 'Valladolid' self.owner = owner = '00000001' self.is_public = is_public = True self.checksum = checksum = 'cheksum00001' self.size = size = 1500000 self.status = status = 'active' self.props = props = {'p1': 'v1', 'p2': 'v2', 'p3': 'v3'} self.image1 = GlanceSyncImage( name, id, region, owner, is_public, checksum, size, status, props) self.name2 = name = 'image2' self.id2 = id = '0002' self.checksum2 = checksum = 'cheksum00002' self.props2 = props = {'p1': 'v1', 'p2': 'v2bis'} self.image2 = GlanceSyncImage( name, id, region, owner, is_public, checksum, size, status, props) self.id3 = id = '0003' self.size3 = size = 100000 self.props3 = props = {} self.checksum3 = checksum = 'cheksum00003' self.image3 = GlanceSyncImage( name, id, region, owner, is_public, checksum, size, status, props) self.id4 = id = '0004' self.props4 = props = {} self.checksum4 = checksum = 'checksum0004' self.size4 = size = 100000 self.image4 = GlanceSyncImage( name, id, region, owner, False, checksum, size, status, props)
def setUp(self): """create self.facade, create also a GlanceSyncImage object and a temporal file. Use a mock to replace osclients""" target = dict() target['target_name'] = 'master' target['user'] = '******' target['password'] = '******' target['keystone_url'] = 'http://127.0.0.1/' target['tenant'] = 'faketenant' target['use_keystone_v3'] = False self.target = target self.region = 'fakeregion' targets = dict() targets['master'] = target self.region_obj = GlanceSyncRegion(self.region, targets) mock_osclients.reset_mock() self.facade = ServersFacade(self.target) self.facade.images_dir = None image = GlanceSyncImage('imagetest', '01', self.region, None, False) image.raw = dict() image.raw['disk_format'] = 'qcow2' image.raw['is_public'] = False image.raw['protected'] = False image.raw['container_format'] = 'bare' image.raw['min_ram'] = '0' image.raw['min_disk'] = '0' self.image = image
def create_image(self): """function to create_image, used by several tests; check that UUID is returned""" image = GlanceSyncImage('imagetest', '01', self.region, None, False) image.raw = dict() image.raw['disk_format'] = 'qcow2' image.raw['is_public'] = False image.raw['protected'] = False image.raw['container_format'] = 'bare' image.raw['min_ram'] = '0' image.raw['min_disk'] = '0' image.user_properties['key'] = 'original_value' self.created = self.facade.upload_image(self.region_obj, image) self.assertIsNotNone(self.created)
def setUp(self): self.name = name = 'image1' self.owner = owner = 'owner1' size = 300000 checksum = 'fac084184af34b' self.id1 = id = '0001' self.props1 = p = {'nid': 5043, 'type': 6043, 'localprop': 8888} self.master_images = dict() self.master_images[name] = GlanceSyncImage( name, id, 'Valladolid', owner, True, checksum, size, 'active', p) self.owner2 = owner = 'owner2' self.id2 = id = '000A' self.props1 = p = {'nid': 5043, 'type': 6043, 'localprop': 8889} self.image = GlanceSyncImage( name, id, 'Burgos', owner, True, checksum, size, 'active', p)
class TestGlanceSyncImageRegion(unittest.TestCase): """Class to test all methods but compare_with_masterregion, that has its own testing class""" def setUp(self): self.name = name = 'image1' self.id1 = id = '0001' self.region = region = 'Valladolid' self.owner = owner = '00000001' self.is_public = is_public = True self.checksum = checksum = 'cheksum00001' self.size = size = 1500000 self.status = status = 'active' self.props = props = {'p1': 'v1', 'p2': 'v2', 'p3': 'v3'} self.image1 = GlanceSyncImage( name, id, region, owner, is_public, checksum, size, status, props) self.name2 = name = 'image2' self.id2 = id = '0002' self.checksum2 = checksum = 'cheksum00002' self.props2 = props = {'p1': 'v1', 'p2': 'v2bis'} self.image2 = GlanceSyncImage( name, id, region, owner, is_public, checksum, size, status, props) self.id3 = id = '0003' self.size3 = size = 100000 self.props3 = props = {} self.checksum3 = checksum = 'cheksum00003' self.image3 = GlanceSyncImage( name, id, region, owner, is_public, checksum, size, status, props) self.id4 = id = '0004' self.props4 = props = {} self.checksum4 = checksum = 'checksum0004' self.size4 = size = 100000 self.image4 = GlanceSyncImage( name, id, region, owner, False, checksum, size, status, props) def test_contstructor(self): """Only check that each value is in the correct position""" self.assertEquals(self.image1.name, self.name) self.assertEquals(self.image1.id, self.id1) self.assertEquals(self.image1.is_public, self.is_public) self.assertEquals(self.image1.checksum, self.checksum) self.assertEquals(self.image1.size, self.size) self.assertEquals(self.image1.status, self.status) self.assertEquals(self.image1.user_properties, self.props) def test_user_properties_independent(self): """Verify that stored user properties are independent from the ones passed in the constructor (modify this last and check that object content has not changed)""" original = copy.copy(self.props) del(self.props['p1']) self.assertNotEquals(self.props, self.image1.user_properties) self.assertEquals(original, self.image1.user_properties) def test_eq(self): """Test == and != operators""" self.assertNotEquals(self.image1, self.image2) self.assertEquals(self.image1, copy.deepcopy(self.image1)) def test_to_field_list(self): """Test method to_field_list, without filter""" result = [ self.region, self.name, self.id1, self.status, self.size, self.checksum, self.owner, self.is_public, str(self.props)] self.assertEquals(self.image1.to_field_list(None), result) def test_to_field_list_filtered(self): """test method to_field_lst, with filter""" props = ['p1', 'p2'] result = [ self.region, self.name, self.id1, self.status, self.size, self.checksum, self.owner, self.is_public, self.props['p1'], self.props['p2']] self.assertEquals(self.image1.to_field_list(props), result) def test_from_field_list(self): """test method from_field_list""" l = self.image1.to_field_list() image = GlanceSyncImage.from_field_list(l) self.assertEquals(image, self.image1) def test_csv_userproperties(self): """test method csv_userproperties""" props = ('p1', 'missing', 'p2') result = self.name + ',' + self.props['p1'] + ',,' + self.props['p2'] self.assertEquals(self.image1.csv_userproperties(props), result) def test_is_synchronisable_nometada_nofunction(self): """Test is_synchronisable method, without medata_set nor filter function: *All public images are synchronisable. *A private image is syncrhonisable only if forcesync. """ force_sync = list() metadata_s = set() self.assertTrue(self.image1.is_synchronisable(metadata_s, force_sync)) self.assertTrue(self.image2.is_synchronisable(metadata_s, force_sync)) self.assertTrue(self.image3.is_synchronisable(metadata_s, force_sync)) self.assertFalse(self.image4.is_synchronisable(metadata_s, force_sync)) force_sync = [self.id4] self.assertTrue(self.image4.is_synchronisable(metadata_s, force_sync)) def test_is_synchronisable_metada_nofunction(self): """Test is_synchronisable method, with metadata_set but without filter function *Images without p3 property are not synchronisable, unless they are included in forcesync *A private image is syncrhonisable only if forcesync. """ force_sync = set() metadata_s = set(['p3']) self.assertTrue(self.image1.is_synchronisable(metadata_s, force_sync)) self.assertFalse(self.image2.is_synchronisable(metadata_s, force_sync)) self.assertFalse(self.image3.is_synchronisable(metadata_s, force_sync)) self.assertFalse(self.image4.is_synchronisable(metadata_s, force_sync)) force_sync = set([self.id2, self.id4]) self.assertTrue(self.image1.is_synchronisable(metadata_s, force_sync)) self.assertTrue(self.image2.is_synchronisable(metadata_s, force_sync)) self.assertFalse(self.image3.is_synchronisable(metadata_s, force_sync)) self.assertTrue(self.image4.is_synchronisable(metadata_s, force_sync)) # Images without p3 nor p2 properties are not synchronisable, unless # they are included in forcesync force_sync = set() metadata_s = set(['p3', 'p2']) self.assertTrue(self.image1.is_synchronisable(metadata_s, force_sync)) self.assertTrue(self.image2.is_synchronisable(metadata_s, force_sync)) self.assertFalse(self.image3.is_synchronisable(metadata_s, force_sync)) self.assertFalse(self.image4.is_synchronisable(metadata_s, force_sync)) force_sync = set([self.id3]) self.assertTrue(self.image1.is_synchronisable(metadata_s, force_sync)) self.assertTrue(self.image2.is_synchronisable(metadata_s, force_sync)) self.assertTrue(self.image3.is_synchronisable(metadata_s, force_sync)) self.assertFalse(self.image4.is_synchronisable(metadata_s, force_sync)) def test_is_synchronisable_nometadata_function(self): """Test is_synchronisable method, using a filter function. When using a function, private images may also match.""" func = "'p2' in image.user_properties and "\ "image.user_properties['p2']=='v2bis' or image.size <= 100000" m = set() force = set() self.assertFalse(self.image1.is_synchronisable(m, force, func)) self.assertTrue(self.image2.is_synchronisable(m, force, func)) self.assertTrue(self.image3.is_synchronisable(m, force, func)) self.assertTrue(self.image4.is_synchronisable(m, force, func)) force = set([self.id1]) self.assertTrue(self.image1.is_synchronisable(m, force, func)) def test_is_synchronisable_metadata_function(self): """Test is_sycnhronisable method, with a function that also checks metadata_set""" m = set(['p3']) force = set() func = "image.is_public and metadata_set.intersection("\ "image.user_properties.keys())" self.assertTrue(self.image1.is_synchronisable(m, force, func)) self.assertFalse(self.image2.is_synchronisable(m, force, func)) self.assertFalse(self.image3.is_synchronisable(m, force, func)) self.assertFalse(self.image4.is_synchronisable(m, force, func))
class TestGlanceSyncImageCompare(unittest.TestCase): """Class to test compare_with_masterregion under different conditions""" def setUp(self): self.name = name = 'image1' self.owner = owner = 'owner1' size = 300000 checksum = 'fac084184af34b' self.id1 = id = '0001' self.props1 = p = {'nid': 5043, 'type': 6043, 'localprop': 8888} self.master_images = dict() self.master_images[name] = GlanceSyncImage( name, id, 'Valladolid', owner, True, checksum, size, 'active', p) self.owner2 = owner = 'owner2' self.id2 = id = '000A' self.props1 = p = {'nid': 5043, 'type': 6043, 'localprop': 8889} self.image = GlanceSyncImage( name, id, 'Burgos', owner, True, checksum, size, 'active', p) def test_compare_with_props(self): """check that images are synchronised, although some properties differ, the ones included in the set are matching""" rslt = self.image.compare_with_masterregion(self.master_images, None) self.assertEquals(rslt, '#') prop_eval = set(['nid', 'type']) r = self.image.compare_with_masterregion(self.master_images, prop_eval) self.assertEquals(r, '') def test_compare_with_ami(self): """checks with kernel_id and ramdisk_id""" prop_eval = set(['nid', 'type']) self.master_images[self.name].user_properties['kernel_id'] = 350 self.master_images[self.name].user_properties['ramdisk_id'] = 351 r = self.image.compare_with_masterregion(self.master_images, prop_eval) self.assertEquals(r, '#') # Different values of kernel_id and ramdisk_id is OK self.image.user_properties['kernel_id'] = 450 self.image.user_properties['ramdisk_id'] = 451 r = self.image.compare_with_masterregion(self.master_images, prop_eval) self.assertEquals(r, '') def test_compare_missing(self): """test when the image is missing""" self.image.name = 'image2' r = self.image.compare_with_masterregion(self.master_images, None) self.assertEquals(r, '+') def test_compare_private_region(self): """test when image exists but it is private in the region""" self.image.is_public = False r = self.image.compare_with_masterregion(self.master_images, None) self.assertEquals(r, '_') def test_compare_private_master(self): """test when image exists and is private in the master, public in region""" self.master_images[self.name].is_public = False r = self.image.compare_with_masterregion(self.master_images, None) self.assertEquals(r, '-') def test_compare_checksum(self): """test when the checksum differs""" self.image.checksum = '000000000000000' r = self.image.compare_with_masterregion(self.master_images, None) self.assertEquals(r, '!') def test_compare_status(self): """test when the image is in a wrong status""" self.image.status = 'pending' r = self.image.compare_with_masterregion(self.master_images, None) self.assertEquals(r, '$')
def test_from_field_list(self): """test method from_field_list""" l = self.image1.to_field_list() image = GlanceSyncImage.from_field_list(l) self.assertEquals(image, self.image1)