You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2011/06/05 07:49:59 UTC
svn commit: r1131910 - in /incubator/mesos/trunk/src: configurator.cpp
configurator.hpp tests/test_configurator.cpp
Author: benh
Date: Sun Jun 5 05:49:59 2011
New Revision: 1131910
URL: http://svn.apache.org/viewvc?rev=1131910&view=rev
Log:
added error checking for the command line parser, and updated the tests
Modified:
incubator/mesos/trunk/src/configurator.cpp
incubator/mesos/trunk/src/configurator.hpp
incubator/mesos/trunk/src/tests/test_configurator.cpp
Modified: incubator/mesos/trunk/src/configurator.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/configurator.cpp?rev=1131910&r1=1131909&r2=1131910&view=diff
==============================================================================
--- incubator/mesos/trunk/src/configurator.cpp (original)
+++ incubator/mesos/trunk/src/configurator.cpp Sun Jun 5 05:49:59 2011
@@ -144,38 +144,52 @@ void Configurator::loadCommandLine(int a
key = args[i].substr(5);
val = "0";
set = true;
+ isParamConsistent(key, true);
} else if (eq == string::npos) { // handle --blah
key = args[i].substr(2);
val = "1";
set = true;
+ isParamConsistent(key, true);
} else { // handle --blah=25
key = args[i].substr(2, eq-2);
val = args[i].substr(eq+1);
set = true;
+ isParamConsistent(key, false);
}
} else if (args[i].find_first_of("-", 0) == 0 &&
args[i].size() > 1) {
// handle "-" case
- if (args[i].find("-no-",0) == 0 && args[i].size() > 4) { // handle -no-b
- key = getLongName(args[i][4]);
- val = "0";
- } else if (args[i].size() > 1) { // shared code for -b and -b 25
- key = getLongName(args[i][1]);
- val = "1";
+ char shortName = '\0';
+
+ if (args[i].find("-no-",0) == 0 && args[i].size() == 5)
+ shortName = args[i][4];
+ else if (args[i].size() == 2)
+ shortName = args[i][1];
+
+ if (shortName == '\0' || getLongName(shortName) == "") {
+ string message = "Short option " + args[i] + " unrecognized ";
+ throw ConfigurationException(message.c_str());
}
- if (key == "")
- continue; // couldn't extract long name from short name
- if (options[key].validator->isBool())
+ key = getLongName(shortName);
+
+ if (args[i].find("-no-",0) == 0) { // handle -no-b
+ val = "0";
set = true;
- else if (i+1 < args.size()) { // handle -b 25
+ isParamConsistent(key, true);
+ } else if (options[key].validator->isBool() ||
+ i+1 == args.size() ) { // handle -b
+ val = "1";
+ set = true;
+ isParamConsistent(key, true);
+ } else { // handle -b 25
val = args[i+1];
set = true;
i++; // we've consumed next parameter as a "value"-parameter
}
-
+
}
if (set && (overwrite || !params.contains(key))) {
std::transform(key.begin(), key.end(), key.begin(), ::tolower);
Modified: incubator/mesos/trunk/src/configurator.hpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/configurator.hpp?rev=1131910&r1=1131909&r2=1131910&view=diff
==============================================================================
--- incubator/mesos/trunk/src/configurator.hpp (original)
+++ incubator/mesos/trunk/src/configurator.hpp Sun Jun 5 05:49:59 2011
@@ -315,6 +315,20 @@ private:
* @return first long name option matching the short name, "" if none found.
*/
string getLongName(char shortName) const;
+
+ void isParamConsistent(const string& key, bool gotBool)
+ throw(ConfigurationException)
+ {
+ if (options.find(key) != options.end() &&
+ options[key].validator->isBool() != gotBool) {
+ string message = "Option " + key + " should ";
+ if (gotBool)
+ message += "not ";
+ message += "be a boolean.";
+
+ throw ConfigurationException(message.c_str());
+ }
+ }
};
} } // end mesos :: internal namespace
Modified: incubator/mesos/trunk/src/tests/test_configurator.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/tests/test_configurator.cpp?rev=1131910&r1=1131909&r2=1131910&view=diff
==============================================================================
--- incubator/mesos/trunk/src/tests/test_configurator.cpp (original)
+++ incubator/mesos/trunk/src/tests/test_configurator.cpp Sun Jun 5 05:49:59 2011
@@ -41,18 +41,18 @@ TEST(ConfiguratorTest, DefaultOptions)
Configurator conf;
- EXPECT_NO_THROW( {
- conf.addOption<int>("test1", "Testing option", 500);
- conf.addOption<short>("test2", "Another tester", 0);
- conf.addOption<long>("test3", "Tests the default", 2010);
- conf.addOption<string>("test4", "Option without default");
- conf.addOption<string>("test5", "Option with a default", "arb");
- conf.addOption<bool>("test6", "Toggler...", false);
- conf.addOption<bool>("test7", "Toggler...", true);
- conf.load(ARGC, argv, false);
- } );
+
+ EXPECT_NO_THROW(conf.addOption<int>("test1", "Testing option", 500));
+ EXPECT_NO_THROW(conf.addOption<bool>("test2", "Another tester", 0));
+ EXPECT_NO_THROW(conf.addOption<long>("test3", "Tests the default", 2010));
+ EXPECT_NO_THROW(conf.addOption<string>("test4", "Option without default"));
+ EXPECT_NO_THROW(conf.addOption<string>("test5", "Option with a default",
+ "arb"));
+ EXPECT_NO_THROW(conf.addOption<bool>("test6", "Toggler...", false));
+ EXPECT_NO_THROW(conf.addOption<bool>("test7", "Toggler...", true));
+ EXPECT_NO_THROW(conf.load(ARGC, argv, false));
- conf.addOption<int>("excp", "Exception tester.", 50);
+ EXPECT_NO_THROW(conf.addOption<int>("excp", "Exception tester.", 50));
EXPECT_THROW(conf.validate(), ConfigurationException);
conf.getParams()["excp"] = "27";
EXPECT_NO_THROW(conf.validate());
@@ -86,14 +86,12 @@ TEST(ConfiguratorTest, CommandLine)
argv[11] = (char*) "-no-b";
Configurator conf;
- EXPECT_NO_THROW( {
- conf.addOption<int>("negative", 'N', "some val", -30);
- conf.addOption<string>("test1", "textual value", "text2");
- conf.addOption<bool>("bool1", "toggler", false);
- conf.addOption<bool>("bool2", 'z', "toggler", true);
- conf.addOption<bool>("bool3", 'a', "toggler", false);
- conf.addOption<bool>("bool4", 'b', "toggler", true);
- } );
+ EXPECT_NO_THROW(conf.addOption<int>("negative", 'N', "some val", -30));
+ EXPECT_NO_THROW(conf.addOption<string>("test1", "textual value", "text2"));
+ EXPECT_NO_THROW(conf.addOption<bool>("bool1", "toggler", false));
+ EXPECT_NO_THROW(conf.addOption<bool>("bool2", 'z', "toggler", true));
+ EXPECT_NO_THROW(conf.addOption<bool>("bool3", 'a', "toggler", false));
+ EXPECT_NO_THROW(conf.addOption<bool>("bool4", 'b', "toggler", true));
EXPECT_NO_THROW( conf.load(ARGC, argv, false) );