Handle invalid tar layers and add tests
This commit is contained in:
parent
cc9d5798b3
commit
611bc895e1
2 changed files with 55 additions and 0 deletions
|
@ -3,6 +3,7 @@ import tarfile
|
|||
|
||||
from StringIO import StringIO
|
||||
from util.streamlayerformat import StreamLayerMerger, AUFS_WHITEOUT
|
||||
from util.tarlayerformat import TarLayerReadException
|
||||
|
||||
class TestStreamLayerMerger(unittest.TestCase):
|
||||
def create_layer(self, **kwargs):
|
||||
|
@ -30,6 +31,9 @@ class TestStreamLayerMerger(unittest.TestCase):
|
|||
|
||||
return output.getvalue()
|
||||
|
||||
def create_empty_layer(self):
|
||||
return ''
|
||||
|
||||
def squash_layers(self, layers):
|
||||
def get_layers():
|
||||
return [StringIO(layer) for layer in layers]
|
||||
|
@ -337,6 +341,7 @@ class TestStreamLayerMerger(unittest.TestCase):
|
|||
self.assertHasFile(squashed, 'foobar/baz/some_file', 'foo')
|
||||
self.assertDoesNotHaveFile(squashed, 'foo/another_file')
|
||||
|
||||
|
||||
def test_delete_root_directory(self):
|
||||
third_layer = self.create_layer(
|
||||
foo = 'build/first_file',
|
||||
|
@ -350,5 +355,45 @@ class TestStreamLayerMerger(unittest.TestCase):
|
|||
self.assertDoesNotHaveFile(squashed, 'build/first_file')
|
||||
self.assertDoesNotHaveFile(squashed, 'build/second_file')
|
||||
|
||||
|
||||
def test_tar_empty_layer(self):
|
||||
third_layer = self.create_layer(
|
||||
foo = 'build/first_file',
|
||||
bar = 'build/second_file')
|
||||
|
||||
empty_layer = self.create_layer()
|
||||
|
||||
squashed = self.squash_layers([empty_layer, third_layer])
|
||||
|
||||
self.assertHasFile(squashed, 'build/first_file', 'foo')
|
||||
self.assertHasFile(squashed, 'build/second_file', 'bar')
|
||||
|
||||
|
||||
def test_data_empty_layer(self):
|
||||
third_layer = self.create_layer(
|
||||
foo = 'build/first_file',
|
||||
bar = 'build/second_file')
|
||||
|
||||
empty_layer = self.create_empty_layer()
|
||||
|
||||
squashed = self.squash_layers([empty_layer, third_layer])
|
||||
|
||||
self.assertHasFile(squashed, 'build/first_file', 'foo')
|
||||
self.assertHasFile(squashed, 'build/second_file', 'bar')
|
||||
|
||||
|
||||
def test_broken_layer(self):
|
||||
third_layer = self.create_layer(
|
||||
foo = 'build/first_file',
|
||||
bar = 'build/second_file')
|
||||
|
||||
broken_layer = 'not valid data'
|
||||
|
||||
try:
|
||||
self.squash_layers([broken_layer, third_layer])
|
||||
self.fail('Expected exception')
|
||||
except TarLayerReadException as ex:
|
||||
self.assertEquals('Could not read layer', ex.message)
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
Reference in a new issue