summaryrefslogtreecommitdiff
path: root/src/mongo/unittest
diff options
context:
space:
mode:
authorAdam Midvidy <amidvidy@gmail.com>2015-08-04 11:34:18 -0400
committerAdam Midvidy <amidvidy@gmail.com>2015-08-11 13:50:17 -0400
commitf07b870a566195775684b8736865de505d582a27 (patch)
tree90d762aec2d16967c4053a1ef9cf4068ee30f543 /src/mongo/unittest
parent2ec075a6d6c6c8db2d29acf210f2e56946cd2f34 (diff)
downloadmongo-f07b870a566195775684b8736865de505d582a27.tar.gz
SERVER-19449 implement C++ scaffolding for C++ integration tests
Diffstat (limited to 'src/mongo/unittest')
-rw-r--r--src/mongo/unittest/SConscript12
-rw-r--r--src/mongo/unittest/integration_test.h44
-rw-r--r--src/mongo/unittest/integration_test_main.cpp126
3 files changed, 182 insertions, 0 deletions
diff --git a/src/mongo/unittest/SConscript b/src/mongo/unittest/SConscript
index e393f022ca5..dddde95a386 100644
--- a/src/mongo/unittest/SConscript
+++ b/src/mongo/unittest/SConscript
@@ -19,6 +19,18 @@ env.Library("unittest_main", ['unittest_main.cpp'],
'$BUILD_DIR/mongo/base',
])
+env.Library(target="integration_test_main",
+ source=[
+ 'integration_test_main.cpp',
+ ],
+ LIBDEPS=[
+ 'unittest',
+ '$BUILD_DIR/mongo/base',
+ '$BUILD_DIR/mongo/client/connection_string',
+ '$BUILD_DIR/mongo/util/options_parser/options_parser_init',
+ ],
+)
+
env.Library("unittest_crutch", ['crutch.cpp'], LIBDEPS=['$BUILD_DIR/mongo/base'])
diff --git a/src/mongo/unittest/integration_test.h b/src/mongo/unittest/integration_test.h
new file mode 100644
index 00000000000..f8626100121
--- /dev/null
+++ b/src/mongo/unittest/integration_test.h
@@ -0,0 +1,44 @@
+/**
+ * Copyright (C) 2015 MongoDB Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * As a special exception, the copyright holders give permission to link the
+ * code of portions of this program with the OpenSSL library under certain
+ * conditions as described in each individual source file and distribute
+ * linked combinations including the program with the OpenSSL library. You
+ * must comply with the GNU Affero General Public License in all respects for
+ * all of the code used other than as permitted herein. If you modify file(s)
+ * with this exception, you may extend this exception to your version of the
+ * file(s), but you are not obligated to do so. If you do not wish to do so,
+ * delete this exception statement from your version. If you delete this
+ * exception statement from all source files in the program, then also delete
+ * it in the license file.
+ */
+
+#pragma once
+
+namespace mongo {
+
+class ConnectionString;
+
+namespace unittest {
+
+/**
+ * Gets the connection string for the MongoDB deployment that this test is running
+ * against.
+ */
+ConnectionString getFixtureConnectionString();
+
+} // namespace unittest
+} // namespace mongo
diff --git a/src/mongo/unittest/integration_test_main.cpp b/src/mongo/unittest/integration_test_main.cpp
new file mode 100644
index 00000000000..1d379245de8
--- /dev/null
+++ b/src/mongo/unittest/integration_test_main.cpp
@@ -0,0 +1,126 @@
+/**
+ * Copyright 2015 MongoDB Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * As a special exception, the copyright holders give permission to link the
+ * code of portions of this program with the OpenSSL library under certain
+ * conditions as described in each individual source file and distribute
+ * linked combinations including the program with the OpenSSL library. You
+ * must comply with the GNU Affero General Public License in all respects
+ * for all of the code used other than as permitted herein. If you modify
+ * file(s) with this exception, you may extend this exception to your
+ * version of the file(s), but you are not obligated to do so. If you do not
+ * wish to do so, delete this exception statement from your version. If you
+ * delete this exception statement from all source files in the program,
+ * then also delete it in the license file.
+ */
+
+#define MONGO_LOG_DEFAULT_COMPONENT ::mongo::logger::LogComponent::kDefault
+
+#include "mongo/platform/basic.h"
+
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include "mongo/base/initializer.h"
+#include "mongo/client/connection_string.h"
+#include "mongo/unittest/unittest.h"
+#include "mongo/util/log.h"
+#include "mongo/util/options_parser/environment.h"
+#include "mongo/util/options_parser/option_section.h"
+#include "mongo/util/options_parser/options_parser.h"
+#include "mongo/util/options_parser/startup_option_init.h"
+#include "mongo/util/options_parser/startup_options.h"
+#include "mongo/util/quick_exit.h"
+#include "mongo/util/signal_handlers_synchronous.h"
+
+using namespace mongo;
+
+namespace {
+
+ConnectionString fixtureConnectionString{};
+
+const char kConnectionStringFlag[] = "connectionString";
+
+} // namespace
+
+namespace mongo {
+namespace unittest {
+
+ConnectionString getFixtureConnectionString() {
+ return fixtureConnectionString;
+}
+
+} // namespace unittest
+} // namespace mongo
+
+int main(int argc, char** argv, char** envp) {
+ setupSynchronousSignalHandlers();
+ runGlobalInitializersOrDie(argc, argv, envp);
+
+ return unittest::Suite::run(std::vector<std::string>(), "", 1);
+}
+
+namespace moe = mongo::optionenvironment;
+
+MONGO_GENERAL_STARTUP_OPTIONS_REGISTER(IntegrationTestOptions)(InitializerContext*) {
+ auto& opts = moe::startupOptions;
+ opts.addOptionChaining("help", "help", moe::Switch, "Display help");
+ opts.addOptionChaining(kConnectionStringFlag,
+ kConnectionStringFlag,
+ moe::String,
+ "The connection string associated with the test fixture that this "
+ "integration test should run against.")
+ .setDefault(moe::Value("localhost:27017"));
+ return Status::OK();
+}
+
+MONGO_STARTUP_OPTIONS_VALIDATE(IntegrationTestOptions)(InitializerContext*) {
+ auto& env = moe::startupOptionsParsed;
+ auto& opts = moe::startupOptions;
+
+ auto ret = env.validate();
+
+ if (!ret.isOK()) {
+ return ret;
+ }
+
+ if (env.count("help")) {
+ std::cout << opts.helpString() << std::endl;
+ quickExit(EXIT_SUCCESS);
+ }
+
+ return Status::OK();
+}
+
+MONGO_STARTUP_OPTIONS_STORE(IntegrationTestOptions)(InitializerContext*) {
+ auto& env = moe::startupOptionsParsed;
+ moe::Value connectionString;
+ auto ret = env.get(moe::Key(kConnectionStringFlag), &connectionString);
+ if (!ret.isOK()) {
+ return ret;
+ }
+
+ auto swConnectionString = ConnectionString::parse(connectionString.as<std::string>());
+ if (!swConnectionString.isOK()) {
+ return swConnectionString.getStatus();
+ }
+
+ log() << "Using test fixture with connection string = " << connectionString.as<std::string>();
+
+ fixtureConnectionString = std::move(swConnectionString.getValue());
+
+ return Status::OK();
+}