From b0eaf93331f13653ea8da038cbd7761782e99401 Mon Sep 17 00:00:00 2001 From: Safihre Date: Sat, 1 May 2021 12:24:03 +0200 Subject: [PATCH] Extend unit test for par2file to check logging of par2 creator --- .../frènch_german_demö.rar.vol0+1.PAR2 | Bin 384480 -> 0 bytes .../frènch_german_demö.rar.vol0+1.par2 | Bin 0 -> 384480 bytes tests/test_par2file.py | 64 +++++++++++++-------- 3 files changed, 39 insertions(+), 25 deletions(-) delete mode 100644 tests/data/test_win_unicode/frènch_german_demö.rar.vol0+1.PAR2 create mode 100644 tests/data/test_win_unicode/frènch_german_demö.rar.vol0+1.par2 diff --git a/tests/data/test_win_unicode/frènch_german_demö.rar.vol0+1.PAR2 b/tests/data/test_win_unicode/frènch_german_demö.rar.vol0+1.PAR2 deleted file mode 100644 index f6eec1d5d471375723a05a702429d9273d225042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384480 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 diff --git a/tests/data/test_win_unicode/frènch_german_demö.rar.vol0+1.par2 b/tests/data/test_win_unicode/frènch_german_demö.rar.vol0+1.par2 new file mode 100644 index 0000000000000000000000000000000000000000..f6eec1d5d471375723a05a702429d9273d225042 GIT binary patch literal 384480 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 literal 0 HcmV?d00001 diff --git a/tests/test_par2file.py b/tests/test_par2file.py index 7102af3..65f400e 100644 --- a/tests/test_par2file.py +++ b/tests/test_par2file.py @@ -26,28 +26,42 @@ from tests.testhelper import * class TestPar2Parsing: - def test_parse_par2_file(self): - # These files are all <16k so the MD5 of the whole file is the same as the 16k one - assert {"random.bin": b"\xbf\xe0\xe4\x10\xa2#\xf5\xbeN\x7f2\xe5\x9e\xdd\t\x03"} == parse_par2_file( - os.path.join(SAB_DATA_DIR, "deobfuscate_filenames", "rename.par2"), {} - ) - assert {"frènch_german_demö.rar": b"C\t\x1d\xbd\xdf\x8c\xb5w \xcco\xbf~L)\xc2"} == parse_par2_file( - os.path.join(SAB_DATA_DIR, "test_win_unicode", "frènch_german_demö.rar.vol0+1.par2"), {} - ) - assert { - "我喜欢编程.part5.rar": b"\x19\xe7\xb7\xb3\xbc\x17\xc4\xefo\x96*+x\x0c]M", - "我喜欢编程.part6.rar": b"M\x8c.{\xae\x15\xb7\xa1\x8c\xc7\x1f\x8a\xb3^`\xd9", - "我喜欢编程.part4.rar": b"\xb8D:r\xd8\x04\x98\xb3\xc2\x89\xed\xc1\x90\xe445", - "我喜欢编程.part2.rar": b"aN#\x04*\x86\xd96|PoDV\xa6S\xa8", - "我喜欢编程.part3.rar": b"\xc5\x1ep\xeb\x94\xa7\x12\xa1e\x8c\xc5\xda\xda\xae1 ", - "我喜欢编程.part1.rar": b'_tJ\x15\x1a3;1\xaao\xa9n\n"\xa5p', - "我喜欢编程.part7.rar": b"M\x1c\x14\x9b\xacY\x81\x8d\x82 VV\x81&\x8eH", - } == parse_par2_file(os.path.join(SAB_DATA_DIR, "unicode_rar", "我喜欢编程.par2"), {}) - - def test_parse_par2_file_16k(self): - # This file is 18k, so it's md5 of the first 16k is actually different - md5of16k = {} - assert {"rss_feed_test.xml": b"\xf8\x8f\x88\x91\xae{\x03\xc8\xad\xcb\xb4Y\xa0+\x06\xf6"} == parse_par2_file( - os.path.join(SAB_DATA_DIR, "par2file", "basic_16k.par2"), md5of16k - ) - assert md5of16k == {b"'ky\xd7\xd1\xd3wF\xed\x9c\xf7\x9b\x90\x93\x106": "rss_feed_test.xml"} + def test_parse_par2_file(self, caplog): + # To capture the par2-creator, we need to capture the logging + with caplog.at_level(logging.DEBUG): + # These files are all <16k so the MD5 of the whole file is the same as the 16k one + assert {"random.bin": b"\xbf\xe0\xe4\x10\xa2#\xf5\xbeN\x7f2\xe5\x9e\xdd\t\x03"} == parse_par2_file( + os.path.join(SAB_DATA_DIR, "deobfuscate_filenames", "rename.par2"), {} + ) + assert "Par2-creator of rename.par2 is: QuickPar 0.9" in caplog.text + caplog.clear() + + assert {"frènch_german_demö.rar": b"C\t\x1d\xbd\xdf\x8c\xb5w \xcco\xbf~L)\xc2"} == parse_par2_file( + os.path.join(SAB_DATA_DIR, "test_win_unicode", "frènch_german_demö.rar.vol0+1.par2"), {} + ) + assert "Par2-creator of frènch_german_demö.rar.vol0+1.par2 is: QuickPar 0.9" in caplog.text + caplog.clear() + + assert { + "我喜欢编程.part5.rar": b"\x19\xe7\xb7\xb3\xbc\x17\xc4\xefo\x96*+x\x0c]M", + "我喜欢编程.part6.rar": b"M\x8c.{\xae\x15\xb7\xa1\x8c\xc7\x1f\x8a\xb3^`\xd9", + "我喜欢编程.part4.rar": b"\xb8D:r\xd8\x04\x98\xb3\xc2\x89\xed\xc1\x90\xe445", + "我喜欢编程.part2.rar": b"aN#\x04*\x86\xd96|PoDV\xa6S\xa8", + "我喜欢编程.part3.rar": b"\xc5\x1ep\xeb\x94\xa7\x12\xa1e\x8c\xc5\xda\xda\xae1 ", + "我喜欢编程.part1.rar": b'_tJ\x15\x1a3;1\xaao\xa9n\n"\xa5p', + "我喜欢编程.part7.rar": b"M\x1c\x14\x9b\xacY\x81\x8d\x82 VV\x81&\x8eH", + } == parse_par2_file(os.path.join(SAB_DATA_DIR, "unicode_rar", "我喜欢编程.par2"), {}) + assert "Par2-creator of 我喜欢编程.par2 is: ParPar v0.3.2" in caplog.text + caplog.clear() + + def test_parse_par2_file_16k(self, caplog): + # Capture logging of the par2-creator + with caplog.at_level(logging.DEBUG): + # This file is 18k, so it's md5 of the first 16k is actually different + md5of16k = {} + assert {"rss_feed_test.xml": b"\xf8\x8f\x88\x91\xae{\x03\xc8\xad\xcb\xb4Y\xa0+\x06\xf6"} == parse_par2_file( + os.path.join(SAB_DATA_DIR, "par2file", "basic_16k.par2"), md5of16k + ) + assert md5of16k == {b"'ky\xd7\xd1\xd3wF\xed\x9c\xf7\x9b\x90\x93\x106": "rss_feed_test.xml"} + assert "Par2-creator of basic_16k.par2 is: QuickPar 0.9" in caplog.text + caplog.clear()