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/modtest_d/*.py
|
||||||
include test/cmdtest_d/*.py
|
include test/cmdtest_d/*.py
|
||||||
include test/cmdtest_d/include/cfg.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/overlay/fakemods/mmgen_node_tools/*.py
|
||||||
include test/ref/*/*
|
include test/ref/*/*
|
||||||
|
|
|
||||||
|
|
@ -175,6 +175,7 @@ class DataSource:
|
||||||
desc = 'CoinPaprika'
|
desc = 'CoinPaprika'
|
||||||
data_desc = 'cryptocurrency data'
|
data_desc = 'cryptocurrency data'
|
||||||
api_host = 'api.coinpaprika.com'
|
api_host = 'api.coinpaprika.com'
|
||||||
|
api_proto = 'https'
|
||||||
ratelimit = 240
|
ratelimit = 240
|
||||||
btc_ratelimit = 10
|
btc_ratelimit = 10
|
||||||
net_data_type = 'json'
|
net_data_type = 'json'
|
||||||
|
|
@ -192,11 +193,11 @@ class DataSource:
|
||||||
@property
|
@property
|
||||||
def api_url(self):
|
def api_url(self):
|
||||||
return (
|
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
|
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
|
if self.asset_limit else
|
||||||
f'https://{self.api_host}/v1/tickers')
|
f'{self.api_proto}://{self.api_host}/v1/tickers')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def json_fn(self):
|
def json_fn(self):
|
||||||
|
|
@ -697,6 +698,11 @@ def make_cfg(gcfg_arg):
|
||||||
cmd_args = gcfg._args
|
cmd_args = gcfg._args
|
||||||
cfg_in = get_cfg_in()
|
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_rows = parse_usr_asset_arg('add_rows')
|
||||||
usr_columns = parse_usr_asset_arg('add_columns', use_cf_file=True)
|
usr_columns = parse_usr_asset_arg('add_columns', use_cf_file=True)
|
||||||
query = parse_query_arg(cmd_args[0]) if cmd_args else None
|
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 ..include.common import cfg
|
||||||
from .base import CmdTestBase
|
from .base import CmdTestBase
|
||||||
|
from .httpd.ticker import TickerServer
|
||||||
|
|
||||||
refdir = os.path.join('test','ref','ticker')
|
refdir = os.path.join('test','ref','ticker')
|
||||||
|
|
||||||
|
|
@ -70,8 +71,9 @@ class CmdTestScripts(CmdTestBase):
|
||||||
),
|
),
|
||||||
'ticker': (
|
'ticker': (
|
||||||
"'mmnode-ticker' script",
|
"'mmnode-ticker' script",
|
||||||
('ticker1', 'ticker [--help)'),
|
('ticker1', 'ticker [--help]'),
|
||||||
('ticker2', 'ticker (bad proxy)'),
|
('ticker2', 'ticker (bad proxy)'),
|
||||||
|
('ticker2a', 'ticker [--download=cc]'),
|
||||||
('ticker3', 'ticker [--cached-data]'),
|
('ticker3', 'ticker [--cached-data]'),
|
||||||
('ticker4', 'ticker [--cached-data --wide]'),
|
('ticker4', 'ticker [--cached-data --wide]'),
|
||||||
('ticker5', 'ticker [--cached-data --wide --adjust=-0.766] (usr cfg file)'),
|
('ticker5', 'ticker [--cached-data --wide --adjust=-0.766] (usr cfg file)'),
|
||||||
|
|
@ -90,9 +92,12 @@ class CmdTestScripts(CmdTestBase):
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@property
|
def __init__(self, cfg, trunner, cfgs, spawn):
|
||||||
def ticker_args(self):
|
if not trunner:
|
||||||
return [ f'--cachedir={self.tmpdir}', '--proxy=http://asdfzxcv:32459' ]
|
return
|
||||||
|
self.ticker_server = TickerServer(cfg)
|
||||||
|
self.ticker_server.start()
|
||||||
|
return super().__init__(cfg, trunner, cfgs, spawn)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def nt_datadir(self):
|
def nt_datadir(self):
|
||||||
|
|
@ -100,7 +105,6 @@ class CmdTestScripts(CmdTestBase):
|
||||||
|
|
||||||
def ticker_setup(self):
|
def ticker_setup(self):
|
||||||
self.spawn('',msg_only=True)
|
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.json'),self.tmpdir)
|
||||||
shutil.copy2(os.path.join(refdir,'ticker-finance-history.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)
|
shutil.copy2(os.path.join(refdir,'ticker-btc.json'),self.tmpdir)
|
||||||
|
|
@ -111,11 +115,15 @@ class CmdTestScripts(CmdTestBase):
|
||||||
args = [],
|
args = [],
|
||||||
expect_list = None,
|
expect_list = None,
|
||||||
cached_data = True,
|
cached_data = True,
|
||||||
|
add_opts = [],
|
||||||
|
use_proxy = True,
|
||||||
exit_val = None):
|
exit_val = None):
|
||||||
t = self.spawn(
|
t = self.spawn(
|
||||||
'mmnode-ticker',
|
'mmnode-ticker',
|
||||||
(['--cached-data'] if cached_data else [])
|
(['--cached-data'] if cached_data else [])
|
||||||
+ self.ticker_args
|
+ [f'--cachedir={self.tmpdir}']
|
||||||
|
+ (['--proxy=http://asdfzxcv:32459'] if use_proxy else [])
|
||||||
|
+ add_opts
|
||||||
+ args,
|
+ args,
|
||||||
exit_val = exit_val)
|
exit_val = exit_val)
|
||||||
if expect_list:
|
if expect_list:
|
||||||
|
|
@ -136,6 +144,13 @@ class CmdTestScripts(CmdTestBase):
|
||||||
t.exit_val = 1 if ret else 3
|
t.exit_val = 1 if ret else 3
|
||||||
return t
|
return t
|
||||||
|
|
||||||
|
def ticker2a(self):
|
||||||
|
t = self.ticker(
|
||||||
|
add_opts = ['--proxy', '', '--download=cc'],
|
||||||
|
cached_data = False,
|
||||||
|
use_proxy = False)
|
||||||
|
return t
|
||||||
|
|
||||||
def ticker3(self):
|
def ticker3(self):
|
||||||
return self.ticker(
|
return self.ticker(
|
||||||
[],
|
[],
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,7 @@ create_test_links() {
|
||||||
test/modtest.py hard
|
test/modtest.py hard
|
||||||
test/test-release.sh symbolic
|
test/test-release.sh symbolic
|
||||||
test/cmdtest_d/base.py 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/common.py symbolic
|
||||||
test/cmdtest_d/include/runner.py symbolic
|
test/cmdtest_d/include/runner.py symbolic
|
||||||
test/cmdtest_d/include/group_mgr.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