Browse Source

[master] Use CommandOptionsHelper for CommandOptions unit tests.

This fixes memory leak reported by Valgrind. Dicussed with Jelte on jabber.
Marcin Siodelski 12 years ago
parent
commit
8ad1accced
1 changed files with 2 additions and 47 deletions
  1. 2 47
      tests/tools/perfdhcp/tests/command_options_unittest.cc

+ 2 - 47
tests/tools/perfdhcp/tests/command_options_unittest.cc

@@ -21,7 +21,7 @@
 #include <dhcp/iface_mgr.h>
 #include <exceptions/exceptions.h>
 
-#include "../command_options.h"
+#include "command_options_helper.h"
 
 using namespace std;
 using namespace isc;
@@ -48,16 +48,7 @@ protected:
     /// \param cmdline Command line to parse
     /// \throws std::bad allocation if tokenization failed
     void process(const std::string& cmdline) {
-        CommandOptions& opt = CommandOptions::instance();
-        int argc = 0;
-        char** argv = tokenizeString(cmdline, &argc);
-        opt.reset();
-        opt.parse(argc, argv);
-        for(int i = 0; i < argc; ++i) {
-            free(argv[i]);
-            argv[i] = NULL;
-        }
-        free(argv);
+        CommandOptionsHelper::process(cmdline);
     }
 
     /// \brief Check default initialized values
@@ -143,42 +134,6 @@ protected:
         EXPECT_EQ("", opt.getWrapped());
         EXPECT_EQ("192.168.0.1", opt.getServerName());
     }
-
-    /// \brief Split string to array of C-strings
-    ///
-    /// \param s String to split (tokenize)
-    /// \param num Number of tokens returned
-    /// \return array of C-strings (tokens)
-    char** tokenizeString(const std::string& text_to_split, int* num) const {
-        char** results = NULL;
-        // Tokenization with std streams
-        std::stringstream text_stream(text_to_split);
-        // Iterators to be used for tokenization
-        std::istream_iterator<std::string> text_iterator(text_stream);
-        std::istream_iterator<std::string> text_end;
-        // Tokenize string (space is a separator) using begin and end iteratos
-        std::vector<std::string> tokens(text_iterator, text_end);
-
-        if (tokens.size() > 0) {
-            // Allocate array of C-strings where we will store tokens
-            results = static_cast<char**>(malloc(tokens.size() * sizeof(char*)));
-            if (results == NULL) {
-                throw std::bad_alloc();
-            }
-            // Store tokens in C-strings array
-            for (int i = 0; i < tokens.size(); ++i) {
-                char* cs = static_cast<char*>(malloc(tokens[i].length() + 1));
-                strcpy(cs, tokens[i].c_str());
-                results[i] = cs;
-            }
-            // Return number of tokens to calling function
-            if (num != NULL) {
-                *num = tokens.size();
-            }
-        }
-        return results;
-    }
-
 };
 
 TEST_F(CommandOptionsTest, Defaults) {