Skip to content

Commit 6c6458b

Browse files
committed
User agent tests
1 parent b88dfc2 commit 6c6458b

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import pytest
2+
3+
from smithy_http.user_agent import (
4+
sanitize_user_agent_string_component,
5+
UserAgentComponent,
6+
RawStringUserAgentComponent,
7+
UserAgent,
8+
)
9+
10+
11+
@pytest.mark.parametrize(
12+
"raw_str, allow_hash, expected_str",
13+
[
14+
("foo", False, "foo"),
15+
("foo", True, "foo"),
16+
("ExampleFramework (1.2.3)", False, "ExampleFramework--1.2.3-"),
17+
("foo#1.2.3", False, "foo-1.2.3"),
18+
("foo#1.2.3", True, "foo#1.2.3"),
19+
("", False, ""),
20+
("", True, ""),
21+
("", False, ""),
22+
("#", False, "-"),
23+
("#", True, "#"),
24+
(" ", False, "-"),
25+
(" ", False, "--"),
26+
("@=[]{ }/\\øß©", True, "------------"),
27+
(
28+
"Java_HotSpot_(TM)_64-Bit_Server_VM/25.151-b12",
29+
True,
30+
"Java_HotSpot_-TM-_64-Bit_Server_VM-25.151-b12",
31+
),
32+
],
33+
)
34+
def test_sanitize_ua_string_component(
35+
raw_str: str, allow_hash: bool, expected_str: str
36+
):
37+
actual_str = sanitize_user_agent_string_component(raw_str, allow_hash)
38+
assert actual_str == expected_str
39+
40+
41+
# Test cases for UserAgentComponent
42+
def test_user_agent_component_without_value():
43+
component = UserAgentComponent(prefix="md", name="test")
44+
assert str(component) == "md/test"
45+
46+
47+
def test_user_agent_component_with_value():
48+
component = UserAgentComponent(prefix="md", name="test", value="123")
49+
assert str(component) == "md/test#123"
50+
51+
52+
def test_user_agent_component_with_empty_value():
53+
component = UserAgentComponent(prefix="md", name="test", value="")
54+
assert str(component) == "md/test"
55+
56+
57+
def test_user_agent_component_sanitization():
58+
component = UserAgentComponent(prefix="md@", name="test!", value="123#")
59+
assert str(component) == "md-/test!#123#"
60+
61+
62+
# Test cases for RawStringUserAgentComponent
63+
def test_raw_string_user_agent_component():
64+
component = RawStringUserAgentComponent(value="raw/string#123")
65+
assert str(component) == "raw/string#123"
66+
67+
68+
# Test cases for UserAgent
69+
def test_user_agent_with_multiple_components():
70+
sdk_component = UserAgentComponent(prefix="sdk", name="python", value="1.0")
71+
os_component = UserAgentComponent(prefix="os", name="linux", value="5.4")
72+
raw_component = RawStringUserAgentComponent(value="raw/string#123")
73+
74+
user_agent = UserAgent(
75+
sdk_metadata=[sdk_component],
76+
os_metadata=[os_component],
77+
additional_metadata=[raw_component],
78+
)
79+
80+
expected_output = "sdk/python#1.0 os/linux#5.4 raw/string#123"
81+
assert str(user_agent) == expected_output
82+
83+
84+
def test_user_agent_with_empty_metadata():
85+
user_agent = UserAgent()
86+
assert str(user_agent) == ""
87+
88+
89+
def test_user_agent_with_all_metadata_types():
90+
sdk_component = UserAgentComponent(prefix="sdk", name="python", value="1.0")
91+
internal_component = UserAgentComponent(prefix="md", name="internal")
92+
ua_component = UserAgentComponent(prefix="ua", name="2.0")
93+
api_component = UserAgentComponent(prefix="api", name="operation", value="1.1")
94+
os_component = UserAgentComponent(prefix="os", name="linux", value="5.4")
95+
language_component = UserAgentComponent(prefix="lang", name="python", value="3.12")
96+
env_component = UserAgentComponent(prefix="exec-env", name="prod")
97+
config_component = UserAgentComponent(
98+
prefix="cfg", name="retry-mode", value="standard"
99+
)
100+
feat_component = UserAgentComponent(prefix="ft", name="paginator")
101+
raw_component = RawStringUserAgentComponent(value="raw/string#123")
102+
103+
user_agent = UserAgent(
104+
sdk_metadata=[sdk_component],
105+
internal_metadata=[internal_component],
106+
ua_metadata=[ua_component],
107+
api_metadata=[api_component],
108+
os_metadata=[os_component],
109+
language_metadata=[language_component],
110+
env_metadata=[env_component],
111+
config_metadata=[config_component],
112+
feat_metadata=[feat_component],
113+
additional_metadata=[raw_component],
114+
)
115+
116+
expected_output = (
117+
"sdk/python#1.0 md/internal ua/2.0 api/operation#1.1 os/linux#5.4 "
118+
"lang/python#3.12 exec-env/prod cfg/retry-mode#standard ft/paginator "
119+
"raw/string#123"
120+
)
121+
assert str(user_agent) == expected_output

0 commit comments

Comments
 (0)