Skip to content

Commit f6c1672

Browse files
committed
refactor: split tests, add name validators to const
1 parent b673128 commit f6c1672

File tree

2 files changed

+66
-39
lines changed

2 files changed

+66
-39
lines changed

splunktaucclib/rest_handler/handler.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@
3434

3535
__all__ = ["RestHandler"]
3636

37+
BASIC_NAME_VALIDATORS = {
38+
"PROHIBITED_NAME_CHARACTERS": ["*", "\\", "[", "]", "(", ")", "?", ":"],
39+
"PROHIBITED_NAMES": ["default", ".", ".."],
40+
"MAX_LENGTH": 1024
41+
}
42+
3743

3844
def _check_name_for_create(name):
3945
if name == "default":
@@ -104,9 +110,9 @@ def check_existing(self, name):
104110

105111
def basic_name_validation(name: str):
106112
tmp_name = str(name)
107-
prohibited_chars = ["*", "\\", "[", "]", "(", ")", "?", ":"]
108-
prohibited_names = ["default", ".", ".."]
109-
max_chars = 1024
113+
prohibited_chars = BASIC_NAME_VALIDATORS["PROHIBITED_NAME_CHARACTERS"]
114+
prohibited_names = BASIC_NAME_VALIDATORS["PROHIBITED_NAMES"]
115+
max_chars = BASIC_NAME_VALIDATORS["MAX_LENGTH"]
110116
val_err_msg = (
111117
f'{prohibited_names}, string started with "_" and string including any one '
112118
f'of {prohibited_chars} are reserved value which cannot be used for field Name"'

tests/integration/test_rest_handler_handler.py

Lines changed: 57 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@
1515
#
1616
from urllib import parse
1717
from requests.auth import HTTPBasicAuth
18+
from splunktaucclib.rest_handler.handler import BASIC_NAME_VALIDATORS
1819
import requests
1920
import os
2021

2122
import pytest
2223

23-
admin = os.getenv("SPLUNK_ADMIN")
24-
admin_password = os.getenv("SPLUNK_ADMIN_PWD")
24+
admin = "admin"
25+
admin_password = "Chang3d!"
2526
user = os.getenv("SPLUNK_USER")
2627
user_password = os.getenv("SPLUNK_USER_PWD")
2728
host = "localhost"
@@ -99,22 +100,12 @@ def test_403_api_call():
99100
"test(name",
100101
"test)name",
101102
"test?name",
102-
"test:name",
103-
"toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnamet"
104-
"oolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnameto"
105-
"olongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoo"
106-
"longnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametool"
107-
"ongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolo"
108-
"ngnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolon"
109-
"gnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolong"
110-
"nametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongn"
111-
"ametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongna"
112-
"metoolongnametoolongnamet",
103+
"test:name"
113104
],
114105
)
115-
def test_basic_name_validation(value):
116-
prohibited_chars = ["*", "\\", "[", "]", "(", ")", "?", ":"]
117-
prohibited_names = ["default", ".", ".."]
106+
def test_basic_name_validation_prohibited_char_and_names(value):
107+
prohibited_chars = BASIC_NAME_VALIDATORS["PROHIBITED_NAME_CHARACTERS"]
108+
prohibited_names = BASIC_NAME_VALIDATORS["PROHIBITED_NAMES"]
118109
expected_msg = (
119110
f'{prohibited_names}, string started with "_" and string including any one '
120111
f'of {prohibited_chars} are reserved value which cannot be used for field Name"'
@@ -131,27 +122,43 @@ def test_basic_name_validation(value):
131122
verify=False,
132123
)
133124

134-
if value.startswith("toolongname"):
135-
assert (
125+
assert expected_msg.replace("\n", "") in response.text
126+
assert response.status_code == 500
127+
128+
129+
def test_basic_name_validation_too_long_name():
130+
value = ("toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongname"
131+
"toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongname"
132+
"toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongname"
133+
"toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongname"
134+
"toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongname"
135+
"toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongname"
136+
"toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongname"
137+
"toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongname"
138+
"toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongname"
139+
"toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongname"
140+
"toolongnametoolongnametoolongnamet"),
141+
142+
response = requests.post(
143+
f"https://{host}:{management_port}/servicesNS/-/demo/demo_demo",
144+
data={"name": value, "interval": "44"},
145+
headers={
146+
"accept": "application/json",
147+
"Content-Type": "application/x-www-form-urlencoded",
148+
},
149+
auth=HTTPBasicAuth(admin, admin_password),
150+
verify=False,
151+
)
152+
assert (
136153
'<msg type="ERROR">Parameter "name" must be less than 1024'.replace(
137154
"\n", ""
138155
)
139156
in response.text
140-
)
141-
else:
142-
assert expected_msg.replace("\n", "") in response.text
143-
assert response.status_code == 500
157+
)
144158

145159

146-
@pytest.mark.parametrize(
147-
"value",
148-
[
149-
"ftestname",
150-
"toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnamet"
151-
"oolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnameto",
152-
],
153-
)
154-
def test_custom_name_validation(value):
160+
def test_custom_name_validation_invalid_name():
161+
value = "atestname"
155162
expected_msg = """All of the following errors need to be fixed: ["Not matching the pattern: ^[a-dA-D]\\\\w*$"]"""
156163

157164
response = requests.post(
@@ -164,9 +171,23 @@ def test_custom_name_validation(value):
164171
auth=HTTPBasicAuth(admin, admin_password),
165172
verify=False,
166173
)
174+
assert expected_msg.replace("\n", "") in response.text
175+
assert response.status_code == 500
176+
167177

168-
if value.startswith("toolongname"):
169-
assert "String length should be between 1 and 100" in response.text
170-
else:
171-
assert expected_msg.replace("\n", "") in response.text
172-
assert response.status_code == 500
178+
def test_custom_name_validation_too_long_name():
179+
value = ("toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongname"
180+
"toolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongnametoolongname"
181+
"toolongnametoolongnameto")
182+
183+
response = requests.post(
184+
f"https://{host}:{management_port}/servicesNS/-/demo/demo_demo",
185+
data={"name": value, "interval": "44"},
186+
headers={
187+
"accept": "application/json",
188+
"Content-Type": "application/x-www-form-urlencoded",
189+
},
190+
auth=HTTPBasicAuth(admin, admin_password),
191+
verify=False,
192+
)
193+
assert "String length should be between 1 and 100" in response.text

0 commit comments

Comments
 (0)