Add multi-broker streaming test using both `binance` and `kraken`
parent
7bbe86d6fb
commit
e348968113
|
@ -6,7 +6,7 @@ from collections import Counter
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import tractor
|
# import tractor
|
||||||
import trio
|
import trio
|
||||||
from piker import (
|
from piker import (
|
||||||
open_piker_runtime,
|
open_piker_runtime,
|
||||||
|
@ -21,12 +21,18 @@ from piker.data._source import (
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'fqsns',
|
'fqsns',
|
||||||
[
|
[
|
||||||
|
# binance
|
||||||
(100, {'btcusdt.binance', 'ethusdt.binance'}),
|
(100, {'btcusdt.binance', 'ethusdt.binance'}),
|
||||||
(50, {'xbteur.kraken', 'xbtusd.kraken'}),
|
|
||||||
|
# kraken
|
||||||
|
(20, {'xbteur.kraken', 'xbtusd.kraken'}),
|
||||||
|
|
||||||
|
# binance + kraken
|
||||||
|
(200, {'btcusdt.binance', 'xbtusd.kraken'}),
|
||||||
],
|
],
|
||||||
ids=lambda param: f'quotes={param[0]}@fqsns={param[1]}',
|
ids=lambda param: f'quotes={param[0]}@fqsns={param[1]}',
|
||||||
)
|
)
|
||||||
def test_basic_rt_feed(
|
def test_multi_fqsn_feed(
|
||||||
fqsns: set[str],
|
fqsns: set[str],
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
|
@ -41,10 +47,6 @@ def test_basic_rt_feed(
|
||||||
brokername, key, suffix = unpack_fqsn(fqsn)
|
brokername, key, suffix = unpack_fqsn(fqsn)
|
||||||
brokers.add(brokername)
|
brokers.add(brokername)
|
||||||
|
|
||||||
# NOTE: we only have single broker-backed multi-symbol streams
|
|
||||||
# currently.
|
|
||||||
assert len(brokers) == 1
|
|
||||||
|
|
||||||
async def main():
|
async def main():
|
||||||
async with (
|
async with (
|
||||||
open_piker_runtime(
|
open_piker_runtime(
|
||||||
|
@ -52,9 +54,9 @@ def test_basic_rt_feed(
|
||||||
|
|
||||||
# XXX tractor BUG: this doesn't translate through to the
|
# XXX tractor BUG: this doesn't translate through to the
|
||||||
# ``tractor._state._runtimevars``...
|
# ``tractor._state._runtimevars``...
|
||||||
registry_addr=('127.0.0.1', 6666),
|
# registry_addr=('127.0.0.1', 6666),
|
||||||
|
|
||||||
# debug_mode=True,
|
debug_mode=True,
|
||||||
),
|
),
|
||||||
open_feed(
|
open_feed(
|
||||||
fqsns,
|
fqsns,
|
||||||
|
@ -73,13 +75,12 @@ def test_basic_rt_feed(
|
||||||
ohlcv: ShmArray = flume.rt_shm
|
ohlcv: ShmArray = flume.rt_shm
|
||||||
hist_ohlcv: ShmArray = flume.hist_shm
|
hist_ohlcv: ShmArray = flume.hist_shm
|
||||||
|
|
||||||
# stream some ticks and ensure we see data from both symbol
|
async with feed.open_multi_stream(brokers) as stream:
|
||||||
# subscriptions.
|
|
||||||
stream = feed.streams[brokername]
|
|
||||||
|
|
||||||
# pull the first startup quotes, one for each fqsn, and
|
# pull the first startup quotes, one for each fqsn, and
|
||||||
# ensure they match each flume's startup quote value.
|
# ensure they match each flume's startup quote value.
|
||||||
fqsns_copy = fqsns.copy()
|
fqsns_copy = fqsns.copy()
|
||||||
|
with trio.fail_after(0.5):
|
||||||
for _ in range(1):
|
for _ in range(1):
|
||||||
first_quotes = await stream.receive()
|
first_quotes = await stream.receive()
|
||||||
for fqsn, quote in first_quotes.items():
|
for fqsn, quote in first_quotes.items():
|
||||||
|
@ -95,6 +96,7 @@ def test_basic_rt_feed(
|
||||||
assert quote['last'] == flume.first_quote['last']
|
assert quote['last'] == flume.first_quote['last']
|
||||||
|
|
||||||
cntr = Counter()
|
cntr = Counter()
|
||||||
|
with trio.fail_after(3):
|
||||||
async for quotes in stream:
|
async for quotes in stream:
|
||||||
for fqsn, quote in quotes.items():
|
for fqsn, quote in quotes.items():
|
||||||
cntr[fqsn] += 1
|
cntr[fqsn] += 1
|
||||||
|
@ -118,10 +120,9 @@ def test_basic_rt_feed(
|
||||||
f'hist_ohlc: {hist_row}\n'
|
f'hist_ohlc: {hist_row}\n'
|
||||||
)
|
)
|
||||||
|
|
||||||
if cntr.total() >= 100:
|
if cntr.total() >= max_quotes:
|
||||||
break
|
break
|
||||||
|
|
||||||
# await tractor.breakpoint()
|
|
||||||
assert set(cntr.keys()) == fqsns
|
assert set(cntr.keys()) == fqsns
|
||||||
|
|
||||||
trio.run(main)
|
trio.run(main)
|
||||||
|
|
Loading…
Reference in New Issue