/* 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/tools/bsondump_options.h" #include "mongo/bson/util/builder.h" #include "mongo/unittest/unittest.h" #include "mongo/util/options_parser/options_parser.h" #include "mongo/util/options_parser/startup_options.h" namespace { namespace moe = ::mongo::optionenvironment; TEST(Registration, RegisterAllOptions) { moe::OptionSection options; ASSERT_OK(::mongo::addBSONDumpOptions(&options)); std::vector options_vector; ASSERT_OK(options.getAllOptions(&options_vector)); for(std::vector::const_iterator iterator = options_vector.begin(); iterator != options_vector.end(); iterator++) { if (iterator->_dottedName == "help") { ASSERT_EQUALS(iterator->_singleName, "help"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "produce help message"); ASSERT_EQUALS(iterator->_isVisible, true); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "verbose") { ASSERT_EQUALS(iterator->_singleName, "verbose,v"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "be more verbose (include multiple times for more verbosity e.g. -vvvvv)"); ASSERT_EQUALS(iterator->_isVisible, true); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "quiet") { ASSERT_EQUALS(iterator->_singleName, "quiet"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "silence all non error diagnostic messages"); ASSERT_EQUALS(iterator->_isVisible, true); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "version") { ASSERT_EQUALS(iterator->_singleName, "version"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "print the program's version and exit"); ASSERT_EQUALS(iterator->_isVisible, true); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "vv") { ASSERT_EQUALS(iterator->_singleName, "vv"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "verbose"); ASSERT_EQUALS(iterator->_isVisible, false); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "vvv") { ASSERT_EQUALS(iterator->_singleName, "vvv"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "verbose"); ASSERT_EQUALS(iterator->_isVisible, false); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "vvvv") { ASSERT_EQUALS(iterator->_singleName, "vvvv"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "verbose"); ASSERT_EQUALS(iterator->_isVisible, false); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "vvvvv") { ASSERT_EQUALS(iterator->_singleName, "vvvvv"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "verbose"); ASSERT_EQUALS(iterator->_isVisible, false); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "vvvvvv") { ASSERT_EQUALS(iterator->_singleName, "vvvvvv"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "verbose"); ASSERT_EQUALS(iterator->_isVisible, false); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "vvvvvvv") { ASSERT_EQUALS(iterator->_singleName, "vvvvvvv"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "verbose"); ASSERT_EQUALS(iterator->_isVisible, false); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "vvvvvvvv") { ASSERT_EQUALS(iterator->_singleName, "vvvvvvvv"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "verbose"); ASSERT_EQUALS(iterator->_isVisible, false); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "vvvvvvvvv") { ASSERT_EQUALS(iterator->_singleName, "vvvvvvvvv"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "verbose"); ASSERT_EQUALS(iterator->_isVisible, false); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "vvvvvvvvvv") { ASSERT_EQUALS(iterator->_singleName, "vvvvvvvvvv"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "verbose"); ASSERT_EQUALS(iterator->_isVisible, false); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "objcheck") { ASSERT_EQUALS(iterator->_singleName, "objcheck"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "validate object before inserting (default)"); ASSERT_EQUALS(iterator->_isVisible, true); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "noobjcheck") { ASSERT_EQUALS(iterator->_singleName, "noobjcheck"); ASSERT_EQUALS(iterator->_type, moe::Switch); ASSERT_EQUALS(iterator->_description, "don't validate object before inserting"); ASSERT_EQUALS(iterator->_isVisible, true); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "filter") { ASSERT_EQUALS(iterator->_singleName, "filter"); ASSERT_EQUALS(iterator->_type, moe::String); ASSERT_EQUALS(iterator->_description, "filter to apply before inserting"); ASSERT_EQUALS(iterator->_isVisible, true); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "type") { ASSERT_EQUALS(iterator->_singleName, "type"); ASSERT_EQUALS(iterator->_type, moe::String); ASSERT_EQUALS(iterator->_description, "type of output: json,debug"); ASSERT_EQUALS(iterator->_isVisible, true); moe::Value defaultVal(std::string("json")); ASSERT_TRUE(iterator->_default.equal(defaultVal)); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceAll); ASSERT_EQUALS(iterator->_positionalStart, -1); ASSERT_EQUALS(iterator->_positionalEnd, -1); } else if (iterator->_dottedName == "file") { ASSERT_EQUALS(iterator->_singleName, "file"); ASSERT_EQUALS(iterator->_type, moe::String); ASSERT_EQUALS(iterator->_description, "path to BSON file to dump"); ASSERT_EQUALS(iterator->_isVisible, false); ASSERT_TRUE(iterator->_default.isEmpty()); ASSERT_TRUE(iterator->_implicit.isEmpty()); ASSERT_EQUALS(iterator->_isComposing, false); ASSERT_EQUALS(iterator->_sources, moe::SourceCommandLine); ASSERT_EQUALS(iterator->_positionalStart, 1); ASSERT_EQUALS(iterator->_positionalEnd, 1); } else { ::mongo::StringBuilder sb; sb << "Found extra option: " << iterator->_dottedName << " which we did not register"; FAIL(sb.str()); } } } } // namespace