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)