From de7344aa0a20e03dd194763a7897dfdc1e9fc14e Mon Sep 17 00:00:00 2001 From: renaud gaudin Date: Wed, 10 Jun 2020 17:32:04 +0000 Subject: [PATCH 1/2] Fixed #31: close creator upon deletion --- libzim/writer.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libzim/writer.py b/libzim/writer.py index fc05c80f..2a3893dc 100644 --- a/libzim/writer.py +++ b/libzim/writer.py @@ -150,6 +150,9 @@ def __enter__(self): def __exit__(self, *args): self.close() + def __del__(self): + self.close() + def add_article(self, article): self._creatorWrapper.add_article(article) if not article.is_redirect(): From 1865115e315edbcda11fcc06665c1468a428e580 Mon Sep 17 00:00:00 2001 From: renaud gaudin Date: Thu, 11 Jun 2020 10:58:10 +0000 Subject: [PATCH 2/2] added tests for segfault, left over files and double-close --- tests/test_libzim.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/test_libzim.py b/tests/test_libzim.py index 6fc727e7..37979166 100644 --- a/tests/test_libzim.py +++ b/tests/test_libzim.py @@ -159,3 +159,28 @@ def test_creator_params(tmpdir): assert zim.filename == path assert zim.main_page_url == main_page_url assert bytes(zim.get_article("/M/Language").content).decode("UTF-8") == index_language + + +def test_segfault_on_realloc(tmpdir): + """ assert that we are able to delete an unclosed Creator #31 """ + creator = Creator(str(tmpdir / "test.zim"), "welcome", "eng", 2048) + del creator # used to segfault + assert True + + +def test_noleftbehind_empty(tmpdir): + """ assert that ZIM with no articles don't leave files behind #41 """ + fname = "test_empty.zim" + with Creator( + str(tmpdir / fname), main_page="welcome", index_language="eng", min_chunk_size=2048, + ) as zim_creator: + print(zim_creator) + + assert len([p for p in tmpdir.listdir() if p.basename.startswith(fname)]) == 1 + + +def test_double_close(tmpdir): + creator = Creator(str(tmpdir / "test.zim"), "welcome", "eng", 2048) + creator.close() + with pytest.raises(RuntimeError): + creator.close()