From 83389a63e9b3e145f527cccf583b30bbe1993f4c Mon Sep 17 00:00:00 2001
From: jvoisin <julien.voisin@dustri.org>
Date: Mon, 22 Oct 2018 13:42:04 +0200
Subject: [PATCH] Test mat2's reliability wrt. corrupted video files

---
 libmat2/video.py              |  3 +--
 tests/test_corrupted_files.py |  9 ++++++++-
 tests/test_libmat2.py         | 10 ++++++----
 3 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/libmat2/video.py b/libmat2/video.py
index b9f3687..658affa 100644
--- a/libmat2/video.py
+++ b/libmat2/video.py
@@ -43,9 +43,8 @@ class AVIParser(exiftool.ExiftoolParser):
 
         try:
             subprocess.check_call(cmd)
-        except subprocess.CalledProcessError:  # pragma: no cover
+        except subprocess.CalledProcessError:
             return False
-
         return True
 
 
diff --git a/tests/test_corrupted_files.py b/tests/test_corrupted_files.py
index 8d7c252..c92f0be 100644
--- a/tests/test_corrupted_files.py
+++ b/tests/test_corrupted_files.py
@@ -5,7 +5,8 @@ import shutil
 import os
 import logging
 
-from libmat2 import pdf, images, audio, office, parser_factory, torrent, harmless
+from libmat2 import pdf, images, audio, office, parser_factory, torrent
+from libmat2 import harmless, video
 
 # No need to logging messages, should something go wrong,
 # the testsuite _will_ fail.
@@ -192,3 +193,9 @@ class TestCorruptedFiles(unittest.TestCase):
         with self.assertRaises(ValueError):
              images.JPGParser('./tests/data/clean.jpg')
         os.remove('./tests/data/clean.jpg')
+
+    def test_avi(self):
+        shutil.copy('./tests/data/dirty.torrent', './tests/data/clean.avi')
+        p = video.AVIParser('./tests/data/clean.avi')
+        self.assertFalse(p.remove_all())
+        os.remove('./tests/data/clean.avi')
diff --git a/tests/test_libmat2.py b/tests/test_libmat2.py
index 37adc6a..e5cc8a3 100644
--- a/tests/test_libmat2.py
+++ b/tests/test_libmat2.py
@@ -477,16 +477,18 @@ class TestCleaning(unittest.TestCase):
         os.remove('./tests/data/clean.cleaned.cleaned.txt')
 
     def test_avi(self):
+        try:
+            video._get_ffmpeg_path()
+        except RuntimeError:
+            raise unittest.SkipTest
+
         shutil.copy('./tests/data/dirty.avi', './tests/data/clean.avi')
         p = video.AVIParser('./tests/data/clean.avi')
 
         meta = p.get_meta()
         self.assertEqual(meta['Software'], 'MEncoder SVN-r33148-4.0.1')
 
-        try:
-            ret = p.remove_all()
-        except RuntimeError:
-            return  # this happens if ffmepg is not installed
+        ret = p.remove_all()
         self.assertTrue(ret)
 
         p = video.AVIParser('./tests/data/clean.cleaned.avi')
-- 
GitLab