def test_get_hashrate_file_not_found():
    """ Ensures FileNotFoundError is raised if minerd unix sock cannot be found """
    import two1.commands.util.bitcoin_computer as bitcoin_computer
    bitcoin_computer.MINERD_SOCK = '/foo/bar'

    with pytest.raises(FileNotFoundError):
        bitcoin_computer.get_hashrate("15min")
def test_get_hashrate_inputs(mock_recv, mock_connect, hashrate_sample, outcome):
    """ Ensures input values are checked and handled correctly """
    # sets up the return value for socket.recv
    mock_recv.return_value = str(json.dumps(STAT_EVENT_HASHRATE)+"\n").encode()

    # ensures the proper output value
    if isinstance(outcome, (int, float)):
        assert bitcoin_computer.get_hashrate(hashrate_sample) == outcome
    else:
        # When raises exception when invalid input is given
        with pytest.raises(outcome):
            bitcoin_computer.get_hashrate(hashrate_sample)
Exemplo n.º 3
0
def status_mining(client):
    """ Prints the mining status if the device has a mining chip

    Args:
        client (TwentyOneRestClient): rest client used for communication with the backend api

    Returns:
        dict: a dictionary containing 'is_mining', 'hashrate', and 'mined' values
    """
    has_chip = bitcoin_computer.has_mining_chip()
    is_mining, mined, hashrate = None, None, None
    if has_chip:
        try:
            hashrate = bitcoin_computer.get_hashrate("15min")
            if hashrate > 0:
                hashrate = uxstring.UxString.status_mining_hashrate.format(
                    hashrate / 1e9)
            else:
                hashrate = uxstring.UxString.status_mining_hashrate_unknown
        except FileNotFoundError:
            is_mining = uxstring.UxString.status_mining_file_not_found
        except TimeoutError:
            is_mining = uxstring.UxString.status_mining_timeout
        else:
            is_mining = uxstring.UxString.status_mining_success

        mined = client.get_mined_satoshis()
        logger.info(
            uxstring.UxString.status_mining.format(is_mining, hashrate, mined))

    return dict(is_mining=is_mining, hashrate=hashrate, mined=mined)
Exemplo n.º 4
0
def status_mining(client):
    """ Prints the mining status if the device has a mining chip

    Args:
        client (TwentyOneRestClient): rest client used for communication with the backend api

    Returns:
        dict: a dictionary containing 'is_mining', 'hashrate', and 'mined' values
    """
    has_chip = bitcoin_computer.has_mining_chip()
    is_mining, mined, hashrate = None, None, None
    if has_chip:
        try:
            hashrate = bitcoin_computer.get_hashrate("15min")
            if hashrate > 0:
                hashrate = uxstring.UxString.status_mining_hashrate.format(hashrate/1e9)
            else:
                hashrate = uxstring.UxString.status_mining_hashrate_unknown
        except FileNotFoundError:
            is_mining = uxstring.UxString.status_mining_file_not_found
        except TimeoutError:
            is_mining = uxstring.UxString.status_mining_timeout
        else:
            is_mining = uxstring.UxString.status_mining_success

        mined = client.get_mined_satoshis()
        logger.info(uxstring.UxString.status_mining.format(is_mining, hashrate, mined))

    return dict(is_mining=is_mining, hashrate=hashrate, mined=mined)
def test_get_hashrate(mock_connect, event_dicts, side_effect, outcome):
    """ Mocks socket.recv function to test various payloads while getting hashrate """
    if event_dicts is None:
        event_bytes = b""
    else:
        event_str = "\n".join([json.dumps(event) for event in event_dicts]) + "\n"
        event_bytes = event_str.encode()

    with mock.patch.object(bitcoin_computer.socket.socket, "recv") as mock_recv:
        # forces the return value on recv to the list of events given
        mock_recv.return_value = event_bytes
        mock_recv.side_effect = side_effect

        if isinstance(outcome, (int, float)):
            # ensures the proper output value
            assert bitcoin_computer.get_hashrate("15min") == outcome
        else:
            # When the statistics event is not given a TimeoutError will occur
            with pytest.raises(outcome):
                bitcoin_computer.get_hashrate("15min")