parent
3fdadb51b7
commit
7c572fd218
4 changed files with 135 additions and 29 deletions
|
@ -1213,7 +1213,7 @@ class SquashingTests(RegistryTestCaseMixin, V1RegistryPushMixin, LiveServerTestC
|
|||
def get_squashed_image(self):
|
||||
response = self.conduct('GET', '/c1/squash/devtable/newrepo/latest', auth='sig')
|
||||
tar = tarfile.open(fileobj=StringIO(response.content))
|
||||
return tar
|
||||
return tar, response.content
|
||||
|
||||
def test_squashed_changes(self):
|
||||
initial_images = [
|
||||
|
@ -1228,7 +1228,7 @@ class SquashingTests(RegistryTestCaseMixin, V1RegistryPushMixin, LiveServerTestC
|
|||
initial_image_id = '91081df45b58dc62dd207441785eef2b895f0383fbe601c99a3cf643c79957dc'
|
||||
|
||||
# Pull the squashed version of the tag.
|
||||
tar = self.get_squashed_image()
|
||||
tar, _ = self.get_squashed_image()
|
||||
self.assertTrue(initial_image_id in tar.getnames())
|
||||
|
||||
# Change the images.
|
||||
|
@ -1243,7 +1243,7 @@ class SquashingTests(RegistryTestCaseMixin, V1RegistryPushMixin, LiveServerTestC
|
|||
updated_image_id = '38df4bd4cdffc6b7d656dbd2813c73e864f2d362ad887c999ac315224ad281ac'
|
||||
|
||||
# Pull the squashed version of the tag and ensure it has changed.
|
||||
tar = self.get_squashed_image()
|
||||
tar, _ = self.get_squashed_image()
|
||||
self.assertTrue(updated_image_id in tar.getnames())
|
||||
|
||||
|
||||
|
@ -1264,7 +1264,7 @@ class SquashingTests(RegistryTestCaseMixin, V1RegistryPushMixin, LiveServerTestC
|
|||
|
||||
# Pull the squashed version of the tag.
|
||||
initial_image_id = '91081df45b58dc62dd207441785eef2b895f0383fbe601c99a3cf643c79957dc'
|
||||
tar = self.get_squashed_image()
|
||||
tar, _ = self.get_squashed_image()
|
||||
self.assertTrue(initial_image_id in tar.getnames())
|
||||
|
||||
|
||||
|
@ -1293,7 +1293,7 @@ class SquashingTests(RegistryTestCaseMixin, V1RegistryPushMixin, LiveServerTestC
|
|||
'%s/VERSION' % expected_image_id,
|
||||
'%s/layer.tar' % expected_image_id]
|
||||
|
||||
tar = self.get_squashed_image()
|
||||
tar, _ = self.get_squashed_image()
|
||||
self.assertEquals(expected_names, tar.getnames())
|
||||
self.assertEquals('1.0', tar.extractfile(tar.getmember('%s/VERSION' % expected_image_id)).read())
|
||||
|
||||
|
@ -1308,6 +1308,58 @@ class SquashingTests(RegistryTestCaseMixin, V1RegistryPushMixin, LiveServerTestC
|
|||
image_contents = layer_tar.extractfile(layer_tar.getmember('contents')).read()
|
||||
self.assertEquals('the latest image', image_contents)
|
||||
|
||||
def test_squashed_torrent(self):
|
||||
initial_images = [
|
||||
{
|
||||
'id': 'initialid',
|
||||
'contents': 'the initial image',
|
||||
},
|
||||
]
|
||||
|
||||
# Create the repo.
|
||||
self.do_push('devtable', 'newrepo', 'devtable', 'password', images=initial_images)
|
||||
initial_image_id = '91081df45b58dc62dd207441785eef2b895f0383fbe601c99a3cf643c79957dc'
|
||||
|
||||
# Try to pull the torrent of the squashed image. This should fail with a 404 since the
|
||||
# squashed image doesn't yet exist.
|
||||
self.conduct('GET', '/c1/squash/devtable/newrepo/latest', auth=('devtable', 'password'),
|
||||
headers=dict(accept='application/x-bittorrent'),
|
||||
expected_code=404)
|
||||
|
||||
# Pull the squashed version of the tag.
|
||||
tar, squashed = self.get_squashed_image()
|
||||
self.assertTrue(initial_image_id in tar.getnames())
|
||||
|
||||
# Enable direct download URLs in fake storage.
|
||||
self.conduct('POST', '/__test/fakestoragedd/true')
|
||||
|
||||
# Pull the torrent.
|
||||
response = self.conduct('GET', '/c1/squash/devtable/newrepo/latest',
|
||||
auth=('devtable', 'password'),
|
||||
headers=dict(accept='application/x-bittorrent'))
|
||||
|
||||
# Disable direct download URLs in fake storage.
|
||||
self.conduct('POST', '/__test/fakestoragedd/false')
|
||||
|
||||
# Ensure the torrent is valid.
|
||||
contents = bencode.bdecode(response.content)
|
||||
|
||||
# Ensure that there is a webseed.
|
||||
self.assertEquals(contents['url-list'], 'http://somefakeurl')
|
||||
|
||||
# Ensure there is an announce and some pieces.
|
||||
self.assertIsNotNone(contents.get('info', {}).get('pieces'))
|
||||
self.assertIsNotNone(contents.get('announce'))
|
||||
|
||||
# Ensure the SHA1 matches the generated tar.
|
||||
sha = resumablehashlib.sha1()
|
||||
sha.update(squashed)
|
||||
|
||||
expected = binascii.hexlify(sha.digest())
|
||||
found = binascii.hexlify(contents['info']['pieces'])
|
||||
|
||||
self.assertEquals(expected, found)
|
||||
|
||||
|
||||
class LoginTests(object):
|
||||
""" Generic tests for registry login. """
|
||||
|
|
Reference in a new issue