|
| 1 | +import requests |
1 | 2 | import random |
2 | 3 | import logging |
3 | 4 | import string |
|
23 | 24 | from . import dfly_args |
24 | 25 | from .instance import DflyInstance, DflyInstanceFactory |
25 | 26 |
|
| 27 | +from prometheus_client.parser import text_string_to_metric_families |
| 28 | + |
26 | 29 | BASE_PORT = 1111 |
27 | 30 |
|
28 | 31 |
|
@@ -610,58 +613,68 @@ async def test_keyspace_events_config_set(async_client: aioredis.Redis): |
610 | 613 | async def test_reply_count(async_client: aioredis.Redis): |
611 | 614 | """Make sure reply aggregations reduce reply counts for common cases""" |
612 | 615 |
|
613 | | - async def get_reply_count(): |
614 | | - return (await async_client.info("STATS"))["reply_count"] |
| 616 | + port = int(async_client.get_connection_kwargs().get("port")) |
| 617 | + METRICS_URL = f"http://localhost:{port}/metrics" |
| 618 | + logging.getLogger("urllib3").setLevel(logging.WARNING) |
| 619 | + |
| 620 | + def get_reply_count(): |
| 621 | + response = requests.get(METRICS_URL) |
| 622 | + response.raise_for_status() |
| 623 | + families = text_string_to_metric_families(response.text) |
| 624 | + for metric in families: |
| 625 | + if metric.name == "dragonfly_reply": |
| 626 | + assert metric.type == "counter" |
| 627 | + return int(metric.samples[0].value) |
| 628 | + return None |
615 | 629 |
|
616 | 630 | async def measure(aw): |
617 | | - before = await get_reply_count() |
618 | | - await aw |
619 | | - return await get_reply_count() - before - 1 |
| 631 | + before = get_reply_count() |
| 632 | + aw |
| 633 | + return get_reply_count() - before |
620 | 634 |
|
621 | 635 | await async_client.config_resetstat() |
622 | | - base = await get_reply_count() |
623 | | - info_diff = await get_reply_count() - base |
624 | | - assert info_diff == 1 |
| 636 | + base = get_reply_count() |
| 637 | + info_diff = get_reply_count() - base |
| 638 | + assert info_diff == 0 # no commands yet |
625 | 639 |
|
626 | 640 | # Warm client buffer up |
627 | 641 | await async_client.lpush("warmup", *(i for i in range(500))) |
628 | 642 | await async_client.lrange("warmup", 0, -1) |
629 | 643 |
|
630 | 644 | # Integer list |
631 | 645 | await async_client.lpush("list-1", *(i for i in range(100))) |
632 | | - assert await measure(async_client.lrange("list-1", 0, -1)) == 1 |
| 646 | + assert await measure(await async_client.lrange("list-1", 0, -1)) == 0 |
633 | 647 |
|
634 | 648 | # Integer set |
635 | 649 | await async_client.sadd("set-1", *(i for i in range(100))) |
636 | | - assert await measure(async_client.smembers("set-1")) == 1 |
| 650 | + assert await measure(await async_client.smembers("set-1")) == 0 |
637 | 651 |
|
638 | 652 | # Sorted sets |
639 | 653 | await async_client.zadd("zset-1", mapping={str(i): i for i in range(50)}) |
640 | | - assert await measure(async_client.zrange("zset-1", 0, -1, withscores=True)) == 1 |
641 | | - |
| 654 | + assert await measure(await async_client.zrange("zset-1", 0, -1, withscores=True)) == 0 |
642 | 655 | # Exec call |
643 | 656 | e = async_client.pipeline(transaction=True) |
644 | 657 | for _ in range(100): |
645 | 658 | e.incr("num-1") |
646 | 659 |
|
647 | 660 | # one - for MULTI-OK, one for the rest. Depends on the squashing efficiency, |
648 | 661 | # can be either 1 or 2 replies. |
649 | | - assert await measure(e.execute()) <= 2 |
| 662 | + assert await measure(await e.execute()) <= 1 |
650 | 663 |
|
651 | 664 | # Just pipeline |
652 | 665 | p = async_client.pipeline(transaction=False) |
653 | 666 | for _ in range(100): |
654 | 667 | p.incr("num-1") |
655 | | - assert await measure(p.execute()) <= 2 |
| 668 | + assert await measure(await p.execute()) <= 1 |
656 | 669 |
|
657 | 670 | # Script result |
658 | | - assert await measure(async_client.eval('return {1,2,{3,4},5,6,7,8,"nine"}', 0)) == 1 |
| 671 | + assert await measure(await async_client.eval('return {1,2,{3,4},5,6,7,8,"nine"}', 0)) == 0 |
659 | 672 |
|
660 | 673 | # Search results |
661 | 674 | await async_client.execute_command("FT.CREATE i1 SCHEMA name text") |
662 | 675 | for i in range(50): |
663 | 676 | await async_client.hset(f"key-{i}", "name", f"name number {i}") |
664 | | - assert await measure(async_client.ft("i1").search("*")) == 1 |
| 677 | + assert await measure(await async_client.ft("i1").search("*")) == 0 |
665 | 678 |
|
666 | 679 |
|
667 | 680 | async def test_big_command(df_server, size=8 * 1024): |
|
0 commit comments