Completed
Push — master ( 5cbcf8...d3d059 )
by Matthias
01:08
created

TestCollectdGraphiteEncoder.test_encode_simple()   A

Complexity

Conditions 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
dl 0
loc 4
rs 10
c 2
b 0
f 0
1
import unittest
2
from kafka_influxdb.encoder import collectd_graphite_encoder
3
4
5
class TestCollectdGraphiteEncoder(unittest.TestCase):
6
    def setUp(self):
7
        self.encoder = collectd_graphite_encoder.Encoder()
8
9
    def test_encode_simple(self):
10
        msg = b'myhost.load.load.shortterm 0.05 1436357630'
11
        expected = ['load_load_shortterm,host=myhost value=0.05 1436357630']
12
        self.assertEqual(self.encoder.encode(msg), expected)
13
14
    def test_encode_with_prefix(self):
15
        msg = b'mydatacenter.myhost.load.load.shortterm 0.45 1436357630'
16
17
        # The official documentation states that tags should be sorted for performance reasons.
18
        # As of now they will be sorted on the InfluxDB side anyway (which is probably faster).
19
        # (See https://influxdb.com/docs/v0.9/write_protocols/line.html#key for more info)
20
        # So we don't sort the tags to make the encoder faster.
21
        # As a consequence they can appear in any order. Test for all combinations.
22
        expected1 = ['load_load_shortterm,datacenter=mydatacenter,host=myhost value=0.45 1436357630']
23
        expected2 = ['load_load_shortterm,host=myhost,datacenter=mydatacenter value=0.45 1436357630']
24
25
        if self.encoder.encode(msg, prefix="mydatacenter.", prefix_tag="datacenter") == expected1:
26
            return
27
        if self.encoder.encode(msg, prefix="mydatacenter.", prefix_tag="datacenter") == expected2:
28
            return
29
        raise self.failureException()
30
31
    def test_encode_multiple_values(self):
32
        msg = b'26f2fc918f50.load.load.shortterm 0.05 1436357630\n' \
33
              b'26f2fc918f50.load.load.midterm 0.06 1436357631\n' \
34
              b'26f2fc918f50.load.load.longterm 0.07 1436357632'
35
        expected = [
36
            'load_load_shortterm,host=26f2fc918f50 value=0.05 1436357630',
37
            'load_load_midterm,host=26f2fc918f50 value=0.06 1436357631',
38
            'load_load_longterm,host=26f2fc918f50 value=0.07 1436357632',
39
        ]
40
        self.assertEqual(self.encoder.encode(msg), expected)
41
42
    def test_invalid_messages(self):
43
        invalid_messages = [b'', b'\n', b'bla', b'foo\nbar\nbaz']
44
        for msg in invalid_messages:
45
            self.assertEqual(self.encoder.encode(msg, prefix="mydatacenter.", prefix_tag="datacenter"), [])
46