103 lines
3.5 KiB
Python
103 lines
3.5 KiB
Python
from link_fixer import Link
|
|
import logging
|
|
import os
|
|
from pathlib import Path
|
|
from shutil import rmtree
|
|
import sys
|
|
import tarfile
|
|
import unittest
|
|
import warnings
|
|
|
|
logger = logging.getLogger('linkfixer')
|
|
logging.basicConfig(
|
|
format = '%(asctime)s %(module)s %(levelname)s: %(message)s',
|
|
level=logging.DEBUG,
|
|
stream = sys.stdout
|
|
)
|
|
|
|
|
|
|
|
class TestLinkFixer(unittest.TestCase):
|
|
|
|
tgt_dir = "test/data/tgt_dir"
|
|
lnk_dir = "test/data/lnk_dir"
|
|
tgt_file = "test/data/tgt_dir/tgt_file.txt"
|
|
ln_non_exists = "test/data/link.txt"
|
|
ln_valid = "test/data/lnk_dir/ln_valid"
|
|
ln_valid_path = "../tgt_dir/tgt_file.txt"
|
|
ln_broken = "test/data/lnk_dir/tgt_file.txt"
|
|
ln_broken_path = "../tgt/tgt_.txt"
|
|
ln_no_target = "test/data/lnk_dir/ln_no_target"
|
|
tgt_invalid = "test/data/tgt"
|
|
inexistent = "test/data/tgt_dir/inexistent.txt"
|
|
|
|
|
|
ln_ne_error = "Error: could not access link test/data/link.txt"
|
|
ln_gd_error = "Error: link test/data/lnk_dr/ln_valid is not broken. Abort."
|
|
ln_ns_error = "Error: link test/data/tgt_dir/tgt_file.txt is not a link at all. Abort."
|
|
tgt_invalid_error = "Error: target dir test/data/tgt does not seem to exist or be a directory. Abort."
|
|
ln_no_target_warning = "link_fix aborted."
|
|
|
|
def setup_test(self):
|
|
try:
|
|
rmtree("test/data")
|
|
except Exception:
|
|
sys.exit("Error: couldn't reset test data directory! Cancelling test!")
|
|
with tarfile.open("test/test_data.tar", "r:*") as tar:
|
|
tar.extraction_filter = getattr(tarfile, 'data_filter')
|
|
tar.extractall("test")
|
|
|
|
|
|
def test_non_existing_link(self):
|
|
self.setup_test()
|
|
#print("Test for inexistent link")
|
|
with self.assertRaises(SystemExit) as err:
|
|
Link.fix(self.ln_non_exists, self.tgt_dir)
|
|
self.assertEqual(err.exception_code, self.ln_ne_error)
|
|
|
|
|
|
def test_non_broken_link(self):
|
|
self.setup_test()
|
|
#print("Test for non-broken link")
|
|
with self.assertRaises(SystemExit) as err:
|
|
Link.fix(self.ln_valid, self.tgt_dir)
|
|
self.assertEqual(err.exception.code, self.ln_gd_error)
|
|
|
|
def test_not_a_link(self):
|
|
self.setup_test()
|
|
#print("Test for non-link link")
|
|
with self.assertRaises(SystemExit) as err:
|
|
Link.fix(self.tgt_file, self.tgt_dir)
|
|
self.assertEqual(err.exception.code, self.ln_ns_error)
|
|
|
|
def test_invalid_target(self):
|
|
self.setup_test()
|
|
#print("Test for invalid target")
|
|
with self.assertRaises(SystemExit) as err:
|
|
Link.fix(self.ln_valid, self.tgt_invalid)
|
|
self.assertEqual(err.exception.code, self.tgt_invalid_error)
|
|
|
|
def test_unfound_target(self):
|
|
self.setup_test()
|
|
#print("Test for unfound target")
|
|
with warnings.catch_warnings(record=True) as w:
|
|
Link.fix(self.ln_no_target, self.tgt_dir)
|
|
assert len(w) == 1
|
|
self.assertEqual(str(w[-1].message), self.ln_no_target_warning)
|
|
|
|
def test_fix_link(self):
|
|
self.setup_test()
|
|
Link.fix(self.ln_broken, self.tgt_dir)
|
|
self.assertEqual(Path(self.ln_broken).resolve(), Path(self.tgt_file).resolve())
|
|
|
|
|
|
def test_fix_linkdir(self):
|
|
self.setup_test()
|
|
Link.fix(self.lnk_dir, self.tgt_dir)
|
|
self.assertEqual(Path(self.ln_broken).resolve(), Path(self.tgt_file).resolve())
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
#runner = unittest.TestLinkFixer(verbosity=2)
|
|
unittest.main(verbosity=0) |