// Define main function as an entry to these tests. // These test functions cannot use the main() defined for unittests because they // call runGlobalInitializers(). The embedded C API calls mongoDbMain() which // calls runGlobalInitializers(). int main(int argc, char** argv, char** envp) { moe::OptionsParser parser; moe::Environment environment; moe::OptionSection options; std::map<std::string, std::string> env; options.addOptionChaining( "tempPath", "tempPath", moe::String, "directory to place mongo::TempDir subdirectories"); std::vector<std::string> argVector(argv, argv + argc); mongo::Status ret = parser.run(options, argVector, env, &environment); if (!ret.isOK()) { std::cerr << options.helpString(); return EXIT_FAILURE; } if (environment.count("tempPath")) { ::mongo::unittest::TempDir::setTempPath(environment["tempPath"].as<std::string>()); } ::mongo::clearSignalMask(); ::mongo::setupSynchronousSignalHandlers(); ::mongo::serverGlobalParams.noUnixSocket = true; ::mongo::unittest::setupTestLogger(); StatusPtr status(mongo_embedded_v1_status_create()); mongoc_init(); global_lib_handle = mongo_embedded_v1_lib_init(nullptr, status.get()); if (global_lib_handle == nullptr) { std::cerr << "Error: " << mongo_embedded_v1_status_get_explanation(status.get()); return EXIT_FAILURE; } auto result = ::mongo::unittest::Suite::run(std::vector<std::string>(), "", 1); if (mongo_embedded_v1_lib_fini(global_lib_handle, status.get()) != MONGO_EMBEDDED_V1_SUCCESS) { std::cerr << "Error: " << mongo_embedded_v1_status_get_explanation(status.get()); return EXIT_FAILURE; } mongoc_cleanup(); globalTempDir.reset(); mongo::quickExit(result); }
// Define main function as an entry to these tests. // These test functions cannot use the main() defined for unittests because they // call runGlobalInitializers(). The embedded C API calls mongoDbMain() which // calls runGlobalInitializers(). int main(int argc, char** argv, char** envp) { moe::OptionsParser parser; moe::Environment environment; moe::OptionSection options; std::map<std::string, std::string> env; auto ret = mongo::embedded::addMongocEmbeddedTestOptions(&options); if (!ret.isOK()) { std::cerr << ret << std::endl; return EXIT_FAILURE; } std::vector<std::string> argVector(argv, argv + argc); ret = parser.run(options, argVector, env, &environment); if (!ret.isOK()) { std::cerr << options.helpString(); return EXIT_FAILURE; } if (environment.count("tempPath")) { ::mongo::unittest::TempDir::setTempPath(environment["tempPath"].as<std::string>()); } ::mongo::clearSignalMask(); ::mongo::setupSynchronousSignalHandlers(); ::mongo::serverGlobalParams.noUnixSocket = true; // See comment by the same code block in mongo_embedded_test.cpp const char* null_argv[1] = {nullptr}; ret = mongo::runGlobalInitializers(0, null_argv, nullptr); if (!ret.isOK()) { std::cerr << "Global initilization failed"; return EXIT_FAILURE; } ret = mongo::runGlobalDeinitializers(); if (!ret.isOK()) { std::cerr << "Global deinitilization failed"; return EXIT_FAILURE; } StatusPtr status(mongo_embedded_v1_status_create()); mongoc_init(); mongo_embedded_v1_init_params params; params.log_flags = MONGO_EMBEDDED_V1_LOG_STDOUT; params.log_callback = nullptr; params.log_user_data = nullptr; global_lib_handle = mongo_embedded_v1_lib_init(¶ms, status.get()); if (global_lib_handle == nullptr) { std::cerr << "Error: " << mongo_embedded_v1_status_get_explanation(status.get()); return EXIT_FAILURE; } auto result = ::mongo::unittest::Suite::run(std::vector<std::string>(), "", 1); if (mongo_embedded_v1_lib_fini(global_lib_handle, status.get()) != MONGO_EMBEDDED_V1_SUCCESS) { std::cerr << "Error: " << mongo_embedded_v1_status_get_explanation(status.get()); return EXIT_FAILURE; } mongoc_cleanup(); globalTempDir.reset(); mongo::quickExit(result); }