Пример #1
0
    def test_purge_orphaned(self, query_manager, association_manager, criteria):
        repo = mock.Mock()
        blobs = [
            {'blobSum': 'blob-0'},  # manifest => 1
            {'blobSum': 'blob-1'},  # manifest => 1
            {'blobSum': 'blob-2'},  # manifest => 1
            {'blobSum': 'blob-3'},  # manifest => 1, 2, 3  (not orphaned)
            {'blobSum': 'blob-4'},  # manifest => 1, 2
            {'blobSum': 'blob-5'},  # manifest => 2, 4     (not orphaned)
            {'blobSum': 'blob-6'},  # manifest => 2
        ]
        removed = [
            mock.Mock(
                id='manifest-1',
                type_id=constants.MANIFEST_TYPE_ID,
                metadata={'fs_layers': blobs[0:4]}),
            mock.Mock(
                id='manifest-2',
                type_id=constants.MANIFEST_TYPE_ID,
                metadata={'fs_layers': blobs[2:8]})
        ]
        others = [
            mock.Mock(
                id='manifest-3',
                type_id=constants.MANIFEST_TYPE_ID,
                metadata={'fs_layers': blobs[3:4]}),
            mock.Mock(
                id='manifest-4',
                type_id=constants.MANIFEST_TYPE_ID,
                metadata={'fs_layers': blobs[5:6]})
        ]

        query_manager.return_value.get_units_by_type.return_value = others

        # test
        importer = DockerImporter()
        importer._purge_orphaned_blobs(repo, removed)

        # validation
        criteria.assert_called_once_with(
            type_ids=[constants.BLOB_TYPE_ID],
            unit_filters={'digest': {'$in': ['blob-0', 'blob-1', 'blob-2', 'blob-4', 'blob-6']}})

        query_manager.return_value.get_units_by_type.assert_called_once_with(
            repo.id, constants.MANIFEST_TYPE_ID)
        association_manager.return_value.unassociate_by_criteria(
            repo_id=repo.id,
            criteria=criteria.return_value,
            owner_type='',  # unused
            owner_id='',    # unused
            notify_plugins=False)
Пример #2
0
    def test_purge_orphaned_all_adopted(self, query_manager,
                                        association_manager, criteria):
        repo = mock.Mock()
        blobs = [
            {
                'blobSum': 'blob-0'
            },  # manifest => 1, 3     (not orphaned)
            {
                'blobSum': 'blob-1'
            },  # manifest => 1, 3     (not orphaned)
            {
                'blobSum': 'blob-2'
            },  # manifest => 1, 3     (not orphaned)
            {
                'blobSum': 'blob-3'
            },  # manifest => 1, 2, 3  (not orphaned)
            {
                'blobSum': 'blob-4'
            },  # manifest => 1, 2, 3  (not orphaned)
            {
                'blobSum': 'blob-5'
            },  # manifest => 2, 4, 3  (not orphaned)
            {
                'blobSum': 'blob-6'
            },  # manifest => 2, 3     (not orphaned)
        ]
        removed = [
            mock.Mock(id='manifest-1',
                      type_id=constants.MANIFEST_TYPE_ID,
                      metadata={'fs_layers': blobs[0:4]}),
            mock.Mock(id='manifest-2',
                      type_id=constants.MANIFEST_TYPE_ID,
                      metadata={'fs_layers': blobs[2:8]})
        ]
        others = [
            mock.Mock(id='manifest-3',
                      type_id=constants.MANIFEST_TYPE_ID,
                      metadata={'fs_layers': blobs}),
        ]

        query_manager.return_value.get_units_by_type.return_value = others

        # test
        importer = DockerImporter()
        importer._purge_orphaned_blobs(repo, removed)

        # validation
        self.assertFalse(criteria.called)
        self.assertFalse(association_manager.called)
Пример #3
0
    def test_purge_not_manifests(self, query_manager, association_manager, criteria):
        repo = mock.Mock()
        removed = [
            mock.Mock(type_id=constants.IMAGE_TYPE_ID),
            mock.Mock(type_id=constants.IMAGE_TYPE_ID),
        ]

        # test
        importer = DockerImporter()
        importer._purge_orphaned_blobs(repo, removed)

        # validation
        self.assertFalse(query_manager.called)
        self.assertFalse(criteria.called)
        self.assertFalse(association_manager.called)
Пример #4
0
    def test_purge_not_manifests(self, query_manager, association_manager,
                                 criteria):
        repo = mock.Mock()
        removed = [
            mock.Mock(type_id=constants.IMAGE_TYPE_ID),
            mock.Mock(type_id=constants.IMAGE_TYPE_ID),
        ]

        # test
        importer = DockerImporter()
        importer._purge_orphaned_blobs(repo, removed)

        # validation
        self.assertFalse(query_manager.called)
        self.assertFalse(criteria.called)
        self.assertFalse(association_manager.called)
Пример #5
0
    def test_purge_orphaned_nothing_orphaned(self, query_manager,
                                             association_manager, criteria):
        repo = mock.Mock()
        removed = [
            mock.Mock(id='manifest-1',
                      type_id=constants.MANIFEST_TYPE_ID,
                      metadata={'fs_layers': []}),
            mock.Mock(id='manifest-2',
                      type_id=constants.MANIFEST_TYPE_ID,
                      metadata={'fs_layers': []})
        ]

        # test
        importer = DockerImporter()
        importer._purge_orphaned_blobs(repo, removed)

        # validation
        self.assertFalse(query_manager.called)
        self.assertFalse(criteria.called)
        self.assertFalse(association_manager.called)
Пример #6
0
    def test_purge_orphaned_nothing_orphaned(self, query_manager, association_manager, criteria):
        repo = mock.Mock()
        removed = [
            mock.Mock(
                id='manifest-1',
                type_id=constants.MANIFEST_TYPE_ID,
                metadata={'fs_layers': []}),
            mock.Mock(
                id='manifest-2',
                type_id=constants.MANIFEST_TYPE_ID,
                metadata={'fs_layers': []})
        ]

        # test
        importer = DockerImporter()
        importer._purge_orphaned_blobs(repo, removed)

        # validation
        self.assertFalse(query_manager.called)
        self.assertFalse(criteria.called)
        self.assertFalse(association_manager.called)
Пример #7
0
    def test_purge_orphaned_all_adopted(self, query_manager, association_manager, criteria):
        repo = mock.Mock()
        blobs = [
            {'blobSum': 'blob-0'},  # manifest => 1, 3     (not orphaned)
            {'blobSum': 'blob-1'},  # manifest => 1, 3     (not orphaned)
            {'blobSum': 'blob-2'},  # manifest => 1, 3     (not orphaned)
            {'blobSum': 'blob-3'},  # manifest => 1, 2, 3  (not orphaned)
            {'blobSum': 'blob-4'},  # manifest => 1, 2, 3  (not orphaned)
            {'blobSum': 'blob-5'},  # manifest => 2, 4, 3  (not orphaned)
            {'blobSum': 'blob-6'},  # manifest => 2, 3     (not orphaned)
        ]
        removed = [
            mock.Mock(
                id='manifest-1',
                type_id=constants.MANIFEST_TYPE_ID,
                metadata={'fs_layers': blobs[0:4]}),
            mock.Mock(
                id='manifest-2',
                type_id=constants.MANIFEST_TYPE_ID,
                metadata={'fs_layers': blobs[2:8]})
        ]
        others = [
            mock.Mock(
                id='manifest-3',
                type_id=constants.MANIFEST_TYPE_ID,
                metadata={'fs_layers': blobs}),
        ]

        query_manager.return_value.get_units_by_type.return_value = others

        # test
        importer = DockerImporter()
        importer._purge_orphaned_blobs(repo, removed)

        # validation
        self.assertFalse(criteria.called)
        self.assertFalse(association_manager.called)
Пример #8
0
    def test_purge_orphaned(self, query_manager, association_manager,
                            criteria):
        repo = mock.Mock()
        blobs = [
            {
                'blobSum': 'blob-0'
            },  # manifest => 1
            {
                'blobSum': 'blob-1'
            },  # manifest => 1
            {
                'blobSum': 'blob-2'
            },  # manifest => 1
            {
                'blobSum': 'blob-3'
            },  # manifest => 1, 2, 3  (not orphaned)
            {
                'blobSum': 'blob-4'
            },  # manifest => 1, 2
            {
                'blobSum': 'blob-5'
            },  # manifest => 2, 4     (not orphaned)
            {
                'blobSum': 'blob-6'
            },  # manifest => 2
        ]
        removed = [
            mock.Mock(id='manifest-1',
                      type_id=constants.MANIFEST_TYPE_ID,
                      metadata={'fs_layers': blobs[0:4]}),
            mock.Mock(id='manifest-2',
                      type_id=constants.MANIFEST_TYPE_ID,
                      metadata={'fs_layers': blobs[2:8]})
        ]
        others = [
            mock.Mock(id='manifest-3',
                      type_id=constants.MANIFEST_TYPE_ID,
                      metadata={'fs_layers': blobs[3:4]}),
            mock.Mock(id='manifest-4',
                      type_id=constants.MANIFEST_TYPE_ID,
                      metadata={'fs_layers': blobs[5:6]})
        ]

        query_manager.return_value.get_units_by_type.return_value = others

        # test
        importer = DockerImporter()
        importer._purge_orphaned_blobs(repo, removed)

        # validation
        criteria.assert_called_once_with(
            type_ids=[constants.BLOB_TYPE_ID],
            unit_filters={
                'digest': {
                    '$in': ['blob-0', 'blob-1', 'blob-2', 'blob-4', 'blob-6']
                }
            })

        query_manager.return_value.get_units_by_type.assert_called_once_with(
            repo.id, constants.MANIFEST_TYPE_ID)
        association_manager.return_value.unassociate_by_criteria(
            repo_id=repo.id,
            criteria=criteria.return_value,
            owner_type='',  # unused
            owner_id='',  # unused
            notify_plugins=False)