示例#1
0
class TestDeletion(unittest.TestCase):

    def setUp(self):
        self.registry = Registry()
        self.registry.http = MockRequests()
        self.registry.hostname = "http://testdomain.com"
        self.registry.http.reset_return_value(200, "MOCK_DIGEST")
        self.registry.http.return_value.headers = {
            'Content-Length': '4935',
            'Docker-Content-Digest': 'MOCK_DIGEST_HEADER',
            'X-Content-Type-Options': 'nosniff'
        }

    def test_delete_digests_dry_run(self):
        status, response = self.registry.delete_digest("image1", "MOCK_DIGEST", True)
        self.assertTrue(status)
        self.assertEqual(response, "Would delete digest {0}".format("MOCK_DIGEST"))

    def test_tag_digests(self):
        digests_to_delete = find_digests_to_delete(self.registry, "image1", tags_to_delete=["1"], tags_to_keep=[])
        delete_digests(self.registry, "image1", False, digests_to_delete)
        calls = [
            call(
                'HEAD',
                'http://testdomain.com/v2/image1/manifests/1',
                auth=(None, None),
                headers=self.registry.HEADERS,
                verify=True
            ),
            call(
                "DELETE",
                "http://testdomain.com/v2/image1/manifests/MOCK_DIGEST_HEADER",
                auth=(None, None),
                headers=self.registry.HEADERS,
                verify=True
            )
        ]
        self.registry.http.request.assert_has_calls(calls, any_order=True)
        self.assertEqual(self.registry.http.request.call_count, 2)
        self.assertTrue("MOCK_DIGEST_HEADER" in digests_to_delete)

    def test_delete_tag_ok(self):
        status, response = self.registry.delete_digest("image1", "MOCK_DIGEST", False)
        self.assertEqual(status, True)
        self.assertEqual(response, "Deleted digest {0}".format("MOCK_DIGEST"))

    def test_delete_tag_ignored(self):

        digests_to_delete = find_digests_to_delete(self.registry, "image1", tags_to_delete=["test_tag"], tags_to_keep=["test_tag_ignore"])
        delete_digests(self.registry, "image1", False, digests_to_delete)

        calls = [
            call(
                "HEAD",
                "http://testdomain.com/v2/image1/manifests/test_tag",
                auth=(None, None),
                headers=self.registry.HEADERS,
                verify=True
            ),
            call(
                "HEAD",
                "http://testdomain.com/v2/image1/manifests/test_tag_ignore",
                auth=(None, None),
                headers=self.registry.HEADERS,
                verify=True
            )
        ]
        self.registry.http.request.assert_has_calls(calls, any_order=True)
        self.assertEqual(self.registry.http.request.call_count, 2)

    def test_delete_tag_no_digest(self):
        self.registry.http.reset_return_value(400, "")
        status, response = self.registry.delete_digest('image1', 'MOCK_DIGEST', False)
        self.assertFalse(status)
        self.assertEqual(self.registry.last_error, 400)