this repo has no description
at trunk 345 lines 11 kB view raw
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