diff --git a/libmat2/audio.py b/libmat2/audio.py index 9b73031..a26f36f 100644 --- a/libmat2/audio.py +++ b/libmat2/audio.py @@ -6,6 +6,17 @@ from . import abstract class MutagenParser(abstract.AbstractParser): + def __init__(self, filename): + super().__init__(filename) + try: + mutagen.File(self.filename) + except mutagen.flac.MutagenError: + raise ValueError + except mutagen.mp3.MutagenError: + raise ValueError + except mutagen.ogg.MutagenError: + raise ValueError + def get_meta(self): f = mutagen.File(self.filename) if f.tags: diff --git a/tests/test_corrupted_files.py b/tests/test_corrupted_files.py new file mode 100644 index 0000000..b784b0e --- /dev/null +++ b/tests/test_corrupted_files.py @@ -0,0 +1,88 @@ +#!/usr/bin/python3 + +import unittest +import shutil +import os + +from libmat2 import pdf, images, audio, office, parser_factory, torrent + + +class TestUnsupportedFiles(unittest.TestCase): + def test_pdf(self): + shutil.copy('./tests/test_libmat2.py', './tests/clean.py') + parser, mimetype = parser_factory.get_parser('./tests/data/clean.py') + self.assertEqual(mimetype, 'text/x-python') + self.assertEqual(parser, None) + os.remove('./tests/clean.py') + + +class TestExplicitelyUnsupportedFiles(unittest.TestCase): + def test_pdf(self): + shutil.copy('./tests/test_libmat2.py', './tests/clean.txt') + parser, mimetype = parser_factory.get_parser('./tests/data/clean.txt') + self.assertEqual(mimetype, 'text/plain') + self.assertEqual(parser, None) + os.remove('./tests/clean.txt') + + +class TestCorruptedFiles(unittest.TestCase): + def test_pdf(self): + shutil.copy('./tests/data/dirty.png', './tests/data/clean.png') + with self.assertRaises(ValueError): + pdf.PDFParser('./tests/data/clean.png') + os.remove('./tests/data/clean.png') + + def test_png(self): + shutil.copy('./tests/data/dirty.pdf', './tests/data/clean.pdf') + with self.assertRaises(ValueError): + images.PNGParser('./tests/data/clean.pdf') + os.remove('./tests/data/clean.pdf') + + def test_png2(self): + shutil.copy('./tests/test_libmat2.py', './tests/clean.png') + parser, mimetype = parser_factory.get_parser('./tests/clean.png') + self.assertIsNone(parser) + os.remove('./tests/clean.png') + + def test_torrent(self): + shutil.copy('./tests/data/dirty.png', './tests/data/clean.torrent') + p = torrent.TorrentParser('./tests/data/clean.torrent') + self.assertFalse(p.remove_all()) + expected = {'Unknown meta': 'Unable to parse torrent file "./tests/data/clean.torrent".'} + self.assertEqual(p.get_meta(), expected) + + with open("./tests/data/clean.torrent", "a") as f: + f.write("trailing garbage") + p = torrent.TorrentParser('./tests/data/clean.torrent') + self.assertEqual(p.get_meta(), expected) + os.remove('./tests/data/clean.torrent') + + def test_odg(self): + shutil.copy('./tests/data/dirty.png', './tests/data/clean.odg') + with self.assertRaises(ValueError): + office.LibreOfficeParser('./tests/data/clean.odg') + os.remove('./tests/data/clean.odg') + + def test_bmp(self): + shutil.copy('./tests/data/dirty.png', './tests/data/clean.bmp') + with self.assertRaises(ValueError): + images.BMPParser('./tests/data/clean.bmp') + os.remove('./tests/data/clean.bmp') + + def test_docx(self): + shutil.copy('./tests/data/dirty.png', './tests/data/clean.docx') + with self.assertRaises(ValueError): + office.MSOfficeParser('./tests/data/clean.docx') + os.remove('./tests/data/clean.docx') + + def test_flac(self): + shutil.copy('./tests/data/dirty.png', './tests/data/clean.flac') + with self.assertRaises(ValueError): + audio.FLACParser('./tests/data/clean.flac') + os.remove('./tests/data/clean.flac') + + def test_mp3(self): + shutil.copy('./tests/data/dirty.png', './tests/data/clean.mp3') + with self.assertRaises(ValueError): + audio.MP3Parser('./tests/data/clean.mp3') + os.remove('./tests/data/clean.mp3') diff --git a/tests/test_libmat2.py b/tests/test_libmat2.py index 0df333d..b34e7a4 100644 --- a/tests/test_libmat2.py +++ b/tests/test_libmat2.py @@ -40,72 +40,6 @@ class TestUnsupportedEmbeddedFiles(unittest.TestCase): self.assertFalse(p.remove_all()) os.remove('./tests/data/clean.docx') -class TestUnsupportedFiles(unittest.TestCase): - def test_pdf(self): - shutil.copy('./tests/test_libmat2.py', './tests/clean.py') - parser, mimetype = parser_factory.get_parser('./tests/data/clean.py') - self.assertEqual(mimetype, 'text/x-python') - self.assertEqual(parser, None) - os.remove('./tests/clean.py') - -class TestExplicitelyUnsupportedFiles(unittest.TestCase): - def test_pdf(self): - shutil.copy('./tests/test_libmat2.py', './tests/clean.txt') - parser, mimetype = parser_factory.get_parser('./tests/data/clean.txt') - self.assertEqual(mimetype, 'text/plain') - self.assertEqual(parser, None) - os.remove('./tests/clean.txt') - - -class TestCorruptedFiles(unittest.TestCase): - def test_pdf(self): - shutil.copy('./tests/data/dirty.png', './tests/data/clean.png') - with self.assertRaises(ValueError): - pdf.PDFParser('./tests/data/clean.png') - os.remove('./tests/data/clean.png') - - def test_png(self): - shutil.copy('./tests/data/dirty.pdf', './tests/data/clean.pdf') - with self.assertRaises(ValueError): - images.PNGParser('./tests/data/clean.pdf') - os.remove('./tests/data/clean.pdf') - - def test_png2(self): - shutil.copy('./tests/test_libmat2.py', './tests/clean.png') - parser, mimetype = parser_factory.get_parser('./tests/clean.png') - self.assertIsNone(parser) - os.remove('./tests/clean.png') - - def test_torrent(self): - shutil.copy('./tests/data/dirty.png', './tests/data/clean.torrent') - p = torrent.TorrentParser('./tests/data/clean.torrent') - self.assertFalse(p.remove_all()) - expected = {'Unknown meta': 'Unable to parse torrent file "./tests/data/clean.torrent".'} - self.assertEqual(p.get_meta(), expected) - - with open("./tests/data/clean.torrent", "a") as f: - f.write("trailing garbage") - p = torrent.TorrentParser('./tests/data/clean.torrent') - self.assertEqual(p.get_meta(), expected) - os.remove('./tests/data/clean.torrent') - - def test_odg(self): - shutil.copy('./tests/data/dirty.png', './tests/data/clean.odg') - with self.assertRaises(ValueError): - office.LibreOfficeParser('./tests/data/clean.odg') - os.remove('./tests/data/clean.odg') - - def test_bmp(self): - shutil.copy('./tests/data/dirty.png', './tests/data/clean.bmp') - with self.assertRaises(ValueError): - p = images.BMPParser('./tests/data/clean.bmp') - os.remove('./tests/data/clean.bmp') - - def test_docx(self): - shutil.copy('./tests/data/dirty.png', './tests/data/clean.docx') - with self.assertRaises(ValueError): - p = office.MSOfficeParser('./tests/data/clean.docx') - os.remove('./tests/data/clean.docx') class TestGetMeta(unittest.TestCase): def test_pdf(self):