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

TestCollectdGraphiteEncoder   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Importance

Changes 5
Bugs 0 Features 0
Metric Value
dl 0
loc 41
rs 10
c 5
b 0
f 0
wmc 8

5 Methods

Rating   Name   Duplication   Size   Complexity  
A test_encode_multiple_values() 0 10 1
A test_encode_with_prefix() 0 16 3
A test_encode_simple() 0 4 1
A test_invalid_messages() 0 4 2
A setUp() 0 2 1
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