comparison weather_server/logfile_test.py @ 0:efe7a1eff167

Create initial logger for weather server.
author Paul Fisher <paul@pfish.zone>
date Sat, 28 Sep 2019 23:17:21 -0400
parents
children beb42c835c52
comparison
equal deleted inserted replaced
-1:000000000000 0:efe7a1eff167
1 import contextlib
2 import datetime
3 import pathlib
4 import tempfile
5 import unittest
6
7 import bson
8 import pytz
9
10 from . import common
11 from . import logfile
12 from . import types
13
14
15 def ts(n):
16 return datetime.datetime.utcfromtimestamp(n).replace(tzinfo=pytz.UTC)
17
18
19 class LoggerTest(unittest.TestCase):
20
21 maxDiff = None
22
23 def setUp(self):
24 super().setUp()
25 self.temp_dir = tempfile.TemporaryDirectory()
26 self.log_path = pathlib.Path(self.temp_dir.name) / 'test.bson'
27
28 def tearDown(self):
29 self.temp_dir.cleanup()
30 super().tearDown()
31
32 def test_empty(self):
33 with contextlib.closing(logfile.Logger(str(self.log_path))) as logger:
34 self.assertEqual(logger.data, ())
35
36 def test_loading(self):
37 with self.log_path.open('wb') as outfile:
38 outfile.write(common.bson_encode(dict(
39 sample_time=ts(123),
40 temp_c=420,
41 rh_pct=69,
42 ingest_time=ts(125),
43 )))
44 outfile.write(b'garbage to ignore')
45 with contextlib.closing(logfile.Logger(str(self.log_path))) as logger:
46 self.assertEqual(
47 logger.data,
48 (types.Reading(ts(123), 420, 69, ts(125)),))
49
50 def test_writing(self):
51 with self.log_path.open('wb') as outfile:
52 outfile.write(common.bson_encode(dict(
53 sample_time=ts(123),
54 temp_c=420,
55 rh_pct=69,
56 ingest_time=ts(125),
57 )))
58 with contextlib.closing(logfile.Logger(str(self.log_path))) as logger:
59 logger.write_rows([
60 types.Reading(ts(100), 999, 666, ts(101)),
61 types.Reading(ts(125), 333, 777, ts(200)),
62 ])
63 self.assertEqual(
64 logger.data,
65 (
66 types.Reading(ts(123), 420, 69, ts(125)),
67 types.Reading(ts(125), 333, 777, ts(200)),
68 )
69 )
70
71 self.assertEqual(self.read_bsons(), [
72 dict(
73 sample_time=ts(123),
74 temp_c=420,
75 rh_pct=69,
76 ingest_time=ts(125),
77 ),
78 dict(
79 sample_time=ts(125),
80 temp_c=333,
81 rh_pct=777,
82 ingest_time=ts(200),
83 ),
84 ])
85
86 def test_outside_writes(self):
87 with contextlib.closing(logfile.Logger(str(self.log_path))) as logger:
88 logger.write_rows([
89 types.Reading(ts(100), 999, 666, ts(101)),
90 types.Reading(ts(125), 333, 777, ts(200)),
91 ])
92 with self.log_path.open('ab') as outfile:
93 outfile.write(common.bson_encode(dict(
94 sample_time=ts(1024),
95 temp_c=256,
96 rh_pct=128,
97 ingest_time=ts(4096),
98 )))
99 outfile.flush()
100 self.assertEqual(logger.data, (
101 types.Reading(ts(100), 999, 666, ts(101)),
102 types.Reading(ts(125), 333, 777, ts(200)),
103 types.Reading(ts(1024), 256, 128, ts(4096)),
104 ))
105
106 def read_bsons(self):
107 with self.log_path.open('rb') as infile:
108 return bson.decode_all(
109 infile.read(), common.BSON_OPTIONS)
110
111
112 if __name__ == '__main__':
113 unittest.main()