aboutsummaryrefslogtreecommitdiff
path: root/kolla/tests
diff options
context:
space:
mode:
authorMichal Nasiadka <mnasiadka@gmail.com>2023-03-31 11:16:50 +0000
committerMichal Nasiadka <mnasiadka@gmail.com>2023-03-31 12:35:42 +0000
commit143765fb67221cc51f1dc56a41ac2b67dddc453f (patch)
tree83f864facc0e081b933213f4b6b739d3fc1038b2 /kolla/tests
parentdda3bf45b29537f4925dc3374cf96eb8ed5b652b (diff)
downloadkolla-143765fb67221cc51f1dc56a41ac2b67dddc453f.tar.gz
kolla-143765fb67221cc51f1dc56a41ac2b67dddc453f.zip
Fix test malicious tarball fail
Since I650fcbc8f773fad8116338f6fb0cf7b4f4f17b33 builds from git fails on plugins with an exception: 'tarfile.ReadError: not a gzip file' because the test checks only gzip compressed archives but plugins created as plain tar files. This change fixes the issue using transparent compression support and also adds some debug info. Closes-Bug: #1990432 Change-Id: If0f9b4dd058a257d0653332d1b663e150c717304 Signed-off-by: Maksim Malchuk <maksim.malchuk@gmail.com> Co-Authored-by: Michal Nasiadka <mnasiadka@gmail.com>
Diffstat (limited to 'kolla/tests')
-rw-r--r--kolla/tests/test_build.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/kolla/tests/test_build.py b/kolla/tests/test_build.py
index ce7896da5..eb42595b8 100644
--- a/kolla/tests/test_build.py
+++ b/kolla/tests/test_build.py
@@ -293,9 +293,81 @@ class TasksTest(base.TestCase):
@mock.patch.dict(os.environ, clear=True)
@mock.patch('docker.APIClient')
+ def test_local_directory(self, mock_client):
+ tmpdir = tempfile.mkdtemp()
+ file_name = 'test.txt'
+ file_path = os.path.join(tmpdir, file_name)
+ saved_umask = os.umask(0o077)
+
+ try:
+ with open(file_path, 'w') as f:
+ f.write('Hello')
+
+ self.dc = mock_client
+ self.image.plugins = [{
+ 'name': 'fake-image-base-plugin-test',
+ 'type': 'local',
+ 'enabled': True,
+ 'source': tmpdir}
+ ]
+ push_queue = mock.Mock()
+ builder = tasks.BuildTask(self.conf, self.image, push_queue)
+ builder.run()
+ self.assertTrue(builder.success)
+
+ except IOError:
+ print('IOError')
+ else:
+ os.remove(file_path)
+ finally:
+ os.umask(saved_umask)
+ os.rmdir(tmpdir)
+
+ @mock.patch.dict(os.environ, clear=True)
+ @mock.patch('docker.APIClient')
def test_malicious_tar(self, mock_client):
tmpdir = tempfile.mkdtemp()
file_name = 'test.txt'
+ archive_name = 'my_archive.tar'
+ file_path = os.path.join(tmpdir, file_name)
+ archive_path = os.path.join(tmpdir, archive_name)
+ # Ensure the file is read/write by the creator only
+ saved_umask = os.umask(0o077)
+
+ try:
+ with open(file_path, 'w') as f:
+ f.write('Hello')
+
+ with tarfile.open(archive_path, 'w') as tar:
+ tar.add(file_path, arcname='../test.txt')
+
+ self.dc = mock_client
+ self.image.plugins = [{
+ 'name': 'fake-image-base-plugin-test',
+ 'type': 'local',
+ 'enabled': True,
+ 'source': archive_path}
+ ]
+
+ push_queue = mock.Mock()
+ builder = tasks.BuildTask(self.conf, self.image, push_queue)
+ builder.run()
+ self.assertFalse(builder.success)
+
+ except IOError:
+ print('IOError')
+ else:
+ os.remove(file_path)
+ os.remove(archive_path)
+ finally:
+ os.umask(saved_umask)
+ os.rmdir(tmpdir)
+
+ @mock.patch.dict(os.environ, clear=True)
+ @mock.patch('docker.APIClient')
+ def test_malicious_tar_gz(self, mock_client):
+ tmpdir = tempfile.mkdtemp()
+ file_name = 'test.txt'
archive_name = 'my_archive.tar.gz'
file_path = os.path.join(tmpdir, file_name)
archive_path = os.path.join(tmpdir, archive_name)