]> www.average.org Git - loctrkd.git/blob - test/test_storage.py
test: use IPv4 because github actions
[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, Row
6 from time import sleep
7 import unittest
8 from .common import send_and_drain, TestWithServers
9 from gps303.gps303proto import *
10
11
12 class Storage(TestWithServers):
13     def setUp(self, *args: str) -> None:
14         super().setUp("collector", "storage", "lookaside", "termconfig")
15         for fam, typ, pro, cnm, skadr in getaddrinfo(
16             "127.0.0.1",
17             self.conf.getint("collector", "port"),
18             family=AF_INET,
19             type=SOCK_STREAM,
20         ):
21             break  # Just take the first element
22         self.sock = socket(AF_INET, SOCK_STREAM)
23         self.sock.connect(skadr)
24
25     def tearDown(self) -> None:
26         sleep(1)  # give collector some time
27         super().tearDown()
28
29     def test_storage(self) -> None:
30         for buf in (
31             LOGIN.In(imei="9999123456780000", ver=9).packed,
32             STATUS.In().packed,
33             HIBERNATION.In().packed,
34         ):
35             send_and_drain(self.sock, b"xx" + buf + b"\r\n")
36         self.sock.close()
37         sleep(1)
38         got = set()
39         with connect(self.conf.get("storage", "dbfn")) as db:
40             db.row_factory = Row
41             for is_incoming, packet in db.execute(
42                 "select is_incoming, packet from events"
43             ):
44                 msg = parse_message(packet, is_incoming=is_incoming)
45                 # print(msg)
46                 got.add(type(msg))
47         self.assertEqual(
48             got, {LOGIN.Out, HIBERNATION.In, LOGIN.In, STATUS.Out, STATUS.In}
49         )
50
51
52 if __name__ == "__main__":
53     unittest.main()