import importlib from bz2 import decompress import pytest from snakeoil.compression import _bzip2 from snakeoil.process import CommandNotFound, find_binary from snakeoil.test import hide_imports from . import Base, hide_binary def test_no_native(): with hide_imports('bz2'): importlib.reload(_bzip2) assert not _bzip2.native def test_missing_bzip2_binary(): with hide_binary('bzip2'): with pytest.raises(CommandNotFound, match='bzip2'): importlib.reload(_bzip2) def test_missing_lbzip2_binary(): with hide_binary('lbzip2'): importlib.reload(_bzip2) assert not _bzip2.parallelizable class Bzip2Base(Base): module = 'bzip2' decompressed_test_data = b'Some text here\n' compressed_test_data = ( b'BZh91AY&SY\x1bM\x00\x02\x00\x00\x01\xd3\x80\x00\x10@\x00\x08\x00\x02' b'B\x94@ \x00"\r\x03\xd4\x0c \t!\x1b\xb7\x80u/\x17rE8P\x90\x1bM\x00\x02' ) def decompress(self, data: bytes) -> bytes: return decompress(data) class TestStdlib(Bzip2Base): @pytest.fixture(autouse=True, scope='class') def _setup(self): try: find_binary('bzip2') except CommandNotFound: pytest.skip('bzip2 binary not found') with hide_binary('lbzip2'): importlib.reload(_bzip2) yield class TestBzip2(Bzip2Base): @pytest.fixture(autouse=True, scope='class') def _setup(self): with hide_binary('lbzip2'): importlib.reload(_bzip2) yield class TestLbzip2(Bzip2Base): @pytest.fixture(autouse=True, scope='class') def _setup(self): try: find_binary('lbzip2') except CommandNotFound: pytest.skip('lbzip2 binary not found') importlib.reload(_bzip2) def test_bad_level(self): with pytest.raises(ValueError, match='unknown option "-0"'): _bzip2.compress_data(self.decompressed_test_data, level=90, parallelize=True)