Skip to content

Commit 6b16f91

Browse files
committed
Test env var parsing util functions
Test getenv_to_map() and getenv_to_vec() util functions.
1 parent 7b5831a commit 6b16f91

File tree

3 files changed

+213
-0
lines changed

3 files changed

+213
-0
lines changed

test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ add_subdirectory(loader)
1717
add_subdirectory(conformance)
1818
add_subdirectory(unified_memory_allocation)
1919
add_subdirectory(layers)
20+
add_subdirectory(unit)

test/unit/utils/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Copyright (C) 2023 Intel Corporation
2+
# SPDX-License-Identifier: MIT
3+
4+
add_unit_test(getenv
5+
getenv.cpp
6+
)

test/unit/utils/getenv.cpp

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
// Copyright (C) 2023 Intel Corporation
2+
// SPDX-License-Identifier: MIT
3+
4+
#include <map>
5+
6+
#include <gtest/gtest.h>
7+
8+
#include "helpers.h"
9+
#include "ur_util.hpp"
10+
11+
class GetEnvToMapWithParam
12+
: public ::testing::TestWithParam<
13+
std::map<std::string, std::vector<std::string>>> {
14+
protected:
15+
int ret = -1;
16+
std::map<std::string, std::vector<std::string>> test_map;
17+
18+
void SetUp() override {
19+
std::stringstream env_var_value;
20+
test_map = GetParam();
21+
22+
for (auto const &item : test_map) {
23+
if (&item.first != &test_map.begin()->first) {
24+
env_var_value << ";";
25+
}
26+
env_var_value << item.first << ":";
27+
for (auto const &vec_value : item.second) {
28+
env_var_value << vec_value;
29+
if (&vec_value != &item.second.back()) {
30+
env_var_value << ",";
31+
}
32+
}
33+
}
34+
35+
ret = setenv("UR_TEST_ENV_VAR", env_var_value.str().c_str(), 1);
36+
ASSERT_EQ(ret, 0);
37+
}
38+
39+
void TearDown() override {
40+
ret = unsetenv("UR_TEST_ENV_VAR");
41+
ASSERT_EQ(ret, 0);
42+
}
43+
};
44+
45+
using TestMaps = std::vector<std::map<std::string, std::vector<std::string>>>;
46+
47+
TestMaps getTestMaps() {
48+
TestMaps test_maps_vec;
49+
test_maps_vec.push_back({{"param_1", {"value_1", "value_2"}},
50+
{"param_2", {"value_1", "value_3"}}});
51+
test_maps_vec.push_back(
52+
{{"param_1", {"value_1"}}, {"param_2", {"value_1"}}});
53+
test_maps_vec.push_back({{"param_1", {"value_1"}}});
54+
return test_maps_vec;
55+
}
56+
57+
INSTANTIATE_TEST_SUITE_P(possibleEnvVarValues, GetEnvToMapWithParam,
58+
testing::ValuesIn(getTestMaps()));
59+
60+
TEST_P(GetEnvToMapWithParam, MapValues) {
61+
auto map = getenv_to_map("UR_TEST_ENV_VAR");
62+
ASSERT_TRUE(map.has_value());
63+
for (auto &it : test_map) {
64+
ASSERT_EQ(map->at(it.first), test_map[it.first]);
65+
}
66+
}
67+
68+
TEST(GetenvToVec, OneValue) {
69+
int ret = setenv("UR_TEST_ENV_VAR", "value_1", 1);
70+
ASSERT_EQ(ret, 0);
71+
72+
auto vec = getenv_to_vec("UR_TEST_ENV_VAR");
73+
ASSERT_TRUE(vec.has_value());
74+
ASSERT_EQ(vec->front(), "value_1");
75+
76+
ret = unsetenv("UR_TEST_ENV_VAR");
77+
ASSERT_EQ(ret, 0);
78+
}
79+
80+
TEST(GetenvToVec, OneValueSpecialChars) {
81+
int ret = setenv("UR_TEST_ENV_VAR", "!@#$%^&*()_+-={}[]|\\\\\"<>?/`~", 1);
82+
ASSERT_EQ(ret, 0);
83+
84+
auto vec = getenv_to_vec("UR_TEST_ENV_VAR");
85+
ASSERT_TRUE(vec.has_value());
86+
ASSERT_EQ(vec->front(), "!@#$%^&*()_+-={}[]|\\\\\"<>?/`~");
87+
88+
ret = unsetenv("UR_TEST_ENV_VAR");
89+
ASSERT_EQ(ret, 0);
90+
}
91+
92+
TEST(GetenvToVec, HugeInput) {
93+
std::string huge_str;
94+
huge_str.reserve(1024);
95+
for (int i = 0; i < 102; ++i) {
96+
huge_str += "huuuuuuuge";
97+
}
98+
99+
int ret = setenv("UR_TEST_ENV_VAR", huge_str.c_str(), 1);
100+
ASSERT_EQ(ret, 0);
101+
102+
auto vec = getenv_to_vec("UR_TEST_ENV_VAR");
103+
ASSERT_TRUE(vec.has_value());
104+
ASSERT_EQ(vec->front(), huge_str);
105+
106+
ret = unsetenv("UR_TEST_ENV_VAR");
107+
ASSERT_EQ(ret, 0);
108+
}
109+
110+
TEST(GetenvToVec, MultipleValues) {
111+
int ret = setenv("UR_TEST_ENV_VAR", "value_1,value_2", 1);
112+
ASSERT_EQ(ret, 0);
113+
114+
std::vector<std::string> test_vec = {"value_1", "value_2"};
115+
auto vec = getenv_to_vec("UR_TEST_ENV_VAR");
116+
ASSERT_TRUE(vec.has_value());
117+
ASSERT_EQ(vec, test_vec);
118+
119+
ret = unsetenv("UR_TEST_ENV_VAR");
120+
ASSERT_EQ(ret, 0);
121+
}
122+
123+
TEST(GetenvToVec, EmptyEnvVar) {
124+
int ret = unsetenv("UR_TEST_ENV_VAR");
125+
ASSERT_EQ(ret, 0);
126+
127+
auto vec = getenv_to_vec("UR_TEST_ENV_VAR");
128+
ASSERT_FALSE(vec.has_value());
129+
}
130+
131+
TEST(GetenvToMap, EmptyEnvVar) {
132+
int ret = unsetenv("UR_TEST_ENV_VAR");
133+
ASSERT_EQ(ret, 0);
134+
135+
auto map = getenv_to_map("UR_TEST_ENV_VAR");
136+
ASSERT_FALSE(map.has_value());
137+
}
138+
139+
// ////////////////////////////////////////////////////////////////////////////////////
140+
// // Negative tests
141+
142+
class GetEnvFailureWithParam : public ::testing::TestWithParam<std::string> {
143+
protected:
144+
int ret = -1;
145+
std::string env_var_value = "";
146+
147+
void SetUp() override {
148+
env_var_value = GetParam();
149+
ret = setenv("UR_TEST_ENV_VAR", env_var_value.c_str(), 1);
150+
ASSERT_EQ(ret, 0);
151+
}
152+
153+
void TearDown() override {
154+
ret = unsetenv("UR_TEST_ENV_VAR");
155+
ASSERT_EQ(ret, 0);
156+
}
157+
};
158+
159+
class GetenvToMap : public GetEnvFailureWithParam {};
160+
161+
class GetenvToVec : public GetEnvFailureWithParam {};
162+
163+
INSTANTIATE_TEST_SUITE_P(WrongValuesForMap, GetenvToMap,
164+
testing::Values("value_1;value_2",
165+
"param_1:value_1,value_2;param_2:",
166+
"param_1:value_1,value_2;:value_1",
167+
",;:", ",;", "rvrawerv)(*&)($@#93939854;;)",
168+
"simple", ",", ":", ";", "value,value",
169+
"param:value;param:value",
170+
"param,value;param:value",
171+
"param:value;param_2,value",
172+
"param:value;param_2",
173+
"param:value;param_2;param_3",
174+
"param:value:value_2",
175+
"param:value;:",
176+
"param:value;,"));
177+
178+
TEST_P(GetenvToMap, WrongEnvVarValues) {
179+
ASSERT_THROW(getenv_to_map("UR_TEST_ENV_VAR"), std::invalid_argument);
180+
}
181+
182+
INSTANTIATE_TEST_SUITE_P(WrongValuesForVec, GetenvToVec,
183+
testing::Values("value_1;value_2",
184+
"param_1:value_1,value_2;param_2",
185+
",", ";", ":", ",,,",
186+
"rvrawerv)(*&)($@#93939854,,)",
187+
"value,,", "value;"));
188+
189+
TEST_P(GetenvToVec, WrongEnvVarValues) {
190+
ASSERT_THROW(getenv_to_vec("UR_TEST_ENV_VAR"), std::invalid_argument);
191+
}
192+
193+
#if defined(_WIN32)
194+
TEST(GetEnvExceptionWindows, HugeInput) {
195+
std::string huge_str;
196+
huge_str.reserve(1040);
197+
for (int i = 0; i < 103; ++i) {
198+
huge_str += "huuuuuuuge";
199+
}
200+
201+
auto map = getenv_to_map("UR_TEST_ENV_VAR");
202+
ASSERT_FALSE(map.has_value());
203+
auto vec = getenv_to_vec("UR_TEST_ENV_VAR");
204+
ASSERT_FALSE(vec.has_value());
205+
}
206+
#endif

0 commit comments

Comments
 (0)