summaryrefslogtreecommitdiff
path: root/tests/test_timeseries.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_timeseries.py')
-rw-r--r--tests/test_timeseries.py243
1 files changed, 241 insertions, 2 deletions
diff --git a/tests/test_timeseries.py b/tests/test_timeseries.py
index 7d42147..6ced535 100644
--- a/tests/test_timeseries.py
+++ b/tests/test_timeseries.py
@@ -1,8 +1,11 @@
+import math
import time
from time import sleep
import pytest
+import redis
+
from .conftest import skip_ifmodversion_lt
@@ -230,6 +233,84 @@ def test_range_advanced(client):
assert [(0, 5.0), (5, 6.0)] == client.ts().range(
1, 0, 10, aggregation_type="count", bucket_size_msec=10, align=5
)
+ assert [(0, 2.55), (10, 3.0)] == client.ts().range(
+ 1, 0, 10, aggregation_type="twa", bucket_size_msec=10
+ )
+
+
+@pytest.mark.redismod
+@skip_ifmodversion_lt("1.8.0", "timeseries")
+def test_range_latest(client: redis.Redis):
+ timeseries = client.ts()
+ timeseries.create("t1")
+ timeseries.create("t2")
+ timeseries.createrule("t1", "t2", aggregation_type="sum", bucket_size_msec=10)
+ timeseries.add("t1", 1, 1)
+ timeseries.add("t1", 2, 3)
+ timeseries.add("t1", 11, 7)
+ timeseries.add("t1", 13, 1)
+ res = timeseries.range("t1", 0, 20)
+ assert res == [(1, 1.0), (2, 3.0), (11, 7.0), (13, 1.0)]
+ res = timeseries.range("t2", 0, 10)
+ assert res == [(0, 4.0)]
+ res = timeseries.range("t2", 0, 10, latest=True)
+ assert res == [(0, 4.0), (10, 8.0)]
+ res = timeseries.range("t2", 0, 9, latest=True)
+ assert res == [(0, 4.0)]
+
+
+@pytest.mark.redismod
+@skip_ifmodversion_lt("1.8.0", "timeseries")
+def test_range_bucket_timestamp(client: redis.Redis):
+ timeseries = client.ts()
+ timeseries.create("t1")
+ timeseries.add("t1", 15, 1)
+ timeseries.add("t1", 17, 4)
+ timeseries.add("t1", 51, 3)
+ timeseries.add("t1", 73, 5)
+ timeseries.add("t1", 75, 3)
+ assert [(10, 4.0), (50, 3.0), (70, 5.0)] == timeseries.range(
+ "t1", 0, 100, align=0, aggregation_type="max", bucket_size_msec=10
+ )
+ assert [(20, 4.0), (60, 3.0), (80, 5.0)] == timeseries.range(
+ "t1",
+ 0,
+ 100,
+ align=0,
+ aggregation_type="max",
+ bucket_size_msec=10,
+ bucket_timestamp="+",
+ )
+
+
+@pytest.mark.redismod
+@skip_ifmodversion_lt("1.8.0", "timeseries")
+def test_range_empty(client: redis.Redis):
+ timeseries = client.ts()
+ timeseries.create("t1")
+ timeseries.add("t1", 15, 1)
+ timeseries.add("t1", 17, 4)
+ timeseries.add("t1", 51, 3)
+ timeseries.add("t1", 73, 5)
+ timeseries.add("t1", 75, 3)
+ assert [(10, 4.0), (50, 3.0), (70, 5.0)] == timeseries.range(
+ "t1", 0, 100, align=0, aggregation_type="max", bucket_size_msec=10
+ )
+ res = timeseries.range(
+ "t1", 0, 100, align=0, aggregation_type="max", bucket_size_msec=10, empty=True
+ )
+ for i in range(len(res)):
+ if math.isnan(res[i][1]):
+ res[i] = (res[i][0], None)
+ assert [
+ (10, 4.0),
+ (20, None),
+ (30, None),
+ (40, None),
+ (50, 3.0),
+ (60, None),
+ (70, 5.0),
+ ] == res
@pytest.mark.redismod
@@ -262,11 +343,87 @@ def test_rev_range(client):
assert [(1, 10.0), (0, 1.0)] == client.ts().revrange(
1, 0, 10, aggregation_type="count", bucket_size_msec=10, align=1
)
+ assert [(10, 3.0), (0, 2.55)] == client.ts().revrange(
+ 1, 0, 10, aggregation_type="twa", bucket_size_msec=10
+ )
+
+
+@pytest.mark.redismod
+@skip_ifmodversion_lt("1.8.0", "timeseries")
+def test_revrange_latest(client: redis.Redis):
+ timeseries = client.ts()
+ timeseries.create("t1")
+ timeseries.create("t2")
+ timeseries.createrule("t1", "t2", aggregation_type="sum", bucket_size_msec=10)
+ timeseries.add("t1", 1, 1)
+ timeseries.add("t1", 2, 3)
+ timeseries.add("t1", 11, 7)
+ timeseries.add("t1", 13, 1)
+ res = timeseries.revrange("t2", 0, 10)
+ assert res == [(0, 4.0)]
+ res = timeseries.revrange("t2", 0, 10, latest=True)
+ assert res == [(10, 8.0), (0, 4.0)]
+ res = timeseries.revrange("t2", 0, 9, latest=True)
+ assert res == [(0, 4.0)]
+
+
+@pytest.mark.redismod
+@skip_ifmodversion_lt("1.8.0", "timeseries")
+def test_revrange_bucket_timestamp(client: redis.Redis):
+ timeseries = client.ts()
+ timeseries.create("t1")
+ timeseries.add("t1", 15, 1)
+ timeseries.add("t1", 17, 4)
+ timeseries.add("t1", 51, 3)
+ timeseries.add("t1", 73, 5)
+ timeseries.add("t1", 75, 3)
+ assert [(70, 5.0), (50, 3.0), (10, 4.0)] == timeseries.revrange(
+ "t1", 0, 100, align=0, aggregation_type="max", bucket_size_msec=10
+ )
+ assert [(20, 4.0), (60, 3.0), (80, 5.0)] == timeseries.range(
+ "t1",
+ 0,
+ 100,
+ align=0,
+ aggregation_type="max",
+ bucket_size_msec=10,
+ bucket_timestamp="+",
+ )
+
+
+@pytest.mark.redismod
+@skip_ifmodversion_lt("1.8.0", "timeseries")
+def test_revrange_empty(client: redis.Redis):
+ timeseries = client.ts()
+ timeseries.create("t1")
+ timeseries.add("t1", 15, 1)
+ timeseries.add("t1", 17, 4)
+ timeseries.add("t1", 51, 3)
+ timeseries.add("t1", 73, 5)
+ timeseries.add("t1", 75, 3)
+ assert [(70, 5.0), (50, 3.0), (10, 4.0)] == timeseries.revrange(
+ "t1", 0, 100, align=0, aggregation_type="max", bucket_size_msec=10
+ )
+ res = timeseries.revrange(
+ "t1", 0, 100, align=0, aggregation_type="max", bucket_size_msec=10, empty=True
+ )
+ for i in range(len(res)):
+ if math.isnan(res[i][1]):
+ res[i] = (res[i][0], None)
+ assert [
+ (70, 5.0),
+ (60, None),
+ (50, 3.0),
+ (40, None),
+ (30, None),
+ (20, None),
+ (10, 4.0),
+ ] == res
@pytest.mark.redismod
@pytest.mark.onlynoncluster
-def testMultiRange(client):
+def test_mrange(client):
client.ts().create(1, labels={"Test": "This", "team": "ny"})
client.ts().create(2, labels={"Test": "This", "Taste": "That", "team": "sf"})
for i in range(100):
@@ -353,6 +510,31 @@ def test_multi_range_advanced(client):
@pytest.mark.redismod
@pytest.mark.onlynoncluster
+@skip_ifmodversion_lt("1.8.0", "timeseries")
+def test_mrange_latest(client: redis.Redis):
+ timeseries = client.ts()
+ timeseries.create("t1")
+ timeseries.create("t2", labels={"is_compaction": "true"})
+ timeseries.create("t3")
+ timeseries.create("t4", labels={"is_compaction": "true"})
+ timeseries.createrule("t1", "t2", aggregation_type="sum", bucket_size_msec=10)
+ timeseries.createrule("t3", "t4", aggregation_type="sum", bucket_size_msec=10)
+ timeseries.add("t1", 1, 1)
+ timeseries.add("t1", 2, 3)
+ timeseries.add("t1", 11, 7)
+ timeseries.add("t1", 13, 1)
+ timeseries.add("t3", 1, 1)
+ timeseries.add("t3", 2, 3)
+ timeseries.add("t3", 11, 7)
+ timeseries.add("t3", 13, 1)
+ assert client.ts().mrange(0, 10, filters=["is_compaction=true"], latest=True) == [
+ {"t2": [{}, [(0, 4.0), (10, 8.0)]]},
+ {"t4": [{}, [(0, 4.0), (10, 8.0)]]},
+ ]
+
+
+@pytest.mark.redismod
+@pytest.mark.onlynoncluster
@skip_ifmodversion_lt("99.99.99", "timeseries")
def test_multi_reverse_range(client):
client.ts().create(1, labels={"Test": "This", "team": "ny"})
@@ -435,6 +617,30 @@ def test_multi_reverse_range(client):
@pytest.mark.redismod
+@pytest.mark.onlynoncluster
+@skip_ifmodversion_lt("1.8.0", "timeseries")
+def test_mrevrange_latest(client: redis.Redis):
+ timeseries = client.ts()
+ timeseries.create("t1")
+ timeseries.create("t2", labels={"is_compaction": "true"})
+ timeseries.create("t3")
+ timeseries.create("t4", labels={"is_compaction": "true"})
+ timeseries.createrule("t1", "t2", aggregation_type="sum", bucket_size_msec=10)
+ timeseries.createrule("t3", "t4", aggregation_type="sum", bucket_size_msec=10)
+ timeseries.add("t1", 1, 1)
+ timeseries.add("t1", 2, 3)
+ timeseries.add("t1", 11, 7)
+ timeseries.add("t1", 13, 1)
+ timeseries.add("t3", 1, 1)
+ timeseries.add("t3", 2, 3)
+ timeseries.add("t3", 11, 7)
+ timeseries.add("t3", 13, 1)
+ assert client.ts().mrevrange(
+ 0, 10, filters=["is_compaction=true"], latest=True
+ ) == [{"t2": [{}, [(10, 8.0), (0, 4.0)]]}, {"t4": [{}, [(10, 8.0), (0, 4.0)]]}]
+
+
+@pytest.mark.redismod
def test_get(client):
name = "test"
client.ts().create(name)
@@ -446,6 +652,21 @@ def test_get(client):
@pytest.mark.redismod
+@skip_ifmodversion_lt("1.8.0", "timeseries")
+def test_get_latest(client: redis.Redis):
+ timeseries = client.ts()
+ timeseries.create("t1")
+ timeseries.create("t2")
+ timeseries.createrule("t1", "t2", aggregation_type="sum", bucket_size_msec=10)
+ timeseries.add("t1", 1, 1)
+ timeseries.add("t1", 2, 3)
+ timeseries.add("t1", 11, 7)
+ timeseries.add("t1", 13, 1)
+ assert (0, 4.0) == timeseries.get("t2")
+ assert (10, 8.0) == timeseries.get("t2", latest=True)
+
+
+@pytest.mark.redismod
@pytest.mark.onlynoncluster
def test_mget(client):
client.ts().create(1, labels={"Test": "This"})
@@ -468,6 +689,24 @@ def test_mget(client):
@pytest.mark.redismod
+@pytest.mark.onlynoncluster
+@skip_ifmodversion_lt("1.8.0", "timeseries")
+def test_mget_latest(client: redis.Redis):
+ timeseries = client.ts()
+ timeseries.create("t1")
+ timeseries.create("t2", labels={"is_compaction": "true"})
+ timeseries.createrule("t1", "t2", aggregation_type="sum", bucket_size_msec=10)
+ timeseries.add("t1", 1, 1)
+ timeseries.add("t1", 2, 3)
+ timeseries.add("t1", 11, 7)
+ timeseries.add("t1", 13, 1)
+ assert timeseries.mget(filters=["is_compaction=true"]) == [{"t2": [{}, 0, 4.0]}]
+ assert [{"t2": [{}, 10, 8.0]}] == timeseries.mget(
+ filters=["is_compaction=true"], latest=True
+ )
+
+
+@pytest.mark.redismod
def test_info(client):
client.ts().create(1, retention_msecs=5, labels={"currentLabel": "currentData"})
info = client.ts().info(1)
@@ -506,7 +745,7 @@ def test_pipeline(client):
pipeline.execute()
info = client.ts().info("with_pipeline")
- assert info.lastTimeStamp == 99
+ assert info.last_timestamp == 99
assert info.total_samples == 100
assert client.ts().get("with_pipeline")[1] == 99 * 1.1