-
Steven Murray authoredSteven Murray authored
DropSchemaCmdLineArgsTest.cpp 3.18 KiB
/*
* The CERN Tape Archive(CTA) project
* Copyright(C) 2015 CERN
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
*(at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "common/exception/Exception.hpp"
#include "catalogue/DropSchemaCmdLineArgs.hpp"
#include <gtest/gtest.h>
#include <list>
namespace unitTests {
class cta_catalogue_DropSchemaCmdLineArgsTest : public ::testing::Test {
protected:
struct Argcv {
int argc;
char **argv;
Argcv(): argc(0), argv(NULL) {
}
};
typedef std::list<Argcv*> ArgcvList;
ArgcvList m_argsList;
/**
* Creates a duplicate string using the new operator.
*/
char *dupString(const char *str) {
const size_t len = strlen(str);
char *duplicate = new char[len+1];
strncpy(duplicate, str, len);
duplicate[len] = '\0';
return duplicate;
}
virtual void SetUp() {
// Allow getopt_long to be called again
optind = 0;
}
virtual void TearDown() {
// Allow getopt_long to be called again
optind = 0;
for(ArgcvList::const_iterator itor = m_argsList.begin();
itor != m_argsList.end(); itor++) {
for(int i=0; i < (*itor)->argc; i++) {
delete[] (*itor)->argv[i];
}
delete[] (*itor)->argv;
delete *itor;
}
}
};
TEST_F(cta_catalogue_DropSchemaCmdLineArgsTest, help_short) {
using namespace cta::catalogue;
Argcv *args = new Argcv();
m_argsList.push_back(args);
args->argc = 2;
args->argv = new char *[3];
args->argv[0] = dupString("cta-catalogue-schema-drop");
args->argv[1] = dupString("-h");
args->argv[2] = NULL;
DropSchemaCmdLineArgs cmdLine(args->argc, args->argv);
ASSERT_TRUE(cmdLine.help);
ASSERT_TRUE(cmdLine.dbConfigPath.empty());
}
TEST_F(cta_catalogue_DropSchemaCmdLineArgsTest, help_long) {
using namespace cta::catalogue;
Argcv *args = new Argcv();
m_argsList.push_back(args);
args->argc = 2;
args->argv = new char *[3];
args->argv[0] = dupString("cta-catalogue-schema-drop");
args->argv[1] = dupString("--help");
args->argv[2] = NULL;
DropSchemaCmdLineArgs cmdLine(args->argc, args->argv);
ASSERT_TRUE(cmdLine.help);
ASSERT_TRUE(cmdLine.dbConfigPath.empty());
}
TEST_F(cta_catalogue_DropSchemaCmdLineArgsTest, dbConfigPath) {
using namespace cta::catalogue;
Argcv *args = new Argcv();
m_argsList.push_back(args);
args->argc = 2;
args->argv = new char *[3];
args->argv[0] = dupString("cta-catalogue-schema-drop");
args->argv[1] = dupString("dbConfigPath");
args->argv[2] = NULL;
DropSchemaCmdLineArgs cmdLine(args->argc, args->argv);
ASSERT_FALSE(cmdLine.help);
ASSERT_EQ(std::string("dbConfigPath"), cmdLine.dbConfigPath);
}
} // namespace unitTests