1 /*
2 * Copyright © 2022 Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 * IN THE SOFTWARE.
22 *
23 * \author Illia Abernikhin <[email protected]>
24 *
25 */
26
27 #include <stdlib.h>
28
29 #include <gtest/gtest.h>
30 #include "c11/threads.h"
31 #include "util/u_debug.h"
32
33 #define NUM_DEBUG_TEST_THREAD 8
34
35 DEBUG_GET_ONCE_BOOL_OPTION(bool_test,"X_TEST_ENV_BOOL", false);
36
37 static int
test_thread(void * _state)38 test_thread(void *_state)
39 {
40 EXPECT_STREQ(debug_get_option("X_TEST_GALLIUM_DRIVER", ""), "test_driver");
41 EXPECT_EQ(debug_get_option_bool_test(), true);
42 return 0;
43 }
44
TEST(u_debug,DEBUG_GET_ONCE_BOOL_Multithread)45 TEST(u_debug, DEBUG_GET_ONCE_BOOL_Multithread)
46 {
47 {
48 static char env_str[] = "X_TEST_ENV_BOOL=true";
49 putenv(env_str);
50 }
51
52 {
53 static char env_str[] = "X_TEST_GALLIUM_DRIVER=test_driver";
54 putenv(env_str);
55 }
56
57 thrd_t threads[NUM_DEBUG_TEST_THREAD];
58 for (unsigned i = 0; i < NUM_DEBUG_TEST_THREAD; i++) {
59 thrd_create(&threads[i], test_thread, NULL);
60 }
61 for (unsigned i = 0; i < NUM_DEBUG_TEST_THREAD; i++) {
62 int ret;
63 thrd_join(threads[i], &ret);
64 }
65 }
66
67 /* When testing, the environment variable name should not be the same */
68
TEST(u_debug,debug_get_bool_option)69 TEST(u_debug, debug_get_bool_option)
70 {
71 {
72 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_0=10";
73 putenv(env_str);
74 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_0", true));
75 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_0", false));
76 }
77
78 {
79 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_1";
80 putenv(env_str);
81 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_1", true));
82 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_1", false));
83 }
84
85 {
86 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_2=INVALID";
87 putenv(env_str);
88 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_2", true));
89 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_2", false));
90 }
91
92 {
93 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_3=0";
94 putenv(env_str);
95 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_3", true));
96 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_3", false));
97 }
98
99 {
100 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_4=n";
101 putenv(env_str);
102 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_4", true));
103 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_4", false));
104 }
105
106 {
107 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_5=No";
108 putenv(env_str);
109 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_5", true));
110 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_5", false));
111 }
112
113 {
114 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_6=F";
115 putenv(env_str);
116 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_6", true));
117 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_6", false));
118 }
119
120 {
121 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_7=fAlse";
122 putenv(env_str);
123 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_7", true));
124 EXPECT_FALSE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_7", false));
125 }
126
127 {
128 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_8=1";
129 putenv(env_str);
130 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_8", true));
131 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_8", false));
132 }
133
134 {
135 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_9=Y";
136 putenv(env_str);
137 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_9", true));
138 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_9", false));
139 }
140
141 {
142 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_10=Yes";
143 putenv(env_str);
144 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_10", true));
145 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_10", false));
146 }
147
148 {
149 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_11=t";
150 putenv(env_str);
151 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_11", true));
152 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_11", false));
153 }
154
155 {
156 static char env_str[] = "MESA_UNIT_TEST_BOOL_VARIABLE_12=True";
157 putenv(env_str);
158 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_12", true));
159 EXPECT_TRUE(debug_get_bool_option("MESA_UNIT_TEST_BOOL_VARIABLE_12", false));
160 }
161 }
162
TEST(u_debug,debug_get_num_option)163 TEST(u_debug, debug_get_num_option)
164 {
165 {
166 static char env_str[] = "MESA_UNIT_TEST_NUM_VARIABLE_0=101";
167 putenv(env_str);
168 EXPECT_EQ(debug_get_num_option("MESA_UNIT_TEST_NUM_VARIABLE_0", 10), 101);
169 EXPECT_EQ(debug_get_num_option("MESA_UNIT_TEST_NUM_VARIABLE_0", 0), 101);
170 }
171
172 {
173 static char env_str[] = "MESA_UNIT_TEST_NUM_VARIABLE_1";
174 putenv(env_str);
175 EXPECT_EQ(debug_get_num_option("MESA_UNIT_TEST_NUM_VARIABLE_1", 10), 10);
176 EXPECT_EQ(debug_get_num_option("MESA_UNIT_TEST_NUM_VARIABLE_1", 100), 100);
177 }
178
179 {
180 static char env_str[] = "MESA_UNIT_TEST_NUM_VARIABLE_2=something";
181 putenv(env_str);
182 EXPECT_EQ(debug_get_num_option("MESA_UNIT_TEST_NUM_VARIABLE_2", 10), 10);
183 EXPECT_EQ(debug_get_num_option("MESA_UNIT_TEST_NUM_VARIABLE_2", 100), 100);
184 }
185 }
186
187 DEBUG_GET_ONCE_NUM_OPTION(num_once_test_0, "MESA_UNIT_TEST_DEBUG_GET_ONCE_NUM_VARIABLE_0", -33)
188
189 DEBUG_GET_ONCE_NUM_OPTION(num_once_test_1, "MESA_UNIT_TEST_DEBUG_GET_ONCE_NUM_VARIABLE_1", 0)
190
191 DEBUG_GET_ONCE_NUM_OPTION(num_once_test_2, "MESA_UNIT_TEST_DEBUG_GET_ONCE_NUM_VARIABLE_2", 0)
192
TEST(u_debug,DEBUG_GET_ONCE_NUM_OPTION_Macro)193 TEST(u_debug, DEBUG_GET_ONCE_NUM_OPTION_Macro)
194 {
195 {
196 EXPECT_EQ(debug_get_option_num_once_test_0(), -33);
197 }
198
199 {
200 static char env_str[] = "MESA_UNIT_TEST_DEBUG_GET_ONCE_NUM_VARIABLE_1=9223372036854775807";
201 putenv(env_str);
202 EXPECT_EQ(debug_get_option_num_once_test_1(), INT64_MAX);
203 }
204
205 {
206 static char env_str[] = "MESA_UNIT_TEST_DEBUG_GET_ONCE_NUM_VARIABLE_1=9223372036854775806";
207 putenv(env_str);
208 EXPECT_EQ(debug_get_option_num_once_test_1(), INT64_MAX);
209 }
210
211 {
212 static char env_str[] = "MESA_UNIT_TEST_DEBUG_GET_ONCE_NUM_VARIABLE_2=-9223372036854775808";
213 putenv(env_str);
214 EXPECT_EQ(debug_get_option_num_once_test_2(), INT64_MIN);
215 }
216 }
217