summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2018-10-05 16:06:39 +0200
committerFlorian Bruhin <me@the-compiler.org>2018-10-05 16:06:57 +0200
commit80d1fe28263cf472c63060996f2241fb6ccfdf59 (patch)
tree947c33f5e80d4b8accc14e14e06415bd877dad6d
parent94c177565cee758a0059fb67c55142bb41577b88 (diff)
downloadqutebrowser-80d1fe28263cf472c63060996f2241fb6ccfdf59.tar.gz
qutebrowser-80d1fe28263cf472c63060996f2241fb6ccfdf59.zip
Fix and test remaining PDF.js OSError issues
(cherry picked from commit 616cd0a59c2f3036dc1d8e6730f84fa9296604d7)
-rw-r--r--qutebrowser/browser/pdfjs.py3
-rw-r--r--tests/unit/browser/test_pdfjs.py37
2 files changed, 39 insertions, 1 deletions
diff --git a/qutebrowser/browser/pdfjs.py b/qutebrowser/browser/pdfjs.py
index 80358d0a1..897f0407e 100644
--- a/qutebrowser/browser/pdfjs.py
+++ b/qutebrowser/browser/pdfjs.py
@@ -157,6 +157,9 @@ def get_pdfjs_res_and_path(path):
content = utils.read_file(res_path, binary=True)
except FileNotFoundError:
raise PDFJSNotFound(path) from None
+ except OSError as e:
+ log.misc.warning("OSError while reading PDF.js file: {}".format(e))
+ raise PDFJSNotFound(path) from None
return content, file_path
diff --git a/tests/unit/browser/test_pdfjs.py b/tests/unit/browser/test_pdfjs.py
index e50bfed4e..abe1cdc02 100644
--- a/tests/unit/browser/test_pdfjs.py
+++ b/tests/unit/browser/test_pdfjs.py
@@ -17,6 +17,7 @@
# You should have received a copy of the GNU General Public License
# along with qutebrowser. If not, see <http://www.gnu.org/licenses/>.
+import logging
import os.path
import pytest
@@ -132,7 +133,8 @@ class TestResources:
os.path.expanduser('~/.local/share/qutebrowser/pdfjs/')]:
read_system_mock.assert_any_call(path, ['web/test', 'test'])
- def test_get_pdfjs_res_not_found(self, read_system_mock, read_file_mock):
+ def test_get_pdfjs_res_not_found(self, read_system_mock, read_file_mock,
+ caplog):
read_system_mock.return_value = (None, None)
read_file_mock.side_effect = FileNotFoundError
@@ -140,6 +142,22 @@ class TestResources:
match="Path 'web/test' not found"):
pdfjs.get_pdfjs_res_and_path('web/test')
+ assert not caplog.records
+
+ def test_get_pdfjs_res_oserror(self, read_system_mock, read_file_mock,
+ caplog):
+ read_system_mock.return_value = (None, None)
+ read_file_mock.side_effect = OSError("Message")
+
+ with caplog.at_level(logging.WARNING):
+ with pytest.raises(pdfjs.PDFJSNotFound,
+ match="Path 'web/test' not found"):
+ pdfjs.get_pdfjs_res_and_path('web/test')
+
+ assert len(caplog.records) == 1
+ rec = caplog.records[0]
+ assert rec.message == 'OSError while reading PDF.js file: Message'
+
@pytest.mark.parametrize('path, expected', [
('web/viewer.js', 'viewer.js'),
@@ -173,6 +191,23 @@ def test_read_from_system(names, expected_name, tmpdir):
assert pdfjs._read_from_system(str(tmpdir), names) == expected
+def test_read_from_system_oserror(tmpdir, caplog):
+ unreadable_file = tmpdir / 'unreadable'
+ unreadable_file.ensure()
+ unreadable_file.chmod(0)
+ if os.access(str(unreadable_file), os.R_OK):
+ # Docker container or similar
+ pytest.skip("File was still readable")
+
+ expected = (None, None)
+ with caplog.at_level(logging.WARNING):
+ assert pdfjs._read_from_system(str(tmpdir), ['unreadable']) == expected
+
+ assert len(caplog.records) == 1
+ rec = caplog.records[0]
+ assert rec.message.startswith('OSError while reading PDF.js file:')
+
+
@pytest.mark.parametrize('available', [True, False])
def test_is_available(available, mocker):
mock = mocker.patch.object(pdfjs, 'get_pdfjs_res', autospec=True)