Forking what is left of ZeroNet and hopefully adding an AT Proto Frontend/Proxy
1import socket
2import struct
3import os
4
5import pytest
6from util import helper
7from Config import config
8
9
10@pytest.mark.usefixtures("resetSettings")
11class TestHelper:
12 def testShellquote(self):
13 assert helper.shellquote("hel'lo") == "\"hel'lo\"" # Allow '
14 assert helper.shellquote('hel"lo') == '"hello"' # Remove "
15 assert helper.shellquote("hel'lo", 'hel"lo') == ('"hel\'lo"', '"hello"')
16
17 def testPackAddress(self):
18 for port in [1, 1000, 65535]:
19 for ip in ["1.1.1.1", "127.0.0.1", "0.0.0.0", "255.255.255.255", "192.168.1.1"]:
20 assert len(helper.packAddress(ip, port)) == 6
21 assert helper.unpackAddress(helper.packAddress(ip, port)) == (ip, port)
22
23 for ip in ["1:2:3:4:5:6:7:8", "::1", "2001:19f0:6c01:e76:5400:1ff:fed6:3eca", "2001:4860:4860::8888"]:
24 assert len(helper.packAddress(ip, port)) == 18
25 assert helper.unpackAddress(helper.packAddress(ip, port)) == (ip, port)
26
27 assert len(helper.packOnionAddress("boot3rdez4rzn36x.onion", port)) == 12
28 assert helper.unpackOnionAddress(helper.packOnionAddress("boot3rdez4rzn36x.onion", port)) == ("boot3rdez4rzn36x.onion", port)
29
30 with pytest.raises(struct.error):
31 helper.packAddress("1.1.1.1", 100000)
32
33 with pytest.raises(socket.error):
34 helper.packAddress("999.1.1.1", 1)
35
36 with pytest.raises(Exception):
37 helper.unpackAddress("X")
38
39 def testGetDirname(self):
40 assert helper.getDirname("data/users/content.json") == "data/users/"
41 assert helper.getDirname("data/users") == "data/"
42 assert helper.getDirname("") == ""
43 assert helper.getDirname("content.json") == ""
44 assert helper.getDirname("data/users/") == "data/users/"
45 assert helper.getDirname("/data/users/content.json") == "data/users/"
46
47 def testGetFilename(self):
48 assert helper.getFilename("data/users/content.json") == "content.json"
49 assert helper.getFilename("data/users") == "users"
50 assert helper.getFilename("") == ""
51 assert helper.getFilename("content.json") == "content.json"
52 assert helper.getFilename("data/users/") == ""
53 assert helper.getFilename("/data/users/content.json") == "content.json"
54
55 def testIsIp(self):
56 assert helper.isIp("1.2.3.4")
57 assert helper.isIp("255.255.255.255")
58 assert not helper.isIp("any.host")
59 assert not helper.isIp("1.2.3.4.com")
60 assert not helper.isIp("1.2.3.4.any.host")
61
62 def testIsPrivateIp(self):
63 assert helper.isPrivateIp("192.168.1.1")
64 assert not helper.isPrivateIp("1.1.1.1")
65 assert helper.isPrivateIp("fe80::44f0:3d0:4e6:637c")
66 assert not helper.isPrivateIp("fca5:95d6:bfde:d902:8951:276e:1111:a22c") # cjdns
67
68 def testOpenLocked(self):
69 locked_f = helper.openLocked(config.data_dir + "/locked.file")
70 assert locked_f
71 with pytest.raises(BlockingIOError):
72 locked_f_again = helper.openLocked(config.data_dir + "/locked.file")
73 locked_f_different = helper.openLocked(config.data_dir + "/locked_different.file")
74
75 locked_f.close()
76 locked_f_different.close()
77
78 os.unlink(locked_f.name)
79 os.unlink(locked_f_different.name)