Viewing file: test_file_tar.py (5.25 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
from testfixtures import log_capture from tests.base_test import BaseTest from tests import config from weevely.core.sessions import SessionURL from weevely.core import modules from weevely import utils from weevely.core import messages import subprocess import os
def setUpModule(): subprocess.check_output(""" BASE_FOLDER="{config.base_folder}/test_file_tar/" rm -rf "$BASE_FOLDER"
mkdir -p "$BASE_FOLDER/dir1/dir2/dir3/dir4"
echo -n 1 > "$BASE_FOLDER/dir1/f1" echo -n 1 > "$BASE_FOLDER/dir1/dir2/f2" echo -n 1 > "$BASE_FOLDER/dir1/dir2/dir3/f3" echo -n 1 > "$BASE_FOLDER/dir1/dir2/dir3/dir4/f4"
tar cf "$BASE_FOLDER/test_0.tar" -C "$BASE_FOLDER" "dir1/"
echo -n 1 > "$BASE_FOLDER/f5"
rm -rf "$BASE_FOLDER/dir1"
chown www-data: -R "$BASE_FOLDER/"
""".format( config = config ), shell=True)
class FileTar(BaseTest):
folders_rel = [ 'test_file_tar/dir1', 'test_file_tar/dir1/dir2', 'test_file_tar/dir1/dir2/dir3', 'test_file_tar/dir1/dir2/dir3/dir4', ] folders_abs = [ os.path.join(config.base_folder, f) for f in folders_rel ]
files_rel = [ 'test_file_tar/dir1/f1', 'test_file_tar/dir1/dir2/f2', 'test_file_tar/dir1/dir2/dir3/f3', 'test_file_tar/dir1/dir2/dir3/dir4/f4', ] files_abs = [ os.path.join(config.base_folder, f) for f in files_rel ]
tars_rel = [ 'test_file_tar/test_0.tar' ] tars_abs = [ os.path.join(config.base_folder, f) for f in tars_rel ]
other_file_rel = 'test_file_tar/f5' other_file_abs = os.path.join(config.base_folder, other_file_rel)
def setUp(self): self.session = SessionURL( self.url, self.password, volatile = True )
modules.load_modules(self.session)
self.run_argv = modules.loaded['file_tar'].run_argv
def test_compress_decompress(self):
# Uncompress test.tar self.assertTrue(self.run_argv(['-x', '-o', self.tars_rel[0], 'test_file_tar/' ])); for file in self.files_abs: self.assertEqual(subprocess.check_output("cat %s" % file, shell=True), b'1') for folder in self.folders_abs: subprocess.check_call('stat -c %%a "%s"' % folder, shell=True)
# Compress it again giving starting folder self.assertTrue(self.run_argv(['-o', 'test_file_tar/test_1.tar', self.folders_rel[0]])); self.tars_rel.append('test_file_tar/test_1.tar') self.tars_abs.append(os.path.join(config.base_folder, self.tars_rel[-1]))
# Uncompress the new archive and recheck self.assertTrue(self.run_argv(['-x', '-o', 'test_file_tar/test_1.tar', 'test_file_tar/'])); for file in self.files_abs: self.assertEqual(subprocess.check_output("cat %s" % file, shell=True), b'1') for folder in self.folders_abs: subprocess.check_call('stat -c %%a "%s"' % folder, shell=True)
def test_compress_multiple(self):
# Uncompress test.tar self.assertTrue(self.run_argv(['-x', '-o', self.tars_rel[0], 'test_file_tar/' ])); for file in self.files_abs: self.assertEqual(subprocess.check_output("cat %s" % file, shell=True), b'1') for folder in self.folders_abs: subprocess.check_call('stat -c %%a "%s"' % folder, shell=True)
# Create a new tar adding also other_file self.assertTrue(self.run_argv(['-o', 'test_file_tar/test_2.tar', self.folders_rel[0], self.other_file_rel])); self.tars_rel.append('test_file_tar/test_2.tar') self.tars_abs.append(os.path.join(config.base_folder, self.tars_rel[-1]))
# Remove all the files subprocess.check_output("rm -rf %s" % self.folders_abs[0], shell=True) subprocess.check_output("rm %s" % self.other_file_abs, shell=True)
# Uncompress the new archive and recheck self.assertTrue(self.run_argv(['-x', '-o', 'test_file_tar/test_2.tar', './test_file_tar/'])); for file in self.files_abs: self.assertEqual(subprocess.check_output("cat %s" % file, shell=True), b'1') for folder in self.folders_abs: subprocess.check_call('stat -c %%a "%s"' % folder, shell=True)
self.assertEqual(subprocess.check_output("cat %s" % self.other_file_abs, shell=True), b'1')
@log_capture() def test_already_exists(self, log_captured):
# Create a new tar with other_file, with the name test_0.tar self.assertIsNone(self.run_argv(['test_file_tar/test_0.tar', self.other_file_rel])); self.assertEqual(log_captured.records[-1].msg, "File 'test_file_tar/test_0.tar' already exists, skipping compressing")
@log_capture() def test_unexistant_decompress(self, log_captured):
self.assertIsNone(self.run_argv(['-x', '-o', 'bogus', '.'])); self.assertEqual(log_captured.records[-1].msg, "Skipping file 'bogus', check existance and permission")
# @log_capture() # def test_unexistant_compress(self, log_captured): # # self.assertIsNone(self.run_argv(['bogus.tar', 'bogus'])); # self.assertEqual(log_captured.records[-1].msg, # "File 'bogus.tar' not created, check existance and permission")
|