Add tests for log-endpoints
This commit is contained in:
parent
904c4ecc23
commit
9ad8e74247
@ -3,7 +3,6 @@
|
|||||||
Main Freqtrade bot script.
|
Main Freqtrade bot script.
|
||||||
Read the documentation to know what cli arguments you need.
|
Read the documentation to know what cli arguments you need.
|
||||||
"""
|
"""
|
||||||
# flake8: noqa E402
|
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
from typing import Any, List
|
from typing import Any, List
|
||||||
|
@ -639,12 +639,13 @@ class RPC:
|
|||||||
buffer = bufferHandler.buffer[-limit:]
|
buffer = bufferHandler.buffer[-limit:]
|
||||||
else:
|
else:
|
||||||
buffer = bufferHandler.buffer
|
buffer = bufferHandler.buffer
|
||||||
records = [[r.asctime, r.created, r.name, r.levelname, r.message] for r in buffer]
|
records = [[datetime.fromtimestamp(r.created), r.created, r.name, r.levelname, r.message]
|
||||||
|
for r in buffer]
|
||||||
|
|
||||||
return {'log_count': len(records), 'logs': records}
|
return {'log_count': len(records), 'logs': records}
|
||||||
|
|
||||||
def _rpc_get_logs_as_string(self, limit: Optional[int]) -> Dict[str, List]:
|
def _rpc_get_logs_as_string(self, limit: Optional[int]) -> Dict[str, List]:
|
||||||
"""Returns the last X logs"""
|
"""Returns the last X logs as formatted string (Using the default log format)"""
|
||||||
if limit:
|
if limit:
|
||||||
buffer = bufferHandler.buffer[-limit:]
|
buffer = bufferHandler.buffer[-limit:]
|
||||||
else:
|
else:
|
||||||
|
@ -10,10 +10,12 @@ from flask import Flask
|
|||||||
from requests.auth import _basic_auth_str
|
from requests.auth import _basic_auth_str
|
||||||
|
|
||||||
from freqtrade.__init__ import __version__
|
from freqtrade.__init__ import __version__
|
||||||
|
from freqtrade.loggers import setup_logging, setup_logging_pre
|
||||||
from freqtrade.persistence import Trade
|
from freqtrade.persistence import Trade
|
||||||
from freqtrade.rpc.api_server import BASE_URI, ApiServer
|
from freqtrade.rpc.api_server import BASE_URI, ApiServer
|
||||||
from freqtrade.state import State
|
from freqtrade.state import State
|
||||||
from tests.conftest import get_patched_freqtradebot, log_has, patch_get_signal, create_mock_trades
|
from tests.conftest import (create_mock_trades, get_patched_freqtradebot,
|
||||||
|
log_has, patch_get_signal)
|
||||||
|
|
||||||
_TEST_USER = "FreqTrader"
|
_TEST_USER = "FreqTrader"
|
||||||
_TEST_PASS = "SuperSecurePassword1!"
|
_TEST_PASS = "SuperSecurePassword1!"
|
||||||
@ -21,6 +23,9 @@ _TEST_PASS = "SuperSecurePassword1!"
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def botclient(default_conf, mocker):
|
def botclient(default_conf, mocker):
|
||||||
|
setup_logging_pre()
|
||||||
|
setup_logging(default_conf)
|
||||||
|
|
||||||
default_conf.update({"api_server": {"enabled": True,
|
default_conf.update({"api_server": {"enabled": True,
|
||||||
"listen_ip_address": "127.0.0.1",
|
"listen_ip_address": "127.0.0.1",
|
||||||
"listen_port": 8080,
|
"listen_port": 8080,
|
||||||
@ -423,6 +428,26 @@ def test_api_delete_trade(botclient, mocker, fee, markets):
|
|||||||
assert stoploss_mock.call_count == 1
|
assert stoploss_mock.call_count == 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_logs(botclient):
|
||||||
|
ftbot, client = botclient
|
||||||
|
rc = client_get(client, f"{BASE_URI}/logs")
|
||||||
|
assert_response(rc)
|
||||||
|
assert len(rc.json) == 2
|
||||||
|
assert 'logs' in rc.json
|
||||||
|
# Using a fixed comparison here would make this test fail!
|
||||||
|
assert rc.json['log_count'] > 10
|
||||||
|
assert len(rc.json['logs']) == rc.json['log_count']
|
||||||
|
|
||||||
|
assert isinstance(rc.json['logs'][0], list)
|
||||||
|
# date
|
||||||
|
assert isinstance(rc.json['logs'][0][0], str)
|
||||||
|
# created_timestamp
|
||||||
|
assert isinstance(rc.json['logs'][0][1], float)
|
||||||
|
assert isinstance(rc.json['logs'][0][2], str)
|
||||||
|
assert isinstance(rc.json['logs'][0][3], str)
|
||||||
|
assert isinstance(rc.json['logs'][0][4], str)
|
||||||
|
|
||||||
|
|
||||||
def test_api_edge_disabled(botclient, mocker, ticker, fee, markets):
|
def test_api_edge_disabled(botclient, mocker, ticker, fee, markets):
|
||||||
ftbot, client = botclient
|
ftbot, client = botclient
|
||||||
patch_get_signal(ftbot, (True, False))
|
patch_get_signal(ftbot, (True, False))
|
||||||
|
@ -16,6 +16,7 @@ from telegram.error import NetworkError
|
|||||||
from freqtrade import __version__
|
from freqtrade import __version__
|
||||||
from freqtrade.edge import PairInfo
|
from freqtrade.edge import PairInfo
|
||||||
from freqtrade.freqtradebot import FreqtradeBot
|
from freqtrade.freqtradebot import FreqtradeBot
|
||||||
|
from freqtrade.loggers import setup_logging
|
||||||
from freqtrade.persistence import Trade
|
from freqtrade.persistence import Trade
|
||||||
from freqtrade.rpc import RPCMessageType
|
from freqtrade.rpc import RPCMessageType
|
||||||
from freqtrade.rpc.telegram import Telegram, authorized_only
|
from freqtrade.rpc.telegram import Telegram, authorized_only
|
||||||
@ -1107,6 +1108,26 @@ def test_blacklist_static(default_conf, update, mocker) -> None:
|
|||||||
assert freqtradebot.pairlists.blacklist == ["DOGE/BTC", "HOT/BTC", "ETH/BTC"]
|
assert freqtradebot.pairlists.blacklist == ["DOGE/BTC", "HOT/BTC", "ETH/BTC"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_telegram_logs(default_conf, update, mocker) -> None:
|
||||||
|
msg_mock = MagicMock()
|
||||||
|
mocker.patch.multiple(
|
||||||
|
'freqtrade.rpc.telegram.Telegram',
|
||||||
|
_init=MagicMock(),
|
||||||
|
_send_msg=msg_mock
|
||||||
|
)
|
||||||
|
setup_logging(default_conf)
|
||||||
|
|
||||||
|
freqtradebot = get_patched_freqtradebot(mocker, default_conf)
|
||||||
|
|
||||||
|
telegram = Telegram(freqtradebot)
|
||||||
|
context = MagicMock()
|
||||||
|
context.args = []
|
||||||
|
telegram._logs(update=update, context=context)
|
||||||
|
assert msg_mock.call_count == 1
|
||||||
|
assert "freqtrade.rpc.telegram" in msg_mock.call_args_list[0][0][0]
|
||||||
|
assert "freqtrade.resolvers.iresolver" in msg_mock.call_args_list[0][0][0]
|
||||||
|
|
||||||
|
|
||||||
def test_edge_disabled(default_conf, update, mocker) -> None:
|
def test_edge_disabled(default_conf, update, mocker) -> None:
|
||||||
msg_mock = MagicMock()
|
msg_mock = MagicMock()
|
||||||
mocker.patch.multiple(
|
mocker.patch.multiple(
|
||||||
|
Loading…
Reference in New Issue
Block a user