Skip to content

Commit 3acf828

Browse files
committed
IDEV-2013: Add tests.
1 parent 772f77a commit 3acf828

File tree

4 files changed

+95
-54
lines changed

4 files changed

+95
-54
lines changed

domaintools/utils.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,12 @@ def validate_feeds_parameters(params):
177177
after = params.get("after")
178178
before = params.get("before")
179179
if not (sessionID or after or before):
180-
raise ValueError("sessionID or after or before must be defined")
180+
raise ValueError("sessionID or after or before must be provided")
181181

182182
format = params.get("output_format")
183-
if params.get("endpoint") == Endpoint.DOWNLOAD.value and format == OutputFormat.CSV.value:
183+
endpoint = params.get("endpoint")
184+
if endpoint == Endpoint.DOWNLOAD.value and format == OutputFormat.CSV.value:
184185
raise ValueError(f"{format} format is not available in {Endpoint.DOWNLOAD.value} API.")
186+
187+
if endpoint == Endpoint.DOWNLOAD.value and params.get("header_authentication", True):
188+
raise ValueError(f"{Endpoint.DOWNLOAD.value} API does not support header authentication. Provide api_key in the parameter")

tests/conftest.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,14 @@
11
"""Configuration for test environment"""
2+
3+
import pytest
4+
5+
6+
@pytest.fixture
7+
def test_feeds_params():
8+
return {
9+
"sessionID": "test-session-id",
10+
"after": -60,
11+
"before": -120,
12+
"output_format": "csv",
13+
"endpoint": "download",
14+
}

tests/test_api.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -643,3 +643,27 @@ def test_verify_response_is_a_generator():
643643
results = feeds_api.domaindiscovery(after="-60", header_authenticationn=False)
644644

645645
assert isgenerator(results.response())
646+
647+
648+
@vcr.use_cassette
649+
def test_feeds_endpoint_should_raise_error_if_download_api_using_header_auth():
650+
with pytest.raises(ValueError) as excinfo:
651+
feeds_api.domaindiscovery(after="-60", endpoint="download")
652+
653+
assert str(excinfo.value) == "download API does not support header authentication. Provide api_key in the parameter"
654+
655+
656+
@vcr.use_cassette
657+
def test_feeds_endpoint_should_raise_error_if_no_required_params():
658+
with pytest.raises(ValueError) as excinfo:
659+
feeds_api.domaindiscovery()
660+
661+
assert str(excinfo.value) == "sessionID or after or before must be provided"
662+
663+
664+
@vcr.use_cassette
665+
def test_feeds_endpoint_should_raise_error_if_asked_csv_format_for_download_api():
666+
with pytest.raises(ValueError) as excinfo:
667+
feeds_api.domaindiscovery(after="-60", output_format="csv", endpoint="download")
668+
669+
assert str(excinfo.value) == "csv format is not available in download API."

tests/test_utils.py

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import json
2+
import pytest
3+
24
from datetime import datetime, timedelta
35

46
from tests.responses import iris_investigate_data
@@ -15,24 +17,18 @@ def test_get_domain_age():
1517
def test_get_threat_component():
1618
threat_components = [
1719
{"name": "threat_profile_malware", "risk_score": 31},
18-
{"name": "threat_profile_spam", "risk_score": 73, "threats": ["spam"]}
20+
{"name": "threat_profile_spam", "risk_score": 73, "threats": ["spam"]},
1921
]
2022
result = utils.get_threat_component(threat_components, "threat_profile_malware")
2123
assert result.get("risk_score") == 31
2224

2325

2426
def test_investigate_average_risk_score():
25-
domains = [
26-
{"domain_risk": {"risk_score": 25}},
27-
{"domain_risk": {"risk_score": 27}}
28-
]
27+
domains = [{"domain_risk": {"risk_score": 25}}, {"domain_risk": {"risk_score": 27}}]
2928
result = utils.get_average_risk_score(domains)
3029
assert result == 26
3130

32-
domains = [
33-
{"domain_risk": {"risk_score": 25}},
34-
{}
35-
]
31+
domains = [{"domain_risk": {"risk_score": 25}}, {}]
3632
result = utils.get_average_risk_score(domains)
3733
assert result == 25
3834

@@ -42,17 +38,11 @@ def test_investigate_average_risk_score():
4238

4339

4440
def test_detect_average_risk_score():
45-
domains = [
46-
{"risk_score": 25},
47-
{"risk_score": 27}
48-
]
41+
domains = [{"risk_score": 25}, {"risk_score": 27}]
4942
result = utils.get_average_risk_score(domains)
5043
assert result == 26
5144

52-
domains = [
53-
{"risk_score": 25},
54-
{"risk_score": None}
55-
]
45+
domains = [{"risk_score": 25}, {"risk_score": None}]
5646
result = utils.get_average_risk_score(domains)
5747
assert result == 25
5848

@@ -65,24 +55,15 @@ def test_investigate_average_age():
6555
two_days_ago = (datetime.now() - timedelta(days=2)).strftime("%Y-%m-%d")
6656
five_days_ago = (datetime.now() - timedelta(days=5)).strftime("%Y-%m-%d")
6757

68-
domains = [
69-
{"create_date": {"value": two_days_ago}},
70-
{"create_date": {"value": five_days_ago}}
71-
]
58+
domains = [{"create_date": {"value": two_days_ago}}, {"create_date": {"value": five_days_ago}}]
7259
result = utils.get_average_age(domains)
7360
assert result == 3
7461

75-
domains = [
76-
{"create_date": {"value": two_days_ago}},
77-
{}
78-
]
62+
domains = [{"create_date": {"value": two_days_ago}}, {}]
7963
result = utils.get_average_age(domains)
8064
assert result == 2
8165

82-
domains = [
83-
{"create_date": {"value": two_days_ago}},
84-
{"create_date": {"value": ""}}
85-
]
66+
domains = [{"create_date": {"value": two_days_ago}}, {"create_date": {"value": ""}}]
8667
result = utils.get_average_age(domains)
8768
assert result == 2
8869

@@ -94,17 +75,11 @@ def test_investigate_average_age():
9475
def test_detect_average_age():
9576
two_days_ago = int((datetime.now() - timedelta(days=2)).strftime("%Y%m%d"))
9677
five_days_ago = int((datetime.now() - timedelta(days=5)).strftime("%Y%m%d"))
97-
domains = [
98-
{"create_date": two_days_ago},
99-
{"create_date": five_days_ago}
100-
]
78+
domains = [{"create_date": two_days_ago}, {"create_date": five_days_ago}]
10179
result = utils.get_average_age(domains)
10280
assert result == 3
10381

104-
domains = [
105-
{"create_date": two_days_ago},
106-
{"create_date": None}
107-
]
82+
domains = [{"create_date": two_days_ago}, {"create_date": None}]
10883
result = utils.get_average_age(domains)
10984
assert result == 2
11085

@@ -121,26 +96,51 @@ def test_data_prune():
12196

12297
def test_find_emails():
12398
emails = utils.find_emails(json.dumps(iris_investigate_data.domaintools()))
124-
assert emails == {'[email protected]', '[email protected]'}
99+
assert emails == {"[email protected]", "[email protected]"}
125100

126101

127102
def test_find_ips():
128103
ips = utils.find_ips(json.dumps(iris_investigate_data.domaintools()))
129-
assert ips == {'142.250.115.26',
130-
'142.250.141.27',
131-
'198.51.44.4',
132-
'198.51.44.68',
133-
'198.51.45.4',
134-
'198.51.45.68',
135-
'199.30.228.112',
136-
'64.233.171.26',
137-
'74.125.142.26'}
104+
assert ips == {
105+
"142.250.115.26",
106+
"142.250.141.27",
107+
"198.51.44.4",
108+
"198.51.44.68",
109+
"198.51.45.4",
110+
"198.51.45.68",
111+
"199.30.228.112",
112+
"64.233.171.26",
113+
"74.125.142.26",
114+
}
115+
138116

139117
def test_get_pivots():
140118
pivots = utils.get_pivots(iris_investigate_data.domaintools().get("results"), "")
141-
assert pivots == [
142-
['IP ADDRESS', ('199.30.228.112', 4)],
143-
['IP ASN', (17318, 111)],
144-
['IP ISP', ('DomainTools LLC', 222)]
145-
]
119+
assert pivots == [["IP ADDRESS", ("199.30.228.112", 4)], ["IP ASN", (17318, 111)], ["IP ISP", ("DomainTools LLC", 222)]]
120+
121+
122+
def test_validate_feeds_parameters_should_raise_error_if_download_api_using_header_auth(test_feeds_params):
123+
test_feeds_params["output_format"] = "jsonl"
124+
125+
with pytest.raises(ValueError) as excinfo:
126+
utils.validate_feeds_parameters(test_feeds_params)
127+
128+
assert str(excinfo.value) == "download API does not support header authentication. Provide api_key in the parameter"
129+
130+
131+
def test_validate_feeds_parameters_should_raise_error_if_no_required_params(test_feeds_params):
132+
test_feeds_params.pop("sessionID", None)
133+
test_feeds_params.pop("after", None)
134+
test_feeds_params.pop("before", None)
135+
136+
with pytest.raises(ValueError) as excinfo:
137+
utils.validate_feeds_parameters(test_feeds_params)
138+
139+
assert str(excinfo.value) == "sessionID or after or before must be provided"
140+
141+
142+
def test_validate_feeds_parameters_should_raise_error_if_asked_csv_format_for_download_api(test_feeds_params):
143+
with pytest.raises(ValueError) as excinfo:
144+
utils.validate_feeds_parameters(test_feeds_params)
146145

146+
assert str(excinfo.value) == "csv format is not available in download API."

0 commit comments

Comments
 (0)