Passed
Pull Request — master (#42)
by Jose
02:25
created

unit.test_rrd.TestRRD.test_non_existent_rrd()   A

Complexity

Conditions 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 1
nop 1
1
"""Test of.stats app."""
2
import os
3
import unittest
4
from tempfile import mkstemp
5
from unittest.mock import patch  # noqa (isort conflict)
6
7
from napps.kytos.of_stats.settings import STATS_INTERVAL
8
from napps.kytos.of_stats.stats import RRD
9
10
11
class TestRRD(unittest.TestCase):
12
    """Test RRD interpolation."""
13
14
    @patch.object(RRD, 'get_rrd')
15
    def test_2_points_out_of_3(self, get_rrd_method):
16
        """Without the middle point, interpolate first and last points.
17
18
        Suppose STATS_INTERVAL is 10:
19
        - At 1234567800 (first),  rx = tx = 10;
20
        - At 1234567810 (second), rx = tx = unknown;
21
        - At 1234567820 (third),  rx = tx = 30.
22
23
        Test if the average is 1 at 1234567810 (second).
24
        """
25
        # Mock will return a temporary file for rrd file.
26
        file, rrd_file = mkstemp('.rrd')
27
        os.close(file)
28
        get_rrd_method.return_value = rrd_file
29
30
        start = 1234567800 - STATS_INTERVAL  # can't update using start time
31
        rrd = RRD('test', ('rx', 'tx'))
32
        rrd.create_rrd(rrd_file, tstamp=start)
33
34
        def update_rrd(multiplier):
35
            """Update rrd."""
36
            rx_value = tx_value = multiplier * STATS_INTERVAL
37
            tstamp = start + rx_value
38
            # any value for index is OK
39
            rrd.update([None], tstamp, rx=rx_value, tx=tx_value)
40
41
        update_rrd(1)
42
        update_rrd(3)
43
44
        second = start + 2 * STATS_INTERVAL
45
        # Interval between x and y excludes y
46
        tstamps, _, rows = rrd.fetch([None], start=second, end=second)
47
48
        os.unlink(rrd_file)
49
50
        self.assertEqual(second, list(tstamps)[0])
51
        self.assertEqual((1.0, 1.0), rows[0])
52
53
    def test_non_existent_rrd(self):
54
        """Test fetch_latest with non existent rrd."""
55
        # obj = path_mock.return_value.exists.return_value = False
56
        # was not being used
57
        rrd = RRD('app_folder', ['data_source'])
58
        row = rrd.fetch_latest('index')
59
        self.assertEqual(row, {})
60