Beispiel #1
0
def test_evict():
    env = Env()
    env.skipOnCluster()
    skip_on_rlec()
    with env.getClusterConnectionIfNeeded() as r:
        info = r.execute_command('INFO')
        max_mem = info['used_memory'] + 1024 * 1024
        assert r.execute_command('CONFIG', 'SET', 'maxmemory',
                                 str(max_mem) + 'b')
        assert r.execute_command('CONFIG', 'SET', 'maxmemory-policy',
                                 'allkeys-lru')
        init(env, r)

        # make sure t{1} deleted
        res = r.execute_command('keys *')
        i = 4
        while b't{1}' in res:
            assert r.execute_command('TS.CREATE', 't{%s}' % (i, ))
            i += 1
            res = r.execute_command('keys *')

        res = r.execute_command('TS.QUERYINDEX', 'name=(mush)')
        env.assertEqual(res, [])

        # restore maxmemory
        assert r.execute_command('CONFIG', 'SET', 'maxmemory', '0')
Beispiel #2
0
def test_rename_dst():

    env = Env()
    with env.getClusterConnectionIfNeeded() as r:

        assert r.execute_command('TS.CREATE', 'a{2}')
        assert r.execute_command('TS.CREATE', 'b{2}')
        assert r.execute_command('TS.CREATERULE', 'a{2}', 'b{2}',
                                 'AGGREGATION', 'AVG', 5000)

        env.assertTrue(r.execute_command('RENAME', 'b{2}', 'b1{2}'))
        aInfo = TSInfo(r.execute_command('TS.INFO', 'a{2}'))
        env.assertEqual(aInfo.sourceKey, None)
        env.assertEqual(aInfo.rules[0][0], b'b1{2}')

        assert r.execute_command('TS.CREATE', 'c{2}')
        assert r.execute_command('TS.CREATERULE', 'a{2}', 'c{2}',
                                 'AGGREGATION', 'COUNT', 2000)

        assert r.execute_command('TS.CREATE', 'd{2}')
        assert r.execute_command('TS.CREATERULE', 'a{2}', 'd{2}',
                                 'AGGREGATION', 'SUM', 3000)

        env.assertTrue(r.execute_command('RENAME', 'c{2}', 'c1{2}'))
        aInfo = TSInfo(r.execute_command('TS.INFO', 'a{2}'))
        env.assertEqual(aInfo.sourceKey, None)
        env.assertEqual(aInfo.rules[0][0], b'b1{2}')
        env.assertEqual(aInfo.rules[1][0], b'c1{2}')
        env.assertEqual(aInfo.rules[2][0], b'd{2}')
Beispiel #3
0
def test_groupby_reduce_empty():
    env = Env()
    with env.getClusterConnectionIfNeeded() as r:
        assert r.execute_command('TS.ADD', 's1', 1, 100, 'LABELS', 'metric_family', 'cpu', 'metric_name', 'user')
        assert r.execute_command('TS.ADD', 's2', 2, 55, 'LABELS', 'metric_family', 'cpu', 'metric_name', 'user')
        assert r.execute_command('TS.ADD', 's3', 2, 40, 'LABELS', 'metric_family', 'cpu', 'metric_name', 'system')
        assert r.execute_command('TS.ADD', 's1', 2, 95)

        actual_result = r.execute_command(
            'TS.mrange', '-', '+', 'WITHLABELS', 'FILTER', 'metric_family=cpu', 'GROUPBY', 'labelX', 'REDUCE', 'max')
        env.assertEqual(actual_result, [])
def test_rename_indexed():

    env = Env()
    with env.getClusterConnectionIfNeeded() as r:
        
        assert r.execute_command('TS.ADD', 'a{3}', 100, 200, 'LABELS', 'sensor_id', '2', 'area_id', '32')
        env.assertEqual(r.execute_command('TS.MGET', 'FILTER', 'area_id=32'), [[b'a{3}', [], [100, b'200']]])

        env.assertTrue(r.execute_command('RENAME', 'a{3}', 'a1{3}'))

        env.assertEqual(r.execute_command('TS.MGET', 'FILTER', 'area_id=32'), [[b'a1{3}', [], [100, b'200']]])
Beispiel #5
0
def test_unlink():
    env = Env()
    with env.getClusterConnectionIfNeeded() as r:
        init(env, r)

        res = r.execute_command('UNLINK', 't{1}')
        res = r.execute_command('TS.QUERYINDEX', 'name=(mush,zavi,rex)')
        env.assertEqual(sorted(res), sorted([b't{2}', b't{1}_agg']))
        res = r.execute_command('TS.MGET', 'filter', 'name=(mush,zavi,rex)')
        env.assertEqual(sorted(res),
                        sorted([[b't{2}', [], []], [b't{1}_agg', [], []]]))
Beispiel #6
0
def test_flush():
    env = Env()
    with env.getClusterConnectionIfNeeded() as r:
        init(env, r)

        assert r.execute_command('FLUSHALL')

        res = r.execute_command('TS.QUERYINDEX', 'name=(mush,zavi,rex)')
        env.assertEqual(res, [])

        init(env, r)
        assert r.execute_command('FLUSHDB')
        res = r.execute_command('TS.QUERYINDEX', 'name=(mush,zavi,rex)')
        env.assertEqual(res, [])
Beispiel #7
0
def test_rename_none_ts():

    env = Env()
    with env.getClusterConnectionIfNeeded() as r:

        assert r.execute_command('TS.CREATE', 'a{4}')
        assert r.execute_command('SET', 'key1{4}', 'val1')
        assert r.execute_command('SET', 'key2{4}', 'val2')

        env.assertTrue(r.execute_command('RENAME', 'key1{4}', 'key3{4}'))
        env.assertTrue(r.execute_command('RENAME', 'key2{4}', 'key1{4}'))

        assert r.execute_command('SET', 'key1{4}', 'val3')
        assert r.execute_command('SET', 'key3{4}', 'val4')

        aInfo = TSInfo(r.execute_command('TS.INFO', 'a{4}'))
        env.assertEqual(aInfo.sourceKey, None)
        env.assertEqual(aInfo.rules, [])
def test_non_local_data():
    env = Env()
    with env.getClusterConnectionIfNeeded() as r:
        r.execute_command('TS.ADD', '{host1}_metric_1', 1, 100, 'LABELS',
                          'metric', 'cpu')
        r.execute_command('TS.ADD', '{host1}_metric_2', 2, 40, 'LABELS',
                          'metric', 'cpu')
        r.execute_command('TS.ADD', '{host1}_metric_1', 2, 95)
        r.execute_command('TS.ADD', '{host1}_metric_1', 10, 99)

    previous_results = []
    # ensure that initiating the query on different shards always replies with the same series
    for shard in range(0, env.shardsCount):
        shard_conn = env.getConnection(shard)
        actual_result = shard_conn.execute_command(
            'TS.MRANGE - + FILTER metric=cpu')
        env.assertEqual(len(actual_result), 2)
        for previous_result in previous_results:
            ensure_replies_series_match(env, previous_result, actual_result)
        previous_results.append(actual_result)
def test_non_local_filtered_data():
    env = Env()
    with env.getClusterConnectionIfNeeded() as r:
        r.execute_command('TS.ADD', '{host1}_metric_1', 1, 100, 'LABELS',
                          'metric', 'cpu')
        r.execute_command('TS.ADD', '{host1}_metric_2', 2, 40, 'LABELS',
                          'metric', 'cpu')
        r.execute_command('TS.ADD', '{host1}_metric_1', 2, 95)
        r.execute_command('TS.ADD', '{host1}_metric_1', 10, 99)

    previous_results = []
    # ensure that initiating the query on different shards always replies with the same series
    for shard in range(0, env.shardsCount):
        shard_conn = env.getConnection(shard)
        # send undordered timestamps to test for sorting
        actual_result = shard_conn.execute_command(
            'TS.MRANGE - + FILTER_BY_TS 11 5 25 55 101 18 9 1900 2 FILTER metric=cpu'
        )
        env.assertEqual(len(actual_result), 2)

        # ensure reply is properly filtered by TS
        for serie in actual_result:
            serie_ts = serie[2]
            # ensure only timestamp 2 is present on reply
            env.assertEqual(len(serie_ts), 1)
            env.assertEqual(serie_ts[0][0], 2)

        for previous_result in previous_results:
            ensure_replies_series_match(env, previous_result, actual_result)
        previous_results.append(actual_result)
def testLibmrFail():
    env = Env()
    if env.shardsCount < 3:
        env.skip()
    if (not env.isCluster):
        env.skip()
    env.skipOnSlave()  # There can't be 2 rdb save at the same time
    env.skipOnAOF()
    start_ts = 1
    samples_count = 10
    with env.getClusterConnectionIfNeeded() as r:
        assert r.execute_command('TS.CREATE', 'tester1{1}', 'LABELS', 'name',
                                 'bob')
        _insert_data(r, 'tester1{1}', start_ts, samples_count, 1)
        try:
            env.envRunner.shards[2].stopEnv()
        except Exception as e:
            pass

    Refresh_Cluster(env)
    try:
        actual_result = env.getConnection(1).execute_command(
            'TS.mrange', start_ts, start_ts + samples_count, 'WITHLABELS',
            'FILTER', 'name=bob')
        assert (False)
    except Exception as e:
        env.assertResponseError(e, "multi shard cmd failed")

    env.envRunner.shards[2].startEnv()
    Refresh_Cluster(env)
    expected_res = [[
        b'tester1{1}', [[b'name', b'bob']],
        [[1, b'1'], [2, b'1'], [3, b'1'], [4, b'1'], [5, b'1'], [6, b'1'],
         [7, b'1'], [8, b'1'], [9, b'1'], [10, b'1']]
    ]]
    actual_result = env.getConnection(1).execute_command(
        'TS.mrange', start_ts, start_ts + samples_count, 'WITHLABELS',
        'FILTER', 'name=bob')
    env.assertEqual(actual_result, expected_res)
Beispiel #11
0
def test_restore():
    env = Env()
    with env.getClusterConnectionIfNeeded() as r:
        init(env, r)

        serialized_val = r.execute_command('DUMP', 't{1}')
        assert r.execute_command('del', 't{1}')

        res = r.execute_command('TS.QUERYINDEX', 'name=(mush,zavi,rex)')
        env.assertEqual(sorted(res), sorted({b't{2}', b't{1}_agg'}))
        res = r.execute_command('TS.MGET', 'filter', 'name=(mush,zavi,rex)')
        env.assertEqual(sorted(res),
                        sorted([[b't{1}_agg', [], []], [b't{2}', [], []]]))

        assert r.execute_command('RESTORE', 't{1}', '0', serialized_val)
        res = r.execute_command('TS.QUERYINDEX', 'name=(mush,zavi,rex)')
        env.assertEqual(sorted(res), sorted([b't{1}', b't{2}', b't{1}_agg']))
        res = r.execute_command('TS.MGET', 'filter', 'name=(mush,zavi,rex)')
        env.assertEqual(
            sorted(res),
            sorted([[b't{1}', [], [10, b'19']], [b't{2}', [], []],
                    [b't{1}_agg', [], []]]))
Beispiel #12
0
def test_renamenx():
    env = Env()
    with env.getClusterConnectionIfNeeded() as r:
        init(env, r)

        assert r.execute_command('RENAMENX', 't{1}', 't{1}_renamed')
        res = r.execute_command('ts.info', 't{1}_agg')
        index = res.index(b'sourceKey')
        env.assertEqual(res[index + 1], b't{1}_renamed')

        res = r.execute_command('TS.QUERYINDEX', 'name=(mush,zavi,rex)')
        env.assertEqual(sorted(res), [b't{1}_agg', b't{1}_renamed', b't{2}'])
        res = r.execute_command('TS.MGET', 'filter', 'name=(mush,zavi,rex)')
        env.assertEqual(
            sorted(res),
            [[b't{1}_agg', [], []], [b't{1}_renamed', [], [10, b'19']],
             [b't{2}', [], []]])

        assert r.execute_command('RENAMENX', 't{1}_agg', 't{1}_agg_renamed')
        res = r.execute_command('ts.info', 't{1}_renamed')
        index = res.index(b'rules')
        env.assertEqual(res[index + 1], [[b't{1}_agg_renamed', 10, b'AVG']])
def test_mrange_filterby():
    start_ts = 1511885909
    samples_count = 50
    env = Env()

    with env.getClusterConnectionIfNeeded() as r:
        assert r.execute_command('TS.CREATE', 'tester1', 'LABELS', 'name',
                                 'bob', 'class', 'middle', 'generation', 'x')
        assert r.execute_command('TS.CREATE', 'tester2', 'LABELS', 'name',
                                 'rudy', 'class', 'junior', 'generation', 'x')
        assert r.execute_command('TS.CREATE', 'tester3', 'LABELS', 'name',
                                 'fabi', 'class', 'top', 'generation', 'x')
        _insert_data(r, 'tester1', start_ts, samples_count, 5)
        _insert_data(r, 'tester2', start_ts, samples_count, 15)
        _insert_data(r, 'tester3', start_ts, samples_count, 25)

        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count,
                                     'FILTER_BY_VALUE', "a", 1, 'FILTER',
                                     'name=bob')
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count,
                                     'FILTER_BY_VALUE', "a", "a", 'FILTER',
                                     'name=bob')
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count,
                                     'FILTER_BY_VALUE', 1, "a", 'FILTER',
                                     'name=bob')

        expected_result = [
            [b'tester1', [], []],
            [
                b'tester2', [],
                [[start_ts + i, str(15).encode('ascii')]
                 for i in range(samples_count)]
            ],
            [b'tester3', [], []],
        ]
        actual_result = r.execute_command('TS.mrange', start_ts,
                                          start_ts + samples_count,
                                          'FILTER_BY_VALUE', 10, 20, 'FILTER',
                                          'generation=x')
        env.assertEqual(sorted(actual_result), sorted(expected_result))

        expected_result = [
            [b'tester1', [], []],
            [
                b'tester2', [],
                [[start_ts + i, str(15).encode('ascii')] for i in range(9, 12)]
            ],
            [b'tester3', [], []],
        ]
        actual_result = r.execute_command('TS.mrange', start_ts,
                                          start_ts + samples_count,
                                          'FILTER_BY_TS', start_ts + 9,
                                          start_ts + 10, start_ts + 11,
                                          'FILTER_BY_VALUE', 10, 20, 'FILTER',
                                          'generation=x')
        env.assertEqual(sorted(actual_result), sorted(expected_result))
Beispiel #14
0
def test_groupby_reduce_multiple_groups():
    env = Env()
    with env.getClusterConnectionIfNeeded() as r:
        assert r.execute_command('TS.ADD', 's1', 1, 100, 'LABELS', 'HOST', 'A', 'REGION', 'EU', 'PROVIDER', 'AWS')
        assert r.execute_command('TS.ADD', 's2', 1, 55, 'LABELS', 'HOST', 'B', 'REGION', 'EU', 'PROVIDER', 'AWS')
        assert r.execute_command('TS.ADD', 's2', 2, 90, 'LABELS', 'HOST', 'B', 'REGION', 'EU', 'PROVIDER', 'AWS')
        assert r.execute_command('TS.ADD', 's3', 2, 40, 'LABELS', 'HOST', 'C', 'REGION', 'US', 'PROVIDER', 'AWS')

        actual_result = r.execute_command(
            'TS.mrange', '-', '+', 'WITHLABELS', 'FILTER', 'PROVIDER=AWS', 'GROUPBY', 'REGION', 'REDUCE', 'max')
        serie1 = actual_result[0]
        serie1_name = serie1[0]
        serie1_labels = serie1[1]
        serie1_values = serie1[2]
        env.assertEqual(serie1_values, [[1, b'100'],[2, b'90']])
        env.assertEqual(serie1_name, b'REGION=EU')
        env.assertEqual(serie1_labels[0][0], b'REGION')
        env.assertEqual(serie1_labels[0][1], b'EU')
        env.assertEqual(serie1_labels[1][0], b'__reducer__')
        env.assertEqual(serie1_labels[1][1], b'max')
        env.assertEqual(serie1_labels[2][0], b'__source__')
        env.assertEqual(sorted(serie1_labels[2][1].decode("ascii").split(",")), ['s1', 's2'])
        serie2 = actual_result[1]
        serie2_name = serie2[0]
        serie2_labels = serie2[1]
        serie2_values = serie2[2]
        env.assertEqual(serie2_values, [[2, b'40']])
        env.assertEqual(serie2_name, b'REGION=US')
        env.assertEqual(serie2_labels[0][0], b'REGION')
        env.assertEqual(serie2_labels[0][1], b'US')
        env.assertEqual(serie2_labels[1][0], b'__reducer__')
        env.assertEqual(serie2_labels[1][1], b'max')
        env.assertEqual(serie2_labels[2][0], b'__source__')
        env.assertEqual(serie2_labels[2][1], b's3')
Beispiel #15
0
def test_groupby_reduce():
    env = Env()
    with env.getClusterConnectionIfNeeded() as r:
        assert r.execute_command('TS.ADD', 's1', 1, 100, 'LABELS', 'metric_family', 'cpu', 'metric_name', 'user')
        assert r.execute_command('TS.ADD', 's2', 2, 55, 'LABELS', 'metric_family', 'cpu', 'metric_name', 'user')
        assert r.execute_command('TS.ADD', 's3', 2, 40, 'LABELS', 'metric_family', 'cpu', 'metric_name', 'system')
        assert r.execute_command('TS.ADD', 's1', 2, 95)

        actual_result = r.execute_command(
            'TS.mrange', '-', '+', 'WITHLABELS', 'FILTER', 'metric_family=cpu', 'GROUPBY', 'metric_name', 'REDUCE', 'max')
        serie1 = actual_result[0]
        serie1_name = serie1[0]
        serie1_labels = serie1[1]
        serie1_values = serie1[2]
        env.assertEqual(serie1_values, [[2, b'40']])
        env.assertEqual(serie1_name, b'metric_name=system')
        env.assertEqual(serie1_labels[0][0], b'metric_name')
        env.assertEqual(serie1_labels[0][1], b'system')
        serie2 = actual_result[1]
        serie2_name = serie2[0]
        serie2_labels = serie2[1]
        serie2_values = serie2[2]
        env.assertEqual(serie2_name, b'metric_name=user')
        env.assertEqual(serie2_labels[0][0], b'metric_name')
        env.assertEqual(serie2_labels[0][1], b'user')
        env.assertEqual(serie2_labels[1][0], b'__reducer__')
        env.assertEqual(serie2_labels[1][1], b'max')
        env.assertEqual(serie2_labels[2][0], b'__source__')
        env.assertEqual(sorted(serie2_labels[2][1].decode("ascii").split(",")), ['s1', 's2'])
        env.assertEqual(serie2_values, [[1, b'100'], [2, b'95']])

        actual_result = r.execute_command(
            'TS.mrange', '-', '+', 'WITHLABELS', 'FILTER', 'metric_family=cpu', 'GROUPBY', 'metric_name', 'REDUCE', 'sum')
        serie2 = actual_result[1]
        serie2_values = serie2[2]
        env.assertEqual(serie2_values, [[1, b'100'], [2, b'150']])

        actual_result = r.execute_command(
            'TS.mrange', '-', '+', 'WITHLABELS', 'FILTER', 'metric_family=cpu', 'GROUPBY', 'metric_name', 'REDUCE', 'min')
        serie2 = actual_result[1]
        serie2_values = serie2[2]
        env.assertEqual(serie2_values, [[1, b'100'], [2, b'55']])

        actual_result = r.execute_command(
            'TS.mrange', '-', '+', 'WITHLABELS', 'COUNT', 1, 'FILTER', 'metric_family=cpu', 'GROUPBY', 'metric_name', 'REDUCE', 'min')
        serie2 = actual_result[1]
        serie2_values = serie2[2]
        env.assertEqual(serie2_values, [[1, b'100']])
Beispiel #16
0
def test_copy_compressed_uncompressed():
    env = Env()
    env.skipOnVersionSmaller("6.2.0")
    for compresssion in ["UNCOMPRESSED", 'COMPRESSED']:
        with env.getClusterConnectionIfNeeded() as r:
            r.execute_command('FLUSHALL')
            init(env, r, compression=compresssion)
            for i in range(1000):
                assert r.execute_command('TS.ADD', 't{1}', 1638304650 + i, i)

            assert r.execute_command('COPY', 't{1}', 't{1}_copied')
            t1_info = r.execute_command('ts.info', 't{1}')
            res = r.execute_command('ts.info', 't{1}_agg')
            index = res.index(b'sourceKey')
            env.assertEqual(res[index + 1], b't{1}')

            res = r.execute_command('ts.info', 't{1}_copied')
            index = res.index(b'sourceKey')
            env.assertEqual(res[index + 1], None)
            index = res.index(b'rules')
            env.assertEqual(res[index + 1], [])
            index = res.index(b'labels')
            env.assertEqual(res[index + 1], t1_info[index + 1])

            data = r.execute_command('TS.range', 't{1}', '-', '+')
            copied_data = r.execute_command(
                'TS.range',
                't{1}_copied',
                '-',
                '+',
            )
            assert data == copied_data

            res = r.execute_command('TS.QUERYINDEX', 'name=(mush,zavi,rex)')
            env.assertEqual(
                sorted(res),
                sorted([b't{1}', b't{2}', b't{1}_agg', b't{1}_copied']))
            res = r.execute_command('TS.MGET', 'filter',
                                    'name=(mush,zavi,rex)')
            env.assertEqual(
                sorted(res),
                sorted([[b't{1}', [], [1638305649, b'999']], [b't{2}', [], []],
                        [b't{1}_agg', [], [1638305630, b'984.5']],
                        [b't{1}_copied', [], [1638305649, b'999']]]))

            assert r.execute_command('COPY', 't{1}_agg', 't{1}_agg_copied')
            res = r.execute_command('ts.info', 't{1}_agg_copied')
            index = res.index(b'sourceKey')
            env.assertEqual(res[index + 1], None)
            index = res.index(b'rules')
            env.assertEqual(res[index + 1], [])

            res = r.execute_command('TS.QUERYINDEX', 'name=(mush,zavi,rex)')
            env.assertEqual(
                sorted(res),
                sorted([
                    b't{1}', b't{2}', b't{1}_agg', b't{1}_copied',
                    b't{1}_agg_copied'
                ]))
            res = r.execute_command('TS.MGET', 'filter',
                                    'name=(mush,zavi,rex)')
            env.assertEqual(
                sorted(res),
                sorted([[b't{1}', [], [1638305649, b'999']], [b't{2}', [], []],
                        [b't{1}_agg', [], [1638305630, b'984.5']],
                        [b't{1}_copied', [], [1638305649, b'999']],
                        [b't{1}_agg_copied', [], [1638305630, b'984.5']]]))
def test_range_by_labels():
    start_ts = 1511885909
    samples_count = 50
    env = Env()

    with Env().getClusterConnectionIfNeeded() as r:
        assert r.execute_command('TS.CREATE', 'tester1', 'LABELS', 'name',
                                 'bob', 'class', 'middle', 'generation', 'x')
        assert r.execute_command('TS.CREATE', 'tester2', 'LABELS', 'name',
                                 'rudy', 'class', 'junior', 'generation', 'x')
        assert r.execute_command('TS.CREATE', 'tester3', 'LABELS', 'name',
                                 'fabi', 'class', 'top', 'generation', 'x')
        _insert_data(r, 'tester1', start_ts, samples_count, 5)
        _insert_data(r, 'tester2', start_ts, samples_count, 15)
        _insert_data(r, 'tester3', start_ts, samples_count, 25)

        expected_result = [[start_ts + i, str(5).encode('ascii')]
                           for i in range(samples_count)]
        actual_result = r.execute_command('TS.mrange', start_ts,
                                          start_ts + samples_count, 'FILTER',
                                          'name=bob')
        assert [[b'tester1', [], expected_result]] == actual_result

        expected_result.reverse()
        actual_result = r.execute_command('TS.mrevrange', start_ts,
                                          start_ts + samples_count, 'FILTER',
                                          'name=bob')
        assert [[b'tester1', [], expected_result]] == actual_result

        def build_expected(val, time_bucket):
            return [[int(i - i % time_bucket),
                     str(val).encode('ascii')]
                    for i in range(start_ts, start_ts + samples_count +
                                   1, time_bucket)]

        actual_result = r.execute_command('TS.mrange', start_ts,
                                          start_ts + samples_count,
                                          'AGGREGATION', 'LAST', 5, 'FILTER',
                                          'generation=x')
        expected_result = [
            [b'tester1', [], build_expected(5, 5)],
            [b'tester2', [], build_expected(15, 5)],
            [b'tester3', [], build_expected(25, 5)],
        ]
        env.assertEqual(sorted(expected_result), sorted(actual_result))
        assert expected_result[1:] == sorted(r.execute_command(
            'TS.mrange', start_ts, start_ts + samples_count, 'AGGREGATION',
            'LAST', 5, 'FILTER', 'generation=x', 'class!=middle'),
                                             key=lambda x: x[0])
        actual_result = r.execute_command('TS.mrange', start_ts,
                                          start_ts + samples_count, 'COUNT', 3,
                                          'AGGREGATION', 'LAST', 5, 'FILTER',
                                          'generation=x')
        assert expected_result[0][2][:3] == sorted(actual_result,
                                                   key=lambda x: x[0])[0][2]
        actual_result = r.execute_command('TS.mrange', start_ts,
                                          start_ts + samples_count,
                                          'AGGREGATION', 'COUNT', 5, 'FILTER',
                                          'generation=x')
        assert [[1511885905, b'1']] == actual_result[0][2][:1]
        assert expected_result[0][2][1:9] == actual_result[0][2][1:9]
        actual_result = r.execute_command('TS.mrange', start_ts,
                                          start_ts + samples_count,
                                          'AGGREGATION', 'COUNT', 3, 'COUNT',
                                          3, 'FILTER', 'generation=x')
        assert 3 == len(actual_result[0]
                        [2])  # just checking that agg count before count works
        actual_result = r.execute_command('TS.mrange', start_ts,
                                          start_ts + samples_count, 'COUNT', 3,
                                          'AGGREGATION', 'COUNT', 3, 'FILTER',
                                          'generation=x')
        assert 3 == len(actual_result[0]
                        [2])  # just checking that agg count before count works
        actual_result = r.execute_command('TS.mrange', start_ts,
                                          start_ts + samples_count,
                                          'AGGREGATION', 'COUNT', 3, 'FILTER',
                                          'generation=x')
        assert 18 == len(
            actual_result[0]
            [2])  # just checking that agg count before count works

        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count, 'AGGREGATION',
                                     'invalid', 3, 'FILTER', 'generation=x')
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count, 'AGGREGATION',
                                     'AVG', 'string', 'FILTER', 'generation=x')
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count, 'COUNT',
                                     'string', 'FILTER', 'generation=x')
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', '-', '+',
                                     'FILTER')  # missing args
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', '-', '+',
                                     'RETLIF')  # no filter word
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', 'string',
                                     start_ts + samples_count, 'FILTER',
                                     'generation=x')
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts, 'string', 'FILTER',
                                     'generation=x')
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count, 'FILTER',
                                     'generation+x')
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count, 'FILTER',
                                     'generation!=x')

        # issue 414
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count, 'FILTER',
                                     'name=(bob,rudy,)')
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count, 'FILTER',
                                     'name=(bob,,rudy)')

        # test SELECTED_LABELS
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count,
                                     'SELECTED_LABELS', 'filter', 'k!=5')
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count,
                                     'SELECTED_LABELS', 'filter', 'k!=5')
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count,
                                     'SELECTED_LABELS', 'WITHLABELS', 'filter',
                                     'k!=5')
        with pytest.raises(redis.ResponseError) as excinfo:
            assert r.execute_command('TS.mrange', start_ts,
                                     start_ts + samples_count, 'WITHLABELS',
                                     'SELECTED_LABELS', 'filter', 'k!=5')
Beispiel #18
0
def test_rename_src():
    env = Env()
    with env.getClusterConnectionIfNeeded() as r:

        assert r.execute_command('TS.CREATE', 'a1{1}')
        assert r.execute_command('TS.CREATE', 'b{1}')

        env.assertTrue(r.execute_command('RENAME', 'a1{1}', 'a2{1}'))
        aInfo = TSInfo(r.execute_command('TS.INFO', 'a2{1}'))
        env.assertEqual(aInfo.sourceKey, None)
        env.assertEqual(aInfo.rules, [])

        assert r.execute_command('TS.CREATERULE', 'a2{1}', 'b{1}',
                                 'AGGREGATION', 'AVG', 5000)
        bInfo = TSInfo(r.execute_command('TS.INFO', 'b{1}'))
        env.assertEqual(bInfo.sourceKey, b'a2{1}')
        env.assertEqual(bInfo.rules, [])

        env.assertTrue(r.execute_command('RENAME', 'a2{1}', 'a3{1}'))
        bInfo = TSInfo(r.execute_command('TS.INFO', 'b{1}'))
        env.assertEqual(bInfo.sourceKey, b'a3{1}')
        env.assertEqual(bInfo.rules, [])