Properly test webserver startup in standalone mode

This commit is contained in:
Matthias 2021-07-10 10:13:23 +02:00
parent cf6f706078
commit 72a103f32d

View File

@ -17,7 +17,7 @@ from requests.auth import _basic_auth_str
from freqtrade.__init__ import __version__ from freqtrade.__init__ import __version__
from freqtrade.enums import RunMode, State from freqtrade.enums import RunMode, State
from freqtrade.exceptions import ExchangeError, OperationalException from freqtrade.exceptions import DependencyException, ExchangeError, OperationalException
from freqtrade.loggers import setup_logging, setup_logging_pre from freqtrade.loggers import setup_logging, setup_logging_pre
from freqtrade.persistence import PairLocks, Trade from freqtrade.persistence import PairLocks, Trade
from freqtrade.rpc import RPC from freqtrade.rpc import RPC
@ -308,7 +308,10 @@ def test_api_run(default_conf, mocker, caplog):
}}) }})
mocker.patch('freqtrade.rpc.telegram.Updater', MagicMock()) mocker.patch('freqtrade.rpc.telegram.Updater', MagicMock())
server_mock = MagicMock() server_inst_mock = MagicMock()
server_inst_mock.run_in_thread = MagicMock()
server_inst_mock.run = MagicMock()
server_mock = MagicMock(return_value=server_inst_mock)
mocker.patch('freqtrade.rpc.api_server.webserver.UvicornServer', server_mock) mocker.patch('freqtrade.rpc.api_server.webserver.UvicornServer', server_mock)
apiserver = ApiServer(default_conf) apiserver = ApiServer(default_conf)
@ -318,6 +321,8 @@ def test_api_run(default_conf, mocker, caplog):
assert apiserver._config == default_conf assert apiserver._config == default_conf
apiserver.start_api() apiserver.start_api()
assert server_mock.call_count == 2 assert server_mock.call_count == 2
assert server_inst_mock.run_in_thread.call_count == 2
assert server_inst_mock.run.call_count == 0
assert server_mock.call_args_list[0][0][0].host == "127.0.0.1" assert server_mock.call_args_list[0][0][0].host == "127.0.0.1"
assert server_mock.call_args_list[0][0][0].port == 8080 assert server_mock.call_args_list[0][0][0].port == 8080
assert isinstance(server_mock.call_args_list[0][0][0].app, FastAPI) assert isinstance(server_mock.call_args_list[0][0][0].app, FastAPI)
@ -336,6 +341,8 @@ def test_api_run(default_conf, mocker, caplog):
apiserver.start_api() apiserver.start_api()
assert server_mock.call_count == 1 assert server_mock.call_count == 1
assert server_inst_mock.run_in_thread.call_count == 1
assert server_inst_mock.run.call_count == 0
assert server_mock.call_args_list[0][0][0].host == "0.0.0.0" assert server_mock.call_args_list[0][0][0].host == "0.0.0.0"
assert server_mock.call_args_list[0][0][0].port == 8089 assert server_mock.call_args_list[0][0][0].port == 8089
assert isinstance(server_mock.call_args_list[0][0][0].app, FastAPI) assert isinstance(server_mock.call_args_list[0][0][0].app, FastAPI)
@ -349,6 +356,17 @@ def test_api_run(default_conf, mocker, caplog):
"Please make sure that this is intentional!", caplog) "Please make sure that this is intentional!", caplog)
assert log_has_re("SECURITY WARNING - `jwt_secret_key` seems to be default.*", caplog) assert log_has_re("SECURITY WARNING - `jwt_secret_key` seems to be default.*", caplog)
server_mock.reset_mock()
apiserver._standalone = True
apiserver.start_api()
assert server_inst_mock.run_in_thread.call_count == 0
assert server_inst_mock.run.call_count == 1
apiserver1 = ApiServer(default_conf)
assert id(apiserver1) == id(apiserver)
apiserver._standalone = False
# Test crashing API server # Test crashing API server
caplog.clear() caplog.clear()
mocker.patch('freqtrade.rpc.api_server.webserver.UvicornServer', mocker.patch('freqtrade.rpc.api_server.webserver.UvicornServer',
@ -1233,7 +1251,7 @@ def test_list_available_pairs(botclient):
assert len(rc.json()['pair_interval']) == 1 assert len(rc.json()['pair_interval']) == 1
def test_api_backtesting(botclient, mocker, fee): def test_api_backtesting(botclient, mocker, fee, caplog):
ftbot, client = botclient ftbot, client = botclient
mocker.patch('freqtrade.exchange.Exchange.get_fee', fee) mocker.patch('freqtrade.exchange.Exchange.get_fee', fee)
@ -1323,6 +1341,11 @@ def test_api_backtesting(botclient, mocker, fee):
ApiServer._bgtask_running = False ApiServer._bgtask_running = False
mocker.patch('freqtrade.optimize.backtesting.Backtesting.backtest_one_strategy',
side_effect=DependencyException())
rc = client_post(client, f"{BASE_URI}/backtest", data=json.dumps(data))
assert log_has("Backtesting caused an error: ", caplog)
# Delete backtesting to avoid leakage since the backtest-object may stick around. # Delete backtesting to avoid leakage since the backtest-object may stick around.
rc = client_delete(client, f"{BASE_URI}/backtest") rc = client_delete(client, f"{BASE_URI}/backtest")
assert_response(rc) assert_response(rc)