summaryrefslogtreecommitdiff
path: root/src/mongo/db/server_options_test.cpp
diff options
context:
space:
mode:
authorShaun Verch <shaun.verch@10gen.com>2013-10-02 16:20:51 -0400
committerShaun Verch <shaun.verch@10gen.com>2013-10-06 18:04:32 -0400
commitdbc0880c91a773a45046e14fba14dd1586c16b9a (patch)
tree73d29bc131bbddb591c8c9880c48d373678b261d /src/mongo/db/server_options_test.cpp
parentee7ea7ea7f8eb423cd2ee8ec928f2b50e014ac52 (diff)
downloadmongo-dbc0880c91a773a45046e14fba14dd1586c16b9a.tar.gz
SERVER-10742 Allow a string of v characters in the verbose option
Diffstat (limited to 'src/mongo/db/server_options_test.cpp')
-rw-r--r--src/mongo/db/server_options_test.cpp365
1 files changed, 365 insertions, 0 deletions
diff --git a/src/mongo/db/server_options_test.cpp b/src/mongo/db/server_options_test.cpp
new file mode 100644
index 00000000000..f72e7d052d8
--- /dev/null
+++ b/src/mongo/db/server_options_test.cpp
@@ -0,0 +1,365 @@
+/* Copyright 2013 10gen Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "mongo/bson/util/builder.h"
+#include "mongo/db/server_options.h"
+#include "mongo/logger/logger.h"
+#include "mongo/unittest/unittest.h"
+#include "mongo/util/options_parser/environment.h"
+#include "mongo/util/options_parser/option_section.h"
+#include "mongo/util/options_parser/options_parser.h"
+
+namespace {
+
+ using mongo::ErrorCodes;
+ using mongo::Status;
+
+ namespace moe = mongo::optionenvironment;
+
+ class OptionsParserTester : public moe::OptionsParser {
+ public:
+ Status readConfigFile(const std::string& filename, std::string* config) {
+ if (filename != _filename) {
+ ::mongo::StringBuilder sb;
+ sb << "Parser using filename: " << filename <<
+ " which does not match expected filename: " << _filename;
+ return Status(ErrorCodes::InternalError, sb.str());
+ }
+ *config = _config;
+ return Status::OK();
+ }
+ void setConfig(const std::string& filename, const std::string& config) {
+ _filename = filename;
+ _config = config;
+ }
+ private:
+ std::string _filename;
+ std::string _config;
+ };
+
+ TEST(Verbosity, Default) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ // Reset the log level before we test
+ ::mongo::logger::globalLogDomain()->setMinimumLoggedSeverity(
+ ::mongo::logger::LogSeverity::Info());
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ std::map<std::string, std::string> env_map;
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::storeServerOptions(environment, argv));
+
+ // Make sure the log level didn't change since we didn't specify any verbose options
+ ASSERT_EQUALS(::mongo::logger::globalLogDomain()->getMinimumLogSeverity(),
+ ::mongo::logger::LogSeverity::Info());
+ }
+
+ TEST(Verbosity, CommandLineImplicit) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ // Reset the log level before we test
+ ::mongo::logger::globalLogDomain()->setMinimumLoggedSeverity(
+ ::mongo::logger::LogSeverity::Info());
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--verbose");
+ std::map<std::string, std::string> env_map;
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::storeServerOptions(environment, argv));
+
+ int verbosity = 1;
+ ASSERT_EQUALS(::mongo::logger::globalLogDomain()->getMinimumLogSeverity(),
+ ::mongo::logger::LogSeverity::Debug(verbosity));
+ }
+
+ TEST(Verbosity, CommandLineString) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ // Reset the log level before we test
+ ::mongo::logger::globalLogDomain()->setMinimumLoggedSeverity(
+ ::mongo::logger::LogSeverity::Info());
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--verbose");
+ argv.push_back("vvvv");
+ std::map<std::string, std::string> env_map;
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::storeServerOptions(environment, argv));
+
+ int verbosity = 4;
+ ASSERT_EQUALS(::mongo::logger::globalLogDomain()->getMinimumLogSeverity(),
+ ::mongo::logger::LogSeverity::Debug(verbosity));
+ }
+
+ TEST(Verbosity, CommandLineEmptyString) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ // Reset the log level before we test
+ ::mongo::logger::globalLogDomain()->setMinimumLoggedSeverity(
+ ::mongo::logger::LogSeverity::Info());
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--verbose");
+ argv.push_back("");
+ std::map<std::string, std::string> env_map;
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::storeServerOptions(environment, argv));
+
+ int verbosity = 0;
+ ASSERT_EQUALS(::mongo::logger::globalLogDomain()->getMinimumLogSeverity(),
+ ::mongo::logger::LogSeverity::Debug(verbosity));
+ }
+
+ TEST(Verbosity, CommandLineBadString) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ // Reset the log level before we test
+ ::mongo::logger::globalLogDomain()->setMinimumLoggedSeverity(
+ ::mongo::logger::LogSeverity::Info());
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--verbose");
+ argv.push_back("beloud");
+ std::map<std::string, std::string> env_map;
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_NOT_OK(::mongo::storeServerOptions(environment, argv));
+ }
+
+ TEST(Verbosity, INIConfigString) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ // Reset the log level before we test
+ ::mongo::logger::globalLogDomain()->setMinimumLoggedSeverity(
+ ::mongo::logger::LogSeverity::Info());
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.ini");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.ini", "verbose=vvvv");
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::storeServerOptions(environment, argv));
+
+ int verbosity = 4;
+ ASSERT_EQUALS(::mongo::logger::globalLogDomain()->getMinimumLogSeverity(),
+ ::mongo::logger::LogSeverity::Debug(verbosity));
+ }
+
+ TEST(Verbosity, INIConfigBadString) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ // Reset the log level before we test
+ ::mongo::logger::globalLogDomain()->setMinimumLoggedSeverity(
+ ::mongo::logger::LogSeverity::Info());
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.ini");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.ini", "verbose=beloud");
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_NOT_OK(::mongo::storeServerOptions(environment, argv));
+ }
+
+ TEST(Verbosity, INIConfigEmptyString) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ // Reset the log level before we test
+ ::mongo::logger::globalLogDomain()->setMinimumLoggedSeverity(
+ ::mongo::logger::LogSeverity::Info());
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.ini");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.ini", "verbose=");
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::storeServerOptions(environment, argv));
+
+ int verbosity = 0;
+ ASSERT_EQUALS(::mongo::logger::globalLogDomain()->getMinimumLogSeverity(),
+ ::mongo::logger::LogSeverity::Debug(verbosity));
+ }
+
+ TEST(Verbosity, JSONConfigString) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ // Reset the log level before we test
+ ::mongo::logger::globalLogDomain()->setMinimumLoggedSeverity(
+ ::mongo::logger::LogSeverity::Info());
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.json");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.json", "{ verbose : \"vvvv\" }");
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::storeServerOptions(environment, argv));
+
+ int verbosity = 4;
+ ASSERT_EQUALS(::mongo::logger::globalLogDomain()->getMinimumLogSeverity(),
+ ::mongo::logger::LogSeverity::Debug(verbosity));
+ }
+
+ TEST(Verbosity, JSONConfigBadString) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ // Reset the log level before we test
+ ::mongo::logger::globalLogDomain()->setMinimumLoggedSeverity(
+ ::mongo::logger::LogSeverity::Info());
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.json");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.json", "{ verbose : \"beloud\" }");
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_NOT_OK(::mongo::storeServerOptions(environment, argv));
+ }
+
+ TEST(Verbosity, JSONConfigEmptyString) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ // Reset the log level before we test
+ ::mongo::logger::globalLogDomain()->setMinimumLoggedSeverity(
+ ::mongo::logger::LogSeverity::Info());
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.json");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.json", "{ verbose : \"vvvv\", vv : true }");
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::storeServerOptions(environment, argv));
+
+ int verbosity = 4;
+ ASSERT_EQUALS(::mongo::logger::globalLogDomain()->getMinimumLogSeverity(),
+ ::mongo::logger::LogSeverity::Debug(verbosity));
+ }
+
+ TEST(Verbosity, MultipleSourcesMultipleOptions) {
+ OptionsParserTester parser;
+ moe::Environment environment;
+ moe::OptionSection options;
+
+ // Reset the log level before we test
+ ::mongo::logger::globalLogDomain()->setMinimumLoggedSeverity(
+ ::mongo::logger::LogSeverity::Info());
+
+ ASSERT_OK(::mongo::addGeneralServerOptions(&options));
+
+ std::vector<std::string> argv;
+ argv.push_back("binaryname");
+ argv.push_back("--config");
+ argv.push_back("config.json");
+ argv.push_back("--verbose");
+ argv.push_back("vvv");
+ std::map<std::string, std::string> env_map;
+
+ parser.setConfig("config.json", "{ verbose : \"vvvv\", vv : true }");
+
+ ASSERT_OK(parser.run(options, argv, env_map, &environment));
+
+ ASSERT_OK(::mongo::storeServerOptions(environment, argv));
+
+ int verbosity = 3;
+ ASSERT_EQUALS(::mongo::logger::globalLogDomain()->getMinimumLogSeverity(),
+ ::mongo::logger::LogSeverity::Debug(verbosity));
+ }
+
+} // unnamed namespace