Added test
authorJeroen van der Heijden <jeroen@transceptor.technology>
Tue, 15 Sep 2020 08:48:43 +0000 (10:48 +0200)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Tue, 15 Sep 2020 08:48:43 +0000 (10:48 +0200)
itest/test_auto_duration.py
src/siri/db/points.c

index 2c0f147b868bfeda53eafc57e3fbcdaa24df5b1b..a6c88aa9281fb8b598ec4d418167e4ab6ef810b6 100644 (file)
@@ -29,434 +29,31 @@ class TestAutoDuration(TestBase):
     async def run(self):
         await self.client0.connect()
 
-        gap =
-        ts = int(time.time()) -
+        await self.db.add_pool(self.server1, sleep=30)
+        await self.assertIsRunning(self.db, self.client0, timeout=30)
 
-        points = []
+        series = {}
+        end_td = int(time.time())
+        start_ts = end_td - (3600 * 24 * 7 * 10)
+        tests = [[300, 10], [60, 5], [3600, 30], [60, 90], [10, 1]]
 
-        for i in range(tx,)
-            [ts, i]
-            for i
-        ]
+        for i, cfg in enumerate(tests):
+            interval, r = cfg
+            for nameval in [['int', 42], ['float', 3.14], ['str', 'hi']]:
+                name, val = nameval
+                series['{}-{}'.format(name, i)] = [
+                    [t + random.randint(-r, r), val]
+                    for t in range(start_ts, end_td, interval)
+                ]
 
         self.assertEqual(
-            await self.client0.insert(DATA),
+            await self.client0.insert(series),
             {'success_msg': 'Successfully inserted {} point(s).'.format(
-                LENPOINTS)})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select difference() from "series-001 integer"'),
-            {'series-001 integer': [[1471254708, -8], [1471254710, -4]]})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select difference() => difference() '
-                'from "series-001 integer"'),
-            {'series-001 integer': [[1471254710, 4]]})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select difference() => difference() => difference() '
-                'from "series-001 integer"'),
-            {'series-001 integer': []})
-
-        now = int(time.time())
-        self.assertEqual(
-            await self.client0.query(
-                'select difference({}) from "series-001 integer"'.format(now)),
-            {'series-001 integer': [[now, -12]]})
-
-        now = int(time.time())
-        self.assertEqual(
-            await self.client0.query(
-                'select difference({}) from "series-001 integer"'.format(now)),
-            {'series-001 integer': [[now, -12]]})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select * from /series-001.*/ '
-                'merge as "median_low" using median_low({})'
-                .format(now)),
-            {'median_low': [[now, -3.5]]})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select * from /series-001.*/ '
-                'merge as "median_high" using median_high({})'
-                .format(now)),
-            {'median_high': [[now, -3.0]]})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select * from /series.*/ '
-                'merge as "max" using max(1s)'),
-            {'max': [
-                [1471254705, 5.0],
-                [1471254707, -2.5],
-                [1471254708, -1.0],
-                [1471254710, -7.0]
-            ]})
-
-        # Test all aggregation methods
-
-        self.assertEqual(
-            await self.client0.query('select sum(1h) from "aggr"'),
-            {'aggr': [
-                [1447250400, 2663], [1447254000, 5409], [1447257600, 1602]]})
-
-        self.assertEqual(
-            await self.client0.query('select count(1h) from "aggr"'),
-            {'aggr': [[1447250400, 5], [1447254000, 12], [1447257600, 3]]})
-
-        self.assertEqual(
-            await self.client0.query('select mean(1h) from "aggr"'),
-            {'aggr': [
-                [1447250400, 532.6],
-                [1447254000, 450.75],
-                [1447257600, 534.0]]})
-
-        self.assertEqual(
-            await self.client0.query('select median(1h) from "aggr"'),
-            {'aggr': [
-                [1447250400, 532.0],
-                [1447254000, 530.5],
-                [1447257600, 533.0]]})
-
-        self.assertEqual(
-            await self.client0.query('select median_low(1h) from "aggr"'),
-            {'aggr': [
-                [1447250400, 532], [1447254000, 530], [1447257600, 533]]})
-
-        self.assertEqual(
-            await self.client0.query('select median_high(1h) from "aggr"'),
-            {'aggr': [
-                [1447250400, 532], [1447254000, 531], [1447257600, 533]]})
-
-        self.assertEqual(
-            await self.client0.query('select min(1h) from "aggr"'),
-            {'aggr': [[1447250400, 531], [1447254000, 54], [1447257600, 532]]})
-
-        self.assertEqual(
-            await self.client0.query('select max(1h) from "aggr"'),
-            {'aggr': [
-                [1447250400, 535], [1447254000, 538], [1447257600, 537]]})
-
-        self.assertAlmostEqual(
-            await self.client0.query('select variance(1h) from "aggr"'),
-            {'aggr': [
-                [1447250400, 3.3],
-                [1447254000, 34396.931818181816],
-                [1447257600, 7.0]]})
-
-        self.assertAlmostEqual(
-            await self.client0.query('select pvariance(1h) from "aggr"'),
-            {'aggr': [
-                [1447250400, 2.6399999999999997],
-                [1447254000, 31530.520833333332],
-                [1447257600, 4.666666666666667]]})
-
-        self.assertEqual(
-            await self.client0.query('select * from ({}) - ("a", "b")'.format(
-                ','.join(['"aggr"'] * 600)
-            )),
-            {'aggr': DATA['aggr']}
-        )
-
-        self.assertEqual(
-            await self.client0.query('select difference(1h) from "aggr"'),
-            {'aggr': [[1447250400, 1], [1447254000, -3], [1447257600, 5]]})
-
-        self.assertAlmostEqual(
-            await self.client0.query('select derivative(1, 1h) from "aggr"'),
-            {'aggr': [
-                [1447250400, 0.0002777777777777778],
-                [1447254000, -0.0008333333333333333],
-                [1447257600, 0.001388888888888889]]})
-
-        self.assertEqual(
-            await self.client0.query('select filter(>534) from "aggr"'),
-            {'aggr': [
-                [1447249633, 535],
-                [1447250549, 537],
-                [1447252349, 537],
-                [1447253549, 538],
-                [1447254748, 537]]})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select filter(/l.*/) from * where type == string'),
-            {'log': [p for p in DATA['log'] if re.match('l.*', p[1])]})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select filter(==/l.*/) from * where type == string'),
-            {'log': [p for p in DATA['log'] if re.match('l.*', p[1])]})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select filter(!=/l.*/) from * where type == string'),
-            {'log': [p for p in DATA['log'] if not re.match('l.*', p[1])]})
-
-        self.assertEqual(
-            await self.client0.query('select limit(300, mean) from "aggr"'),
-            {'aggr': DATA['aggr']})
-
-        self.assertEqual(
-            await self.client0.query('select limit(1, sum)  from "aggr"'),
-            {'aggr': [[1447254748, 9674]]})
-
-        self.assertEqual(
-            await self.client0.query('select limit(3, mean) from "aggr"'),
-            {'aggr': [
-                [1447250938, 532.8571428571429],
-                [1447252844, 367.6666666666667],
-                [1447254750, 534.0]]})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select limit(2, max)  from "series-001 float"'),
-            {'series-001 float': [[1471254707, 1.5], [1471254713, -7.3]]})
-
-        self.assertAlmostEqual(
-            await self.client0.query(
-                'select variance(1471254712) from "variance"'),
-            {'variance': [[1471254712, 1.3720238095238095]]})
-
-        self.assertAlmostEqual(
-            await self.client0.query(
-                'select pvariance(1471254715) from "pvariance"'),
-            {'pvariance': [[1471254715, 1.25]]})
-
-        self.assertEqual(
-            await self.client0.query('select * from "one"'),
-            {'one': [[1471254710, 1]]})
-
-        self.assertEqual(
-            await self.client0.query('select * from "log"'),
-            {'log': DATA['log']})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select filter(~"log") => filter(!~"one") from "log"'),
-            {'log': [DATA['log'][1]]})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select filter(!=nan) from "special"'),
-            {'special': [p for p in DATA['special'] if not math.isnan(p[1])]})
-
-        self.assertAlmostEqual(
-            await self.client0.query(
-                'select filter(==nan) from "special"'),
-            {'special': [p for p in DATA['special'] if math.isnan(p[1])]})
-
-        self.assertAlmostEqual(
-            await self.client0.query(
-                'select filter(>=nan) from "special"'),
-            {'special': [p for p in DATA['special'] if math.isnan(p[1])]})
-
-        self.assertAlmostEqual(
-            await self.client0.query(
-                'select filter(<=nan) from "special"'),
-            {'special': [p for p in DATA['special'] if math.isnan(p[1])]})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select filter(==inf) from "special"'),
-            {'special': [p for p in DATA['special'] if p[1] == math.inf]})
-
-        self.assertAlmostEqual(
-            await self.client0.query(
-                'select filter(<inf) from "special"'),
-            {'special': [p for p in DATA['special'] if p[1] < math.inf]})
-
-        self.assertAlmostEqual(
-            await self.client0.query(
-                'select filter(>inf) from "special"'),
-            {'special': []})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select filter(==-inf) from "special"'),
-            {'special': [p for p in DATA['special'] if p[1] == -math.inf]})
-
-        self.assertAlmostEqual(
-            await self.client0.query(
-                'select filter(>-inf) from "special"'),
-            {'special': [p for p in DATA['special'] if p[1] > -math.inf]})
-
-        self.assertAlmostEqual(
-            await self.client0.query(
-                'select filter(<-inf) from "special"'),
-            {'special': []})
-
-        self.assertEqual(
-            await self.client0.query(
-                'select filter(~"one") prefix "1-", '
-                'filter(~"two") prefix "2-" from "log"'),
-            {
-                '1-log': [
-                    [1471254710, 'log line one'],
-                    [1471254716, 'and yet one more']],
-                '2-log': [[1471254712, 'log line two']]
-            })
-
-        self.assertEqual(
-            await self.client0.query('select difference() from "one"'),
-            {'one': []})
-
-        with self.assertRaisesRegex(
-                QueryError,
-                'Regular expressions can only be used with.*'):
-            await self.client0.query('select filter(~//) from "log"')
-
-        with self.assertRaisesRegex(
-                QueryError,
-                'Cannot use a string filter on number type.'):
-            await self.client0.query('select filter(//) from "aggr"')
-
-        with self.assertRaisesRegex(
-                QueryError,
-                r'Cannot use mean\(\) on string type\.'):
-            await self.client0.query('select mean(1w) from "log"')
-
-        with self.assertRaisesRegex(
-                QueryError,
-                r'Group by time must be an integer value larger than zero\.'):
-            await self.client0.query('select mean(0) from "aggr"')
-
-        with self.assertRaisesRegex(
-                QueryError,
-                r'Limit must be an integer value larger than zero\.'):
-            await self.client0.query('select limit(6 - 6, mean) from "aggr"')
-
-        with self.assertRaisesRegex(
-                QueryError,
-                r'Cannot use a string filter on number type\.'):
-            await self.client0.query(
-                'select * from "aggr" '
-                'merge as "t" using filter("0")')
-
-        with self.assertRaisesRegex(
-                QueryError,
-                r'Cannot use difference\(\) on string type\.'):
-            await self.client0.query('select difference() from "log"')
-
-        with self.assertRaisesRegex(
-                QueryError,
-                r'Cannot use derivative\(\) on string type\.'):
-            await self.client0.query('select derivative(6, 3) from "log"')
-
-        with self.assertRaisesRegex(
-                QueryError,
-                r'Cannot use derivative\(\) on string type\.'):
-            await self.client0.query('select derivative() from "log"')
-
-        with self.assertRaisesRegex(
-                QueryError,
-                r'Overflow detected while using sum\(\)\.'):
-            await self.client0.query('select sum(now) from "huge"')
-
-        with self.assertRaisesRegex(
-                QueryError,
-                'Max depth reached in \'where\' expression!'):
-            await self.client0.query(
-                'select * from "aggr" where ((((((length > 1))))))')
-
-        with self.assertRaisesRegex(
-                QueryError,
-                'Cannot compile regular expression.*'):
-            await self.client0.query(
-                'select * from /(bla/')
-
-        with self.assertRaisesRegex(
-                QueryError,
-                'Memory allocation error or maximum recursion depth reached.'):
-            await self.client0.query(
-                'select * from {}"aggr"{}'.format(
-                    '(' * 501,
-                    ')' * 501))
-
-        with self.assertRaisesRegex(
-                    QueryError,
-                    'Query too long.'):
-            await self.client0.query('select * from "{}"'.format('a' * 65535))
-
-        with self.assertRaisesRegex(
-                    QueryError,
-                    'Error while merging points. Make sure the destination '
-                    'series name is valid.'):
-            await self.client0.query(
-                'select * from "aggr", "huge" merge as ""')
-
-        self.assertEqual(
-            await self.client0.query(
-                'select min(2h) prefix "min-", max(1h) prefix "max-" '
-                'from /.*/ where type == integer and name != "filter" '
-                'and name != "one" and name != "series-002 integer" '
-                'merge as "int_min_max" using median_low(1) => difference()'),
-            {
-                'max-int_min_max': [
-                    [1447254000, 3], [1447257600, -1], [1471255200, -532]],
-                'min-int_min_max': [
-                    [1447257600, -477], [1471255200, -54]]})
-
-        await self.client0.query('select derivative() from "equal ts"')
-
-        self.assertEqual(
-            await self.client0.query('select first() from *'),
-            {k: [v[0]] for k, v in DATA.items()})
-
-        self.assertEqual(
-            await self.client0.query('select last() from *'),
-            {k: [v[-1]] for k, v in DATA.items()})
-
-        self.assertEqual(
-            await self.client0.query('select count() from *'),
-            {k: [[v[-1][0], len(v)]] for k, v in DATA.items()})
-
-        self.assertEqual(
-            await self.client0.query('select mean() from "aggr"'),
-            {'aggr': [[
-                DATA['aggr'][-1][0],
-                sum([x[1] for x in DATA['aggr']]) / len(DATA['aggr'])]]})
-
-        self.assertAlmostEqual(
-            await self.client0.query('select stddev() from "aggr"'),
-            {'aggr': [[
-                DATA['aggr'][-1][0],
-                147.07108914792838]]})
-
-        self.assertAlmostEqual(
-            await self.client0.query('select stddev(1h) from "aggr"'),
-            {"aggr": [
-                [1447250400, 1.8165902124584952],
-                [1447254000, 185.46409846162092],
-                [1447257600, 2.6457513110645907]]})
-
-        # test prefix, suffex
-        result = await self.client0.query(
-                'select sum(1d) prefix "sum-" suffix "-sum", '
-                'min(1d) prefix "minimum-", '
-                'max(1d) suffix "-maximum" from "aggr"')
-
-        self.assertIn('sum-aggr-sum', result)
-        self.assertIn('minimum-aggr', result)
-        self.assertIn('aggr-maximum', result)
-
-        await self.client0.query('alter database set select_points_limit 10')
-        with self.assertRaisesRegex(
-                QueryError,
-                'Query has reached the maximum number of selected points.*'):
-            await self.client0.query(
-                'select * from /.*/')
-        await self.client0.query(
-            'alter database set select_points_limit 1000000')
+                2484720)})
 
         self.client0.close()
 
 
 if __name__ == '__main__':
     parse_args()
-    run_test(TestSelect())
+    run_test(TestAutoDuration())
index b3939a82527e75a5a7ddf7f44b0bb485912ed1e1..6a2ecc0dabc6c421a836d371e71b4ff585158157 100644 (file)
@@ -15,7 +15,7 @@
 #define POINTS_MAX_QSORT 250000
 #define RAW_VALUES_THRESHOLD 7
 #define DICT_SZ 0x3fff
-#define TOLERANCE_INTERVAL_DETECT 8
+#define TOLERANCE_INTERVAL_DETECT 10
 
 static unsigned char * POINTS_zip_raw(
         siridb_points_t * points,