-
-
Notifications
You must be signed in to change notification settings - Fork 341
/
test_identifier.py
132 lines (98 loc) · 4.26 KB
/
test_identifier.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import re
from pywhat import identifier
from pywhat.filter import Distribution, Filter
from pywhat.helper import Keys
r = identifier.Identifier()
def test_identifier_works():
out = r.identify("DANHz6EQVoWyZ9rER56DwTXHWUxfkv9k2o")
assert (
"Dogecoin (DOGE) Wallet Address"
in out["Regexes"]["text"][0]["Regex Pattern"]["Name"]
)
def test_identifier_works2():
out = r.identify("fixtures/file", only_text=False)
assert "Ethereum (ETH) Wallet Address" in str(out)
def test_identifier_works3():
out = r.identify("fixtures/file", only_text=False)
assert "Dogecoin (DOGE) Wallet Address" in str(out)
def test_identifier_filtration():
filter = {"Tags": ["Credentials"]}
r = identifier.Identifier(dist=Distribution(filter))
regexes = r.identify("fixtures/file", only_text=False)["Regexes"]["file"]
for regex in regexes:
assert "Credentials" in regex["Regex Pattern"]["Tags"]
def test_identifier_filtration2():
filter1 = {"ExcludeTags": ["Identifiers"]}
filter2 = {"Tags": ["Identifiers"], "MinRarity": 0.6}
r = identifier.Identifier(dist=Distribution(filter1))
regexes = r.identify("fixtures/file", only_text=False, dist=Distribution(filter2))[
"Regexes"
]["file"]
for regex in regexes:
assert "Identifiers" in regex["Regex Pattern"]["Tags"]
assert regex["Regex Pattern"]["Rarity"] >= 0.6
def test_identifier_sorting():
r = identifier.Identifier(key=Keys.NAME, reverse=True)
out = r.identify("fixtures/file", only_text=False)
assert out["Regexes"]["file"]
def test_identifier_sorting2():
out = r.identify("fixtures/file", only_text=False, key=Keys.RARITY, reverse=True)
prev = None
for match in out["Regexes"]["file"]:
if prev is not None:
assert prev >= match["Regex Pattern"]["Rarity"]
prev = match["Regex Pattern"]["Rarity"]
def test_identifier_sorting3():
out = r.identify("fixtures/file", only_text=False, key=Keys.NAME)
prev = None
for match in out["Regexes"]["file"]:
if prev is not None:
assert prev <= match["Regex Pattern"]["Name"]
prev = match["Regex Pattern"]["Name"]
def test_identifier_sorting4():
r = identifier.Identifier(key=Keys.NAME, reverse=True)
out = r.identify("fixtures/file", only_text=False)
prev = None
for match in out["Regexes"]["file"]:
if prev is not None:
assert prev >= match["Regex Pattern"]["Name"]
prev = match["Regex Pattern"]["Name"]
def test_identifier_sorting5():
out = r.identify("fixtures/file", only_text=False, key=Keys.MATCHED)
prev = None
for match in out["Regexes"]["file"]:
if prev is not None:
assert prev <= match["Matched"]
prev = match["Matched"]
def test_identifier_sorting6():
out = r.identify("fixtures/file", only_text=False, key=Keys.MATCHED, reverse=True)
prev = None
for match in out["Regexes"]["file"]:
if prev is not None:
assert prev >= match["Matched"]
prev = match["Matched"]
def test_only_text():
out = r.identify("fixtures/file")
assert out["Regexes"] is None
out = r.identify("THM{7281j}}", only_text=True)
assert "TryHackMe Flag Format" in out["Regexes"]["text"][0]["Regex Pattern"]["Name"]
def test_recursion():
out = r.identify("fixtures", only_text=False)
assert re.findall(r"\'(?:\/|\\\\)file\'", str(list(out["Regexes"].keys())))
assert re.findall(
r"\'(?:\/|\\\\)test(?:\/|\\\\)file\'", str(list(out["Regexes"].keys()))
)
def test_boundaryless():
r = identifier.Identifier(boundaryless=Filter())
out = r.identify("127.0.0.1abrakadabra")
assert (
"Internet Protocol (IP) Address Version 4"
in out["Regexes"]["text"][0]["Regex Pattern"]["Name"]
)
out = r.identify("127.0.0.1abrakadabra", boundaryless=Filter({"Tags": ["Media"]}))
assert out["Regexes"] is None
def test_finditer():
r = identifier.Identifier(boundaryless=Filter())
out = r.identify("anon@random.org dad@gmail.com")
assert "anon@random.org" in out["Regexes"]["text"][2]["Matched"]
assert "dad@gmail.com" in out["Regexes"]["text"][3]["Matched"]