URI: 
       tCode coverage preparation. - obelisk - Electrum server using libbitcoin as its backend
  HTML git clone https://git.parazyd.org/obelisk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 6ab9415b33bf5a39fe4461cdbadb4dffbd8be33a
   DIR parent 5c35db371a89159452413a55b107cc7a576fe471
  HTML Author: parazyd <parazyd@dyne.org>
       Date:   Fri, 16 Apr 2021 11:04:11 +0200
       
       Code coverage preparation.
       
       Diffstat:
         M .github/workflows/py.yaml           |       2 +-
         M .gitignore                          |       1 +
         M Makefile                            |       3 ++-
         M README.md                           |       2 +-
         M obelisk/errors_jsonrpc.py           |       2 +-
         M obelisk/errors_libbitcoin.py        |       2 +-
         M obelisk/merkle.py                   |       8 ++++----
         M obelisk/protocol.py                 |       4 ++--
         M obelisk/util.py                     |       8 ++++----
         M obelisk/zeromq.py                   |       4 ++--
         M tests/__main__.py                   |       4 ++--
         M tests/test_electrum_protocol.py     |      14 +++++---------
       
       12 files changed, 26 insertions(+), 28 deletions(-)
       ---
   DIR diff --git a/.github/workflows/py.yaml b/.github/workflows/py.yaml
       t@@ -22,4 +22,4 @@ jobs:
                    pip install -e .
                - name: Run tests
                  run: |
       -            python ./tests/test_electrum_protocol.py
       +            python tests
   DIR diff --git a/.gitignore b/.gitignore
       t@@ -1,2 +1,3 @@
        *.pyc
        .coverage
       +htmlcov
   DIR diff --git a/Makefile b/Makefile
       t@@ -8,8 +8,9 @@ format:
                python3 ./res/format_code.py
        
        test:
       -        python3 ./tests/test_electrum_protocol.py
       +        python3 tests
        
        coverage:
                coverage run tests
                coverage report
       +        coverage html
   DIR diff --git a/README.md b/README.md
       t@@ -71,7 +71,7 @@ It is also recommended to run the test suite and see if anything
        fails:
        
        ```
       -python3 ./tests/test_electrum_protocol.py
       +python3 tests
        ```
        
        You can chat about Obelisk on Freenode IRC, either `#electrum` or
   DIR diff --git a/obelisk/errors_jsonrpc.py b/obelisk/errors_jsonrpc.py
       t@@ -17,7 +17,7 @@
        """JSON-RPC errors: https://www.jsonrpc.org/specification#error_object"""
        
        
       -class JsonRPCError:
       +class JsonRPCError:  # pragma: no cover
            """Class implementing functions returning JSON-RPC errors"""
        
            def __init__(self):
   DIR diff --git a/obelisk/errors_libbitcoin.py b/obelisk/errors_libbitcoin.py
       t@@ -22,7 +22,7 @@ def make_error_code(ec):
            """Return ErrorCode from ec"""
            if not ec:
                return None
       -    return ErrorCode(ec)
       +    return ErrorCode(ec)  # pragma: no cover
        
        
        class ErrorCode(Enum):
   DIR diff --git a/obelisk/merkle.py b/obelisk/merkle.py
       t@@ -20,7 +20,7 @@ from math import ceil, log
        from obelisk.util import double_sha256, hash_to_hex_str
        
        
       -def branch_length(hash_count):
       +def branch_length(hash_count):  # pragma: no cover
            """Return the length of a merkle branch given the number of hashes"""
            if not isinstance(hash_count, int):
                raise TypeError("hash_count must be an integer")
       t@@ -35,14 +35,14 @@ def merkle_branch_and_root(hashes, index, length=None):
            """
            hashes = list(hashes)
            if not isinstance(index, int):
       -        raise TypeError("index must be an integer")
       +        raise TypeError("index must be an integer")  # pragma: no cover
            # This also asserts hashes is not empty
            if not 0 <= index < len(hashes):
       -        raise ValueError("index out of range")
       +        raise ValueError("index out of range")  # pragma: no cover
            natural_length = branch_length(len(hashes))
            if length is None:
                length = natural_length
       -    else:
       +    else:  # pragma: no cover
                if not isinstance(length, int):
                    raise TypeError("length must be an integer")
                if length < natural_length:
   DIR diff --git a/obelisk/protocol.py b/obelisk/protocol.py
       t@@ -70,7 +70,7 @@ class ElectrumProtocol(asyncio.Protocol):  # pylint: disable=R0904,R0902
                self.tasks = []
                self.sh_subscriptions = {}
        
       -        if chain == "mainnet":
       +        if chain == "mainnet":  # pragma: no cover
                    self.genesis = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"
                elif chain == "testnet":
                    self.genesis = "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943"
       t@@ -109,7 +109,7 @@ class ElectrumProtocol(asyncio.Protocol):  # pylint: disable=R0904,R0902
                self.log.debug("ElectrumProtocol.stop()")
                if self.bx:
                    unsub_pool = []
       -            for i in self.sh_subscriptions:
       +            for i in self.sh_subscriptions:  # pragma: no cover
                        self.log.debug("bx.unsubscribe %s", i)
                        unsub_pool.append(self.bx.unsubscribe_scripthash(i))
                    await asyncio.gather(*unsub_pool, return_exceptions=True)
   DIR diff --git a/obelisk/util.py b/obelisk/util.py
       t@@ -30,7 +30,7 @@ def is_non_negative_integer(val):
            """Check if val is of type int and non-negative"""
            if is_integer(val):
                return val >= 0
       -    return False
       +    return False  # pragma: no cover
        
        
        def is_boolean(val):
       t@@ -38,7 +38,7 @@ def is_boolean(val):
            return isinstance(val, bool)
        
        
       -def is_hex_str(text):
       +def is_hex_str(text):  # pragma: no cover
            """Check if text is a hex string"""
            if not isinstance(text, str):
                return False
       t@@ -52,7 +52,7 @@ def is_hex_str(text):
            return True
        
        
       -def is_hash256_str(text):
       +def is_hash256_str(text):  # pragma: no cover
            """Check if text is a sha256 hash"""
            if not isinstance(text, str):
                return False
       t@@ -77,7 +77,7 @@ def bh2u(val):
            return val.hex()
        
        
       -def block_to_header(block):
       +def block_to_header(block):  # pragma: no cover
            """Return block header from raw block"""
            if not isinstance(block, (bytes, bytearray)):
                raise ValueError("block is not of type bytes/bytearray")
   DIR diff --git a/obelisk/zeromq.py b/obelisk/zeromq.py
       t@@ -107,7 +107,7 @@ class ClientSettings:
        
            @context.setter
            def context(self, context):
       -        self._context = context
       +        self._context = context  # pragma: no cover
        
            @property
            def timeout(self):
       t@@ -116,7 +116,7 @@ class ClientSettings:
        
            @timeout.setter
            def timeout(self, timeout):
       -        self._timeout = timeout
       +        self._timeout = timeout  # pragma: no cover
        
        
        class Request:
   DIR diff --git a/tests/__main__.py b/tests/__main__.py
       t@@ -1,3 +1,4 @@
        import asyncio
        from test_electrum_protocol import main
       -asyncio.run(main())
       -\ No newline at end of file
       +
       +asyncio.run(main())
   DIR diff --git a/tests/test_electrum_protocol.py b/tests/test_electrum_protocol.py
       t@@ -59,11 +59,11 @@ def get_expect(method, params):
            recv_buf = bytearray()
            while True:
                data = bs.recv(4096)
       -        if not data or len(data) == 0:
       +        if not data or len(data) == 0:  # pragma: no cover
                    raise ValueError("No data received from blockstream")
                recv_buf.extend(data)
                lb = recv_buf.find(b"\n")
       -        if lb == -1:
       +        if lb == -1:  # pragma: no cover
                    continue
                while lb != -1:
                    line = recv_buf[:lb].rstrip()
       t@@ -74,7 +74,7 @@ def get_expect(method, params):
                    return resp
        
        
       -def assert_equal(data, expect):
       +def assert_equal(data, expect):  # pragma: no cover
            try:
                assert data == expect
            except AssertionError:
       t@@ -208,7 +208,7 @@ async def test_server_version(protocol, writer, method):
            assert_equal(data["result"], expect["result"])
        
        
       -class MockWriter(asyncio.StreamWriter):
       +class MockWriter(asyncio.StreamWriter):  # pragma: no cover
            """Mock class for StreamWriter"""
        
            def __init__(self):
       t@@ -265,7 +265,7 @@ async def main():
                    await orchestration[func](protocol, writer, func)
                    print(f"PASS: {func}")
                    test_pass.append(func)
       -        except AssertionError:
       +        except AssertionError:  # pragma: no cover
                    print(f"FAIL: {func}")
                    traceback.print_exc()
                    test_fail.append(func)
       t@@ -279,7 +279,3 @@ async def main():
        
            ret = 1 if len(test_fail) > 0 else 0
            sys.exit(ret)
       -
       -
       -if __name__ == "__main__":
       -    asyncio.run(main())