this repo has no description
1// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com)
2#include "Python.h"
3#include "gtest/gtest.h"
4
5#include "capi-fixture.h"
6#include "capi-testing.h"
7
8namespace py {
9namespace testing {
10
11using ConfigExtensionApiTest = ExtensionApi;
12
13TEST_F(ConfigExtensionApiTest, ImportUnderAstReturnsModule) {
14 PyObjectPtr module(PyImport_ImportModule("_ast"));
15 ASSERT_NE(module, nullptr);
16 EXPECT_EQ(PyErr_Occurred(), nullptr);
17 EXPECT_TRUE(PyModule_Check(module));
18}
19
20TEST_F(ConfigExtensionApiTest, ImportUnderAstModuleMethods) {
21 PyRun_SimpleString(R"(
22import ast
23c = "print('hello') "
24b = ast.parse(c)
25a = ast.dump(b)
26)");
27 PyObjectPtr a(mainModuleGet("a"));
28 ASSERT_EQ(PyErr_Occurred(), nullptr);
29 EXPECT_TRUE(isUnicodeEqualsCStr(
30 a,
31 "Module(body=[Expr(value=Call(func=Name(id='print', ctx=Load()), "
32 "args=[Constant(value='hello', kind=None)], keywords=[]))], "
33 "type_ignores=[])"));
34}
35
36TEST_F(ConfigExtensionApiTest, ImportUnderBisectReturnsModule) {
37 PyObjectPtr module(PyImport_ImportModule("_bisect"));
38 ASSERT_NE(module, nullptr);
39 EXPECT_EQ(PyErr_Occurred(), nullptr);
40 EXPECT_TRUE(PyModule_Check(module));
41}
42
43TEST_F(ConfigExtensionApiTest, ImportUnderBlake2ReturnsModule) {
44 PyObjectPtr module(PyImport_ImportModule("_blake2"));
45 ASSERT_NE(module, nullptr);
46 EXPECT_EQ(PyErr_Occurred(), nullptr);
47 EXPECT_TRUE(PyModule_Check(module));
48}
49
50TEST_F(ConfigExtensionApiTest, ImportUnderBz2ReturnsModule) {
51 PyObjectPtr module(PyImport_ImportModule("_bz2"));
52 ASSERT_NE(module, nullptr);
53 EXPECT_EQ(PyErr_Occurred(), nullptr);
54 EXPECT_TRUE(PyModule_Check(module));
55}
56
57TEST_F(ConfigExtensionApiTest, ImportUnderCursesResturnsModule) {
58 PyObjectPtr module(PyImport_ImportModule("_curses"));
59 ASSERT_NE(module, nullptr);
60 EXPECT_EQ(PyErr_Occurred(), nullptr);
61 EXPECT_TRUE(PyModule_Check(module));
62}
63
64TEST_F(ConfigExtensionApiTest, ImportUnderCsvReturnsModule) {
65 PyObjectPtr module(PyImport_ImportModule("_csv"));
66 ASSERT_NE(module, nullptr);
67 EXPECT_EQ(PyErr_Occurred(), nullptr);
68 EXPECT_TRUE(PyModule_Check(module));
69}
70
71TEST_F(ConfigExtensionApiTest, ImportUnderDatetimeReturnsModule) {
72 PyObjectPtr module(PyImport_ImportModule("_datetime"));
73 ASSERT_NE(module, nullptr);
74 EXPECT_EQ(PyErr_Occurred(), nullptr);
75 EXPECT_TRUE(PyModule_Check(module));
76}
77
78TEST_F(ConfigExtensionApiTest, ImportUnderHashlibReturnsModule) {
79 PyObjectPtr module(PyImport_ImportModule("_hashlib"));
80 ASSERT_NE(module, nullptr);
81 EXPECT_EQ(PyErr_Occurred(), nullptr);
82 EXPECT_TRUE(PyModule_Check(module));
83}
84
85TEST_F(ConfigExtensionApiTest, ImportUnderLocaleReturnsModule) {
86 PyObjectPtr module(PyImport_ImportModule("_locale"));
87 ASSERT_NE(module, nullptr);
88 EXPECT_EQ(PyErr_Occurred(), nullptr);
89 EXPECT_TRUE(PyModule_Check(module));
90}
91
92TEST_F(ConfigExtensionApiTest, ImportUnderLzmaReturnsModule) {
93 PyObjectPtr module(PyImport_ImportModule("_lzma"));
94 ASSERT_NE(module, nullptr);
95 EXPECT_EQ(PyErr_Occurred(), nullptr);
96 EXPECT_TRUE(PyModule_Check(module));
97}
98
99TEST_F(ConfigExtensionApiTest,
100 ImportUnderMultiprocessingReadlineReturnsModule) {
101 PyObjectPtr module(PyImport_ImportModule("_multiprocessing"));
102 ASSERT_NE(module, nullptr);
103 EXPECT_EQ(PyErr_Occurred(), nullptr);
104 EXPECT_TRUE(PyModule_Check(module));
105}
106
107TEST_F(ConfigExtensionApiTest, ImportUnderParserReturnsModulePyro) {
108 PyObjectPtr module(PyImport_ImportModule("_parser"));
109 ASSERT_NE(module, nullptr);
110 EXPECT_EQ(PyErr_Occurred(), nullptr);
111 EXPECT_TRUE(PyModule_Check(module));
112}
113
114TEST_F(ConfigExtensionApiTest, ImportUnderPosixSubprocessReturnsModule) {
115 PyObjectPtr module(PyImport_ImportModule("_posixsubprocess"));
116 ASSERT_NE(module, nullptr);
117 EXPECT_EQ(PyErr_Occurred(), nullptr);
118 EXPECT_TRUE(PyModule_Check(module));
119}
120
121TEST_F(ConfigExtensionApiTest, ImportUnderRandomReturnsModule) {
122 PyObjectPtr module(PyImport_ImportModule("_random"));
123 ASSERT_NE(module, nullptr);
124 EXPECT_EQ(PyErr_Occurred(), nullptr);
125 EXPECT_TRUE(PyModule_Check(module));
126}
127
128TEST_F(ConfigExtensionApiTest, ImportUnderSocketReturnsModule) {
129 PyObjectPtr module(PyImport_ImportModule("_socket"));
130 ASSERT_NE(module, nullptr);
131 EXPECT_EQ(PyErr_Occurred(), nullptr);
132 EXPECT_TRUE(PyModule_Check(module));
133}
134
135TEST_F(ConfigExtensionApiTest, ImportUnderSha3ReturnsModule) {
136 PyObjectPtr module(PyImport_ImportModule("_sha3"));
137 ASSERT_NE(module, nullptr);
138 EXPECT_EQ(PyErr_Occurred(), nullptr);
139 EXPECT_TRUE(PyModule_Check(module));
140}
141
142TEST_F(ConfigExtensionApiTest, ImportUnderSqlite3ReturnsModule) {
143 PyObjectPtr module(PyImport_ImportModule("_sqlite3"));
144 ASSERT_NE(module, nullptr);
145 EXPECT_EQ(PyErr_Occurred(), nullptr);
146 EXPECT_TRUE(PyModule_Check(module));
147}
148
149TEST_F(ConfigExtensionApiTest, ImportUnderSreReturnsModule) {
150 PyObjectPtr module(PyImport_ImportModule("_sre"));
151 ASSERT_NE(module, nullptr);
152 EXPECT_EQ(PyErr_Occurred(), nullptr);
153 EXPECT_TRUE(PyModule_Check(module));
154}
155
156TEST_F(ConfigExtensionApiTest, ImportUnderSslReturnsModule) {
157 PyObjectPtr module(PyImport_ImportModule("_ssl"));
158 ASSERT_NE(module, nullptr);
159 EXPECT_EQ(PyErr_Occurred(), nullptr);
160 EXPECT_TRUE(PyModule_Check(module));
161}
162
163TEST_F(ConfigExtensionApiTest, ImportUnderSslModuleMethods) {
164 PyRun_SimpleString(R"(
165import ssl
166ssl.create_default_context()
167)");
168 ASSERT_EQ(PyErr_Occurred(), nullptr);
169}
170
171TEST_F(ConfigExtensionApiTest, ImportUnderStatReturnsModule) {
172 PyObjectPtr module(PyImport_ImportModule("_stat"));
173 ASSERT_NE(module, nullptr);
174 EXPECT_EQ(PyErr_Occurred(), nullptr);
175 EXPECT_TRUE(PyModule_Check(module));
176}
177
178TEST_F(ConfigExtensionApiTest, ImportUnderStructReturnsModule) {
179 PyObjectPtr module(PyImport_ImportModule("_struct"));
180 ASSERT_NE(module, nullptr);
181 EXPECT_EQ(PyErr_Occurred(), nullptr);
182 EXPECT_TRUE(PyModule_Check(module));
183}
184
185TEST_F(ConfigExtensionApiTest, ImportUnderSymtableReturnsModule) {
186 PyObjectPtr module(PyImport_ImportModule("_symtable"));
187 ASSERT_NE(module, nullptr);
188 EXPECT_EQ(PyErr_Occurred(), nullptr);
189 EXPECT_TRUE(PyModule_Check(module));
190}
191
192TEST_F(ConfigExtensionApiTest, ImportAtexitReturnsModule) {
193 PyObjectPtr module(PyImport_ImportModule("atexit"));
194 ASSERT_NE(module, nullptr);
195 EXPECT_EQ(PyErr_Occurred(), nullptr);
196 EXPECT_TRUE(PyModule_Check(module));
197}
198
199TEST_F(ConfigExtensionApiTest, ImportBinasciiReturnsModule) {
200 PyObjectPtr module(PyImport_ImportModule("binascii"));
201 ASSERT_NE(module, nullptr);
202 EXPECT_EQ(PyErr_Occurred(), nullptr);
203 EXPECT_TRUE(PyModule_Check(module));
204}
205
206TEST_F(ConfigExtensionApiTest, ImportErrnoReturnsModule) {
207 PyObjectPtr module(PyImport_ImportModule("errno"));
208 ASSERT_NE(module, nullptr);
209 EXPECT_EQ(PyErr_Occurred(), nullptr);
210 EXPECT_TRUE(PyModule_Check(module));
211}
212
213TEST_F(ConfigExtensionApiTest, ImportFcntlReturnsModule) {
214 PyObjectPtr module(PyImport_ImportModule("fcntl"));
215 ASSERT_NE(module, nullptr);
216 EXPECT_EQ(PyErr_Occurred(), nullptr);
217 EXPECT_TRUE(PyModule_Check(module));
218}
219
220TEST_F(ConfigExtensionApiTest, ImportGrpReturnsModule) {
221 PyObjectPtr module(PyImport_ImportModule("grp"));
222 ASSERT_NE(module, nullptr);
223 EXPECT_EQ(PyErr_Occurred(), nullptr);
224 EXPECT_TRUE(PyModule_Check(module));
225}
226
227TEST_F(ConfigExtensionApiTest, ImportMathReturnsModule) {
228 PyObjectPtr module(PyImport_ImportModule("math"));
229 ASSERT_NE(module, nullptr);
230 EXPECT_EQ(PyErr_Occurred(), nullptr);
231 EXPECT_TRUE(PyModule_Check(module));
232}
233
234TEST_F(ConfigExtensionApiTest, ImportMathModuleMethods) {
235 PyRun_SimpleString(R"(
236import math
237a = math.sin(1)
238b = math.floor(12.34)
239)");
240 PyObjectPtr a(mainModuleGet("a"));
241 PyObjectPtr b(mainModuleGet("b"));
242 ASSERT_EQ(PyErr_Occurred(), nullptr);
243 EXPECT_EQ(PyFloat_Check(a), 1);
244 EXPECT_EQ(PyLong_Check(b), 1);
245}
246
247TEST_F(ConfigExtensionApiTest, ImportPosixReturnsModule) {
248 PyObjectPtr module(PyImport_ImportModule("posix"));
249 ASSERT_NE(module, nullptr);
250 EXPECT_EQ(PyErr_Occurred(), nullptr);
251 EXPECT_TRUE(PyModule_Check(module));
252}
253
254TEST_F(ConfigExtensionApiTest, ImportPwdReturnsModule) {
255 PyObjectPtr module(PyImport_ImportModule("pwd"));
256 ASSERT_NE(module, nullptr);
257 EXPECT_EQ(PyErr_Occurred(), nullptr);
258 EXPECT_TRUE(PyModule_Check(module));
259}
260
261TEST_F(ConfigExtensionApiTest, ImportPyexpatReturnsModule) {
262 PyObjectPtr module(PyImport_ImportModule("pyexpat"));
263 ASSERT_NE(module, nullptr);
264 EXPECT_EQ(PyErr_Occurred(), nullptr);
265 EXPECT_TRUE(PyModule_Check(module));
266}
267
268TEST_F(ConfigExtensionApiTest, ImportReadlineReturnsModule) {
269 PyObjectPtr module(PyImport_ImportModule("readline"));
270 ASSERT_NE(module, nullptr);
271 EXPECT_EQ(PyErr_Occurred(), nullptr);
272 EXPECT_TRUE(PyModule_Check(module));
273}
274
275TEST_F(ConfigExtensionApiTest, ImportResourceReturnsModule) {
276 PyObjectPtr module(PyImport_ImportModule("resource"));
277 ASSERT_NE(module, nullptr);
278 EXPECT_EQ(PyErr_Occurred(), nullptr);
279 EXPECT_TRUE(PyModule_Check(module));
280}
281
282TEST_F(ConfigExtensionApiTest, ImportSelectReturnsModule) {
283 PyObjectPtr module(PyImport_ImportModule("select"));
284 ASSERT_NE(module, nullptr);
285 EXPECT_EQ(PyErr_Occurred(), nullptr);
286 EXPECT_TRUE(PyModule_Check(module));
287}
288
289TEST_F(ConfigExtensionApiTest, ImportSyslogReturnsModule) {
290 PyObjectPtr module(PyImport_ImportModule("syslog"));
291 ASSERT_NE(module, nullptr);
292 EXPECT_EQ(PyErr_Occurred(), nullptr);
293 EXPECT_TRUE(PyModule_Check(module));
294}
295
296TEST_F(ConfigExtensionApiTest, ImportTermiosReturnsModule) {
297 PyObjectPtr module(PyImport_ImportModule("termios"));
298 ASSERT_NE(module, nullptr);
299 EXPECT_EQ(PyErr_Occurred(), nullptr);
300 EXPECT_TRUE(PyModule_Check(module));
301}
302
303TEST_F(ConfigExtensionApiTest, ImportTimeReturnsModule) {
304 PyObjectPtr module(PyImport_ImportModule("time"));
305 ASSERT_NE(module, nullptr);
306 EXPECT_EQ(PyErr_Occurred(), nullptr);
307 EXPECT_TRUE(PyModule_Check(module));
308}
309
310TEST_F(ConfigExtensionApiTest, TimeModuleMethods) {
311 PyRun_SimpleString(R"(
312import time
313a = time.time()
314b = time.perf_counter()
315)");
316 PyObjectPtr a(mainModuleGet("a"));
317 PyObjectPtr b(mainModuleGet("b"));
318 ASSERT_EQ(PyErr_Occurred(), nullptr);
319 EXPECT_EQ(PyFloat_Check(a), 1);
320 EXPECT_EQ(PyFloat_Check(b), 1);
321}
322
323TEST_F(ConfigExtensionApiTest, ImportZlibReturnsModule) {
324 PyObjectPtr module(PyImport_ImportModule("zlib"));
325 ASSERT_NE(module, nullptr);
326 EXPECT_EQ(PyErr_Occurred(), nullptr);
327 EXPECT_TRUE(PyModule_Check(module));
328}
329
330TEST_F(ConfigExtensionApiTest, ZlibModuleMethods) {
331 PyRun_SimpleString(R"(
332import zlib
333input = b'Hello world'
334z = zlib.compress(input)
335result = zlib.decompress(z)
336)");
337 PyObjectPtr result(mainModuleGet("result"));
338 PyObjectPtr input(mainModuleGet("input"));
339 ASSERT_EQ(PyErr_Occurred(), nullptr);
340 ASSERT_NE(result, input);
341 EXPECT_STREQ(PyBytes_AsString(result), PyBytes_AsString(input));
342}
343
344} // namespace testing
345} // namespace py