]> www.average.org Git - loctrkd.git/blob - test/test_fuzz_bs.py
test: add fuzzer for beesure protocol
[loctrkd.git] / test / test_fuzz_bs.py
1 """ Send junk to the collector """
2
3 import unittest
4 from .common import send_and_drain, TestWithServers, Fuzz
5
6 REPEAT: int = 1000000
7
8
9 class FuzzMsgs(Fuzz):
10     def test_msgs(self) -> None:
11         imeis = list(
12             self.rnd.randint(1000000000, 9999999999) for _ in range(3)
13         )
14         for _ in range(REPEAT):
15             base_size = self.rnd.randint(0, 5000)
16             size = base_size + (
17                 (self.rnd.randint(-5, 5) // 5) * self.rnd.randint(1, 20)
18             )
19             if size < 0:
20                 size = 0
21             imei = f"{self.rnd.choice(imeis):d}".encode("ascii")
22             commapos = self.rnd.randint(0, 10)
23             if commapos > 0 and commapos < base_size:
24                 payload = (
25                     self.rnd.randbytes(commapos - 1)
26                     + b","
27                     + self.rnd.randbytes(base_size - commapos)
28                 )
29             else:
30                 payload = self.rnd.randbytes(base_size)
31             # print(imei, base_size, size)
32             # "\[(\w\w)\*(\d{10})\*([0-9a-fA-F]{4})\*"
33             buf = (
34                 b"[TS*"
35                 + imei
36                 + b"*"
37                 + f"{size:04x}".encode("ascii")
38                 + b"*"
39                 + self.rnd.randbytes(base_size)
40                 + b"]"
41             )
42             # print(buf[:64], "len:", len(buf))
43             send_and_drain(self.sock, buf)
44
45
46 if __name__ == "__main__":
47     unittest.main()