import unittest from app import app from util.imagetree import ImageTree from initdb import setup_database_for_testing, finished_database_for_testing from data import model NAMESPACE = 'devtable' SIMPLE_REPO = 'simple' COMPLEX_REPO = 'complex' class TestImageTree(unittest.TestCase): def setUp(self): setup_database_for_testing(self) self.app = app.test_client() self.ctx = app.test_request_context() self.ctx.__enter__() def tearDown(self): finished_database_for_testing(self) self.ctx.__exit__(True, None, None) def _get_base_image(self, all_images): for image in all_images: if image.ancestors == '/': return image return None def test_longest_path_simple_repo(self): all_images = list(model.get_repository_images(NAMESPACE, SIMPLE_REPO)) all_tags = list(model.list_repository_tags(NAMESPACE, SIMPLE_REPO)) tree = ImageTree(all_images, all_tags) base_image = self._get_base_image(all_images) tag_image = all_tags[0].image def checker(index, image): return True ancestors = tag_image.ancestors.split('/')[2:-1] # Skip the first image. result = tree.find_longest_path(base_image.id, checker) self.assertEquals(3, len(result)) for index in range(0, 2): self.assertEquals(int(ancestors[index]), result[index].id) self.assertEquals('latest', tree.tag_containing_image(result[-1])) def test_longest_path_complex_repo(self): all_images = list(model.get_repository_images(NAMESPACE, COMPLEX_REPO)) all_tags = list(model.list_repository_tags(NAMESPACE, COMPLEX_REPO)) tree = ImageTree(all_images, all_tags) base_image = self._get_base_image(all_images) def checker(index, image): return True result = tree.find_longest_path(base_image.id, checker) self.assertEquals(4, len(result)) self.assertEquals('v2.0', tree.tag_containing_image(result[-1])) def test_filtering(self): all_images = list(model.get_repository_images(NAMESPACE, COMPLEX_REPO)) all_tags = list(model.list_repository_tags(NAMESPACE, COMPLEX_REPO)) tree = ImageTree(all_images, all_tags, base_filter=1245) base_image = self._get_base_image(all_images) def checker(index, image): return True result = tree.find_longest_path(base_image.id, checker) self.assertEquals(0, len(result)) def test_find_tag_parent_image(self): all_images = list(model.get_repository_images(NAMESPACE, COMPLEX_REPO)) all_tags = list(model.list_repository_tags(NAMESPACE, COMPLEX_REPO)) tree = ImageTree(all_images, all_tags) base_image = self._get_base_image(all_images) def checker(index, image): return True result = tree.find_longest_path(base_image.id, checker) self.assertEquals(4, len(result)) # Only use the first two images. They don't have tags, but the method should # still return the tag that contains them. self.assertEquals('v2.0', tree.tag_containing_image(result[0])) if __name__ == '__main__': unittest.main()