paijo77 commited on
Commit
5a4ba84
·
verified ·
1 Parent(s): d95e028

update tests/unit/test_parsers.py

Browse files
Files changed (1) hide show
  1. tests/unit/test_parsers.py +73 -0
tests/unit/test_parsers.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pytest
2
+ from app.grabber.parsers import VMessParser, VLESSParser, TrojanParser, SSParser
3
+ from app.models.proxy import Proxy
4
+
5
+
6
+ class TestVMessParser:
7
+ def test_parse_valid_vmess(self):
8
+ vmess_json = '{"add": "127.0.0.1", "port": 443, "id": "test-uuid", "aid": 0}'
9
+ import base64
10
+
11
+ encoded = base64.b64encode(vmess_json.encode()).decode()
12
+ url = f"vmess://{encoded}"
13
+
14
+ proxy = VMessParser.parse(url)
15
+
16
+ assert proxy is not None
17
+ assert proxy.ip == "127.0.0.1"
18
+ assert proxy.port == 443
19
+ assert proxy.protocol == "vmess"
20
+
21
+ def test_parse_invalid_vmess(self):
22
+ url = "vmess://invalid-base64!@#"
23
+
24
+ with pytest.raises(ValueError):
25
+ VMessParser.parse(url)
26
+
27
+
28
+ class TestVLESSParser:
29
+ def test_parse_valid_vless(self):
30
+ url = "vless://uuid-here@192.168.1.1:443?type=tcp&encryption=none"
31
+
32
+ proxy = VLESSParser.parse(url)
33
+
34
+ assert proxy is not None
35
+ assert proxy.ip == "192.168.1.1"
36
+ assert proxy.port == 443
37
+ assert proxy.protocol == "vless"
38
+
39
+ def test_parse_vless_with_domain(self):
40
+ url = "vless://uuid@example.com:443?type=tcp"
41
+
42
+ proxy = VLESSParser.parse(url)
43
+
44
+ assert proxy is not None
45
+ assert "example.com" in proxy.ip or proxy.ip != ""
46
+
47
+
48
+ class TestTrojanParser:
49
+ def test_parse_valid_trojan(self):
50
+ url = "trojan://password123@10.0.0.1:443?sni=example.com"
51
+
52
+ proxy = TrojanParser.parse(url)
53
+
54
+ assert proxy is not None
55
+ assert proxy.ip == "10.0.0.1"
56
+ assert proxy.port == 443
57
+ assert proxy.protocol == "trojan"
58
+
59
+
60
+ class TestSSParser:
61
+ def test_parse_valid_ss(self):
62
+ method_pass = "aes-256-gcm:password123"
63
+ import base64
64
+
65
+ encoded = base64.b64encode(method_pass.encode()).decode()
66
+ url = f"ss://{encoded}@192.168.1.1:8388"
67
+
68
+ proxy = SSParser.parse(url)
69
+
70
+ assert proxy is not None
71
+ assert proxy.ip == "192.168.1.1"
72
+ assert proxy.port == 8388
73
+ assert proxy.protocol == "shadowsocks"