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
|
|
|
|