| import base64 |
| import pytest |
| from app.hunter.extractor import UniversalExtractor |
|
|
|
|
| class TestUniversalExtractor: |
| def test_extract_simple_ip_port(self): |
| content = "Here is a proxy 1.1.1.1:80 and another 192.168.1.1:8080 end" |
| proxies = UniversalExtractor.extract_proxies(content) |
|
|
| assert len(proxies) == 2 |
| assert proxies[0].ip == "1.1.1.1" |
| assert proxies[0].port == 80 |
| assert proxies[1].ip == "192.168.1.1" |
| assert proxies[1].port == 8080 |
|
|
| def test_extract_base64_content(self): |
| |
| content = "MS4xLjEuMTo4MA==" |
| proxies = UniversalExtractor.extract_proxies(content) |
|
|
| assert len(proxies) == 1 |
| assert proxies[0].ip == "1.1.1.1" |
| assert proxies[0].port == 80 |
|
|
| def test_extract_messy_html(self): |
| content = """ |
| <html> |
| <body> |
| <p>List of proxies:</p> |
| <div>10.0.0.1:3128</div> |
| <span>8.8.8.8:80</span> |
| </body> |
| </html> |
| """ |
| proxies = UniversalExtractor.extract_proxies(content) |
|
|
| assert len(proxies) == 2 |
| ips = {p.ip for p in proxies} |
| assert "10.0.0.1" in ips |
| assert "8.8.8.8" in ips |
|
|
| def test_extract_vmess_and_vless(self): |
| |
| |
| |
|
|
| vmess = "vmess://ew0KICAidiI6ICIyIiwNCiAgInBzIjogInRlc3QiLA0KICAiYWRkIjogIjEuMi4zLjQiLA0KICAicG9ydCI6ICI0NDMiLA0KICAiaWQiOiAiYWJjZCIsDQogICJhaWQiOiAiMCIsDQogICJuZXQiOiAidGNwIiwNCiAgInR5cGUiOiAibm9uZSIsDQogICJob3N0IjogIiIsDQogICJwYXRoIjogIiIsDQogICJ0bHMiOiAiIg0KfQ==" |
| vless = "vless://uuid-test@example.com:443?type=tcp" |
|
|
| content = f"{vmess}\n{vless}" |
|
|
| |
| |
|
|
| proxies = UniversalExtractor.extract_proxies(content) |
|
|
| |
| assert len(proxies) >= 1 |
| protocols = {p.protocol for p in proxies} |
| assert "vless" in protocols |
| |
|
|
| def test_deduplication(self): |
| content = "1.1.1.1:80\n1.1.1.1:80" |
| proxies = UniversalExtractor.extract_proxies(content) |
| assert len(proxies) == 1 |
|
|
| def test_mixed_base64_and_text(self): |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| content = "Proxy: 1.1.1.1:80" |
| proxies = UniversalExtractor.extract_proxies(content) |
| assert len(proxies) == 1 |
|
|