mmgen-ticker: test caching JSON data
This commit is contained in:
parent
de833d75af
commit
313c7af4bb
6 changed files with 82 additions and 9 deletions
|
|
@ -7,5 +7,6 @@ include test/test-release.d/*.sh
|
|||
include test/modtest_d/*.py
|
||||
include test/cmdtest_d/*.py
|
||||
include test/cmdtest_d/include/cfg.py
|
||||
include test/cmdtest_d/httpd/ticker.py
|
||||
include test/overlay/fakemods/mmgen_node_tools/*.py
|
||||
include test/ref/*/*
|
||||
|
|
|
|||
|
|
@ -175,6 +175,7 @@ class DataSource:
|
|||
desc = 'CoinPaprika'
|
||||
data_desc = 'cryptocurrency data'
|
||||
api_host = 'api.coinpaprika.com'
|
||||
api_proto = 'https'
|
||||
ratelimit = 240
|
||||
btc_ratelimit = 10
|
||||
net_data_type = 'json'
|
||||
|
|
@ -192,11 +193,11 @@ class DataSource:
|
|||
@property
|
||||
def api_url(self):
|
||||
return (
|
||||
f'https://{self.api_host}/v1/tickers/btc-bitcoin'
|
||||
f'{self.api_proto}://{self.api_host}/v1/tickers/btc-bitcoin'
|
||||
if cfg.btc_only else
|
||||
f'https://{self.api_host}/v1/tickers?limit={self.asset_limit}'
|
||||
f'{self.api_proto}://{self.api_host}/v1/tickers?limit={self.asset_limit}'
|
||||
if self.asset_limit else
|
||||
f'https://{self.api_host}/v1/tickers')
|
||||
f'{self.api_proto}://{self.api_host}/v1/tickers')
|
||||
|
||||
@property
|
||||
def json_fn(self):
|
||||
|
|
@ -697,6 +698,11 @@ def make_cfg(gcfg_arg):
|
|||
cmd_args = gcfg._args
|
||||
cfg_in = get_cfg_in()
|
||||
|
||||
if gcfg.test_suite: # required for testing with overlay
|
||||
from . import Ticker as this_mod
|
||||
this_mod.src_cls = src_cls
|
||||
this_mod.cfg_in = cfg_in
|
||||
|
||||
usr_rows = parse_usr_asset_arg('add_rows')
|
||||
usr_columns = parse_usr_asset_arg('add_columns', use_cf_file=True)
|
||||
query = parse_query_arg(cmd_args[0]) if cmd_args else None
|
||||
|
|
|
|||
27
test/cmdtest_d/httpd/ticker.py
Executable file
27
test/cmdtest_d/httpd/ticker.py
Executable file
|
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# MMGen Node Tools, terminal-based programs for Bitcoin and forkcoin nodes
|
||||
# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
|
||||
# Licensed under the GNU General Public License, Version 3:
|
||||
# https://www.gnu.org/licenses
|
||||
# Public project repositories:
|
||||
# https://github.com/mmgen/mmgen-node-tools
|
||||
# https://gitlab.com/mmgen/mmgen-node-tools
|
||||
|
||||
"""
|
||||
test.cmdtest_d.httpd.ticker: Ticker WSGI http server
|
||||
"""
|
||||
|
||||
from . import HTTPD
|
||||
|
||||
class TickerServer(HTTPD):
|
||||
name = 'ticker server'
|
||||
port = 19900
|
||||
content_type = 'application/json'
|
||||
|
||||
def make_response_body(self, method, environ):
|
||||
|
||||
with open(f'test/ref/ticker/ticker.json') as fh:
|
||||
text = fh.read()
|
||||
|
||||
return text.encode()
|
||||
|
|
@ -16,6 +16,7 @@ import os, shutil
|
|||
|
||||
from ..include.common import cfg
|
||||
from .base import CmdTestBase
|
||||
from .httpd.ticker import TickerServer
|
||||
|
||||
refdir = os.path.join('test','ref','ticker')
|
||||
|
||||
|
|
@ -70,8 +71,9 @@ class CmdTestScripts(CmdTestBase):
|
|||
),
|
||||
'ticker': (
|
||||
"'mmnode-ticker' script",
|
||||
('ticker1', 'ticker [--help)'),
|
||||
('ticker1', 'ticker [--help]'),
|
||||
('ticker2', 'ticker (bad proxy)'),
|
||||
('ticker2a', 'ticker [--download=cc]'),
|
||||
('ticker3', 'ticker [--cached-data]'),
|
||||
('ticker4', 'ticker [--cached-data --wide]'),
|
||||
('ticker5', 'ticker [--cached-data --wide --adjust=-0.766] (usr cfg file)'),
|
||||
|
|
@ -90,9 +92,12 @@ class CmdTestScripts(CmdTestBase):
|
|||
)
|
||||
}
|
||||
|
||||
@property
|
||||
def ticker_args(self):
|
||||
return [ f'--cachedir={self.tmpdir}', '--proxy=http://asdfzxcv:32459' ]
|
||||
def __init__(self, cfg, trunner, cfgs, spawn):
|
||||
if not trunner:
|
||||
return
|
||||
self.ticker_server = TickerServer(cfg)
|
||||
self.ticker_server.start()
|
||||
return super().__init__(cfg, trunner, cfgs, spawn)
|
||||
|
||||
@property
|
||||
def nt_datadir(self):
|
||||
|
|
@ -100,7 +105,6 @@ class CmdTestScripts(CmdTestBase):
|
|||
|
||||
def ticker_setup(self):
|
||||
self.spawn('',msg_only=True)
|
||||
shutil.copy2(os.path.join(refdir,'ticker.json'),self.tmpdir)
|
||||
shutil.copy2(os.path.join(refdir,'ticker-finance.json'),self.tmpdir)
|
||||
shutil.copy2(os.path.join(refdir,'ticker-finance-history.json'),self.tmpdir)
|
||||
shutil.copy2(os.path.join(refdir,'ticker-btc.json'),self.tmpdir)
|
||||
|
|
@ -111,11 +115,15 @@ class CmdTestScripts(CmdTestBase):
|
|||
args = [],
|
||||
expect_list = None,
|
||||
cached_data = True,
|
||||
add_opts = [],
|
||||
use_proxy = True,
|
||||
exit_val = None):
|
||||
t = self.spawn(
|
||||
'mmnode-ticker',
|
||||
(['--cached-data'] if cached_data else [])
|
||||
+ self.ticker_args
|
||||
+ [f'--cachedir={self.tmpdir}']
|
||||
+ (['--proxy=http://asdfzxcv:32459'] if use_proxy else [])
|
||||
+ add_opts
|
||||
+ args,
|
||||
exit_val = exit_val)
|
||||
if expect_list:
|
||||
|
|
@ -136,6 +144,13 @@ class CmdTestScripts(CmdTestBase):
|
|||
t.exit_val = 1 if ret else 3
|
||||
return t
|
||||
|
||||
def ticker2a(self):
|
||||
t = self.ticker(
|
||||
add_opts = ['--proxy', '', '--download=cc'],
|
||||
cached_data = False,
|
||||
use_proxy = False)
|
||||
return t
|
||||
|
||||
def ticker3(self):
|
||||
return self.ticker(
|
||||
[],
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ create_test_links() {
|
|||
test/modtest.py hard
|
||||
test/test-release.sh symbolic
|
||||
test/cmdtest_d/base.py symbolic
|
||||
test/cmdtest_d/httpd/__init__.py symbolic
|
||||
test/cmdtest_d/include/common.py symbolic
|
||||
test/cmdtest_d/include/runner.py symbolic
|
||||
test/cmdtest_d/include/group_mgr.py symbolic
|
||||
|
|
|
|||
23
test/overlay/fakemods/mmgen_node_tools/Ticker.py
Normal file
23
test/overlay/fakemods/mmgen_node_tools/Ticker.py
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# MMGen Node Tools, terminal-based programs for Bitcoin and forkcoin nodes
|
||||
# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
|
||||
# Licensed under the GNU General Public License, Version 3:
|
||||
# https://www.gnu.org/licenses
|
||||
# Public project repositories:
|
||||
# https://github.com/mmgen/mmgen-node-tools
|
||||
# https://gitlab.com/mmgen/mmgen-node-tools
|
||||
|
||||
"""
|
||||
fakemods.mmgen_node_tools.Ticker: fake module for Ticker class
|
||||
"""
|
||||
|
||||
from .Ticker_orig import *
|
||||
|
||||
class overlay_fake_DataSource:
|
||||
class coinpaprika:
|
||||
api_host = 'localhost:19900'
|
||||
api_proto = 'http'
|
||||
|
||||
DataSource.coinpaprika.api_host = overlay_fake_DataSource.coinpaprika.api_host
|
||||
DataSource.coinpaprika.api_proto = overlay_fake_DataSource.coinpaprika.api_proto
|
||||
Loading…
Add table
Add a link
Reference in a new issue