]> www.average.org Git - loctrkd.git/blob - test/test_storage.py
4737f52bdddf94f403a91298513c8e2a9c0fd24d
[loctrkd.git] / test / test_storage.py
1 """ Send junk to the collector """
2
3 from random import Random
4 from socket import getaddrinfo, socket, AF_INET, SOCK_STREAM
5 from sqlite3 import connect
6 from time import sleep
7 from typing import Any
8 import unittest
9 from .common import send_and_drain, TestWithServers
10 from loctrkd.zx303proto import *
11 from loctrkd.ocid_dload import SCHEMA
12
13
14 class Storage(TestWithServers):
15     def setUp(self, *args: str, **kwargs: Any) -> None:
16         super().setUp(
17             "collector", "storage", "lookaside", "termconfig", verbose=True
18         )
19         with connect(self.conf.get("opencellid", "dbfn")) as ldb:
20             ldb.execute(SCHEMA)
21             ldb.executemany(
22                 """insert into cells
23                     (radio, mcc, net, area, cell, unit, lon, lat, range,
24                      samples, changeable, created, updated, averageSignal)
25                     values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)""",
26                 (
27                     (
28                         "GSM",
29                         262,
30                         3,
31                         24420,
32                         16594,
33                         -1,
34                         12.681939,
35                         53.52603,
36                         22733,
37                         1999,
38                         1,
39                         1556575612,
40                         1653387028,
41                         0,
42                     ),
43                     (
44                         "GSM",
45                         262,
46                         3,
47                         24420,
48                         36243,
49                         -1,
50                         12.66442,
51                         53.527534,
52                         21679,
53                         1980,
54                         1,
55                         1540870608,
56                         1653387028,
57                         0,
58                     ),
59                     (
60                         "GSM",
61                         262,
62                         3,
63                         24420,
64                         17012,
65                         -1,
66                         12.741093,
67                         53.529854,
68                         23463,
69                         874,
70                         1,
71                         1563404603,
72                         1653268184,
73                         0,
74                     ),
75                     (
76                         "GSM",
77                         262,
78                         3,
79                         24420,
80                         26741,
81                         -1,
82                         12.658822,
83                         53.530832,
84                         18809,
85                         1687,
86                         1,
87                         1539939964,
88                         1653265176,
89                         0,
90                     ),
91                     (
92                         "GSM",
93                         262,
94                         2,
95                         24420,
96                         36243,
97                         -1,
98                         12.61111,
99                         53.536626,
100                         1000,
101                         4,
102                         1,
103                         1623218739,
104                         1652696033,
105                         0,
106                     ),
107                     (
108                         "GSM",
109                         262,
110                         1,
111                         24420,
112                         36243,
113                         -1,
114                         12.611135,
115                         53.536636,
116                         1000,
117                         3,
118                         1,
119                         1568587946,
120                         1628827437,
121                         0,
122                     ),
123                     (
124                         "GSM",
125                         262,
126                         2,
127                         24420,
128                         17012,
129                         -1,
130                         12.829655,
131                         53.536654,
132                         1000,
133                         2,
134                         1,
135                         1609913384,
136                         1612934718,
137                         0,
138                     ),
139                     (
140                         "GSM",
141                         262,
142                         3,
143                         24000,
144                         35471,
145                         -1,
146                         11.505135,
147                         53.554216,
148                         11174,
149                         829,
150                         1,
151                         1544494558,
152                         1651063300,
153                         0,
154                     ),
155                     (
156                         "GSM",
157                         262,
158                         3,
159                         24420,
160                         37156,
161                         -1,
162                         11.918188,
163                         53.870522,
164                         1000,
165                         1,
166                         1,
167                         1550199983,
168                         1550199983,
169                         0,
170                     ),
171                 ),
172             )
173             ldb.commit()
174         for fam, typ, pro, cnm, skadr in getaddrinfo(
175             "127.0.0.1",
176             self.conf.getint("collector", "port"),
177             family=AF_INET,
178             type=SOCK_STREAM,
179         ):
180             break  # Just take the first element
181         self.sock = socket(AF_INET, SOCK_STREAM)
182         self.sock.connect(skadr)
183
184     def tearDown(self) -> None:
185         sleep(1)  # give collector some time
186         super().tearDown()
187
188     def test_storage(self) -> None:
189         for msg in (
190             LOGIN.In(imei="9999123456780000", ver=9),
191             WIFI_POSITIONING.In(
192                 mnc=3,
193                 mcc=262,
194                 wifi_aps=[
195                     ("02:03:04:05:06:07", -89),
196                     ("92:93:94:95:96:97", -70),
197                 ],
198                 gsm_cells=[
199                     (24420, 27178, -90),
200                     (24420, 36243, -78),
201                     (24420, 17012, -44),
202                 ],
203             ),
204             SETUP.In(),
205             STATUS.In(signal=87),
206             HIBERNATION.In(),
207         ):
208             print("Send:", msg)
209             send_and_drain(self.sock, b"xx" + msg.packed + b"\r\n")
210         sleep(1)
211         self.sock.close()
212         got = set()
213         with connect(self.conf.get("storage", "dbfn")) as db:
214             for is_incoming, packet in db.execute(
215                 "select is_incoming, packet from events"
216             ):
217                 msg = parse_message(packet, is_incoming=is_incoming)
218                 print("Stored:", msg)
219                 got.add(type(msg))
220         self.assertEqual(
221             got,
222             {
223                 LOGIN.Out,
224                 HIBERNATION.In,
225                 LOGIN.In,
226                 SETUP.In,
227                 SETUP.Out,
228                 STATUS.Out,
229                 STATUS.In,
230                 WIFI_POSITIONING.In,
231                 WIFI_POSITIONING.Out,
232             },
233         )
234
235
236 if __name__ == "__main__":
237     unittest.main()