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, '$')