diff --git a/test/test_imagetree.py b/test/test_imagetree.py deleted file mode 100644 index ff62a52d7..000000000 --- a/test/test_imagetree.py +++ /dev/null @@ -1,100 +0,0 @@ -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) - - @staticmethod - def _get_base_image(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.image.get_repository_images(NAMESPACE, SIMPLE_REPO)) - all_tags = list(model.tag.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.image.get_repository_images(NAMESPACE, COMPLEX_REPO)) - all_tags = list(model.tag.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(5, len(result)) - self.assertEquals('prod', tree.tag_containing_image(result[-1])) - - def test_filtering(self): - all_images = list(model.image.get_repository_images(NAMESPACE, COMPLEX_REPO)) - all_tags = list(model.tag.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_longest_path_simple_repo_direct_lookup(self): - repository = model.repository.get_repository(NAMESPACE, SIMPLE_REPO) - all_images = list(model.image.get_repository_images(NAMESPACE, SIMPLE_REPO)) - all_tags = list(model.tag.list_repository_tags(NAMESPACE, SIMPLE_REPO)) - - base_image = self._get_base_image(all_images) - - def checker(index, image): - return True - - filtered_images = model.image.get_repository_images_without_placements( - repository, - with_ancestor=base_image) - self.assertEquals(set([f.id for f in filtered_images]), set([a.id for a in all_images])) - - tree = ImageTree(filtered_images, all_tags) - - result = tree.find_longest_path(base_image.id, checker) - self.assertEquals(3, len(result)) - self.assertEquals('latest', tree.tag_containing_image(result[-1])) - - -if __name__ == '__main__': - unittest.main() diff --git a/util/test/test_imagetree.py b/util/test/test_imagetree.py new file mode 100644 index 000000000..46e59b09c --- /dev/null +++ b/util/test/test_imagetree.py @@ -0,0 +1,82 @@ +from data import model +from util.imagetree import ImageTree + +from test.fixtures import * + +NAMESPACE = 'devtable' +SIMPLE_REPO = 'simple' +COMPLEX_REPO = 'complex' + +def _get_base_image(all_images): + for image in all_images: + if image.ancestors == '/': + return image + + return None + +def test_longest_path_simple_repo(initialized_db): + all_images = list(model.image.get_repository_images(NAMESPACE, SIMPLE_REPO)) + all_tags = list(model.tag.list_repository_tags(NAMESPACE, SIMPLE_REPO)) + tree = ImageTree(all_images, all_tags) + + base_image = _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) + assert len(result) == 3 + for index in range(0, 2): + assert result[index].id == int(ancestors[index]) + + assert tree.tag_containing_image(result[-1]) == 'latest' + +def test_longest_path_complex_repo(initialized_db): + all_images = list(model.image.get_repository_images(NAMESPACE, COMPLEX_REPO)) + all_tags = list(model.tag.list_repository_tags(NAMESPACE, COMPLEX_REPO)) + tree = ImageTree(all_images, all_tags) + + base_image = _get_base_image(all_images) + + def checker(index, image): + return True + + result = tree.find_longest_path(base_image.id, checker) + assert len(result) == 5 + assert tree.tag_containing_image(result[-1]) == 'prod' + +def test_filtering(initialized_db): + all_images = list(model.image.get_repository_images(NAMESPACE, COMPLEX_REPO)) + all_tags = list(model.tag.list_repository_tags(NAMESPACE, COMPLEX_REPO)) + tree = ImageTree(all_images, all_tags, base_filter=1245) + + base_image = _get_base_image(all_images) + + def checker(index, image): + return True + + result = tree.find_longest_path(base_image.id, checker) + assert len(result) == 0 + +def test_longest_path_simple_repo_direct_lookup(initialized_db): + repository = model.repository.get_repository(NAMESPACE, SIMPLE_REPO) + all_images = list(model.image.get_repository_images(NAMESPACE, SIMPLE_REPO)) + all_tags = list(model.tag.list_repository_tags(NAMESPACE, SIMPLE_REPO)) + + base_image = _get_base_image(all_images) + + def checker(index, image): + return True + + filtered_images = model.image.get_repository_images_without_placements( + repository, + with_ancestor=base_image) + assert set([a.id for a in all_images]) == set([f.id for f in filtered_images]) + + tree = ImageTree(filtered_images, all_tags) + + result = tree.find_longest_path(base_image.id, checker) + assert len(result) == 3 + assert tree.tag_containing_image(result[-1]) == 'latest'