File: test_opentelemetry.py

package info (click to toggle)
python-clickhouse-driver 0.2.5-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,516 kB
  • sloc: python: 10,950; pascal: 42; makefile: 31; sh: 3
file content (89 lines) | stat: -rw-r--r-- 3,447 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from tests.testcase import BaseTestCase
from tests.util import capture_logging


class OpenTelemetryTestCase(BaseTestCase):
    required_server_version = (20, 11, 2)

    def test_server_logs(self):
        tracestate = 'tracestate'
        traceparent = '00-1af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01'

        settings = {
            'opentelemetry_tracestate': tracestate,
            'opentelemetry_traceparent': traceparent

        }
        with self.created_client(settings=settings) as client:
            with capture_logging('clickhouse_driver.log', 'INFO') as buffer:
                settings = {'send_logs_level': 'trace'}
                query = 'SELECT 1'
                client.execute(query, settings=settings)
                value = buffer.getvalue()
                self.assertIn('OpenTelemetry', value)

                # ClickHouse 22.2+ use big-endian:
                # https://github.com/ClickHouse/ClickHouse/pull/33723
                if self.server_version >= (22, 2):
                    tp = '8448eb211c80319c1af7651916cd43dd'
                else:
                    tp = '1af7651916cd43dd8448eb211c80319c'
                self.assertIn(tp, value)

    def test_no_tracestate(self):
        traceparent = '00-1af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01'

        settings = {
            'opentelemetry_traceparent': traceparent

        }
        with self.created_client(settings=settings) as client:
            with capture_logging('clickhouse_driver.log', 'INFO') as buffer:
                settings = {'send_logs_level': 'trace'}
                query = 'SELECT 1'
                client.execute(query, settings=settings)
                value = buffer.getvalue()
                self.assertIn('OpenTelemetry', value)
                # ClickHouse 22.2+ use big-endian:
                # https://github.com/ClickHouse/ClickHouse/pull/33723
                if self.server_version >= (22, 2):
                    tp = '8448eb211c80319c1af7651916cd43dd'
                else:
                    tp = '1af7651916cd43dd8448eb211c80319c'
                self.assertIn(tp, value)

    def test_bad_traceparent(self):
        settings = {'opentelemetry_traceparent': 'bad'}
        with self.created_client(settings=settings) as client:
            with self.assertRaises(ValueError) as e:
                client.execute('SELECT 1')

            self.assertEqual(
                str(e.exception),
                'unexpected length 3, expected 55'
            )

        traceparent = '00-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-yyyyyyyyyyyyyyyy-01'
        settings = {'opentelemetry_traceparent': traceparent}
        with self.created_client(settings=settings) as client:
            with self.assertRaises(ValueError) as e:
                client.execute('SELECT 1')

            self.assertEqual(
                str(e.exception),
                'Malformed traceparant header: {}'.format(traceparent)
            )

    def test_bad_traceparent_version(self):
        settings = {
            'opentelemetry_traceparent':
                '01-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-bbbbbbbbbbbbbbbb-01'
        }
        with self.created_client(settings=settings) as client:
            with self.assertRaises(ValueError) as e:
                client.execute('SELECT 1')

            self.assertEqual(
                str(e.exception),
                'unexpected version 01, expected 00'
            )