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) );