diff --git a/catalogue/CMakeLists.txt b/catalogue/CMakeLists.txt index 93d42e11242d55fda96541ca8d861a949aceed1a..ae98d1fa83106060a86832de97fb14cac1c19b2c 100644 --- a/catalogue/CMakeLists.txt +++ b/catalogue/CMakeLists.txt @@ -219,7 +219,9 @@ set (CATALOGUE_CMD_LINE_UNIT_TESTS_LIB_SRC_FILES CreateAdminHostCmdLineArgs.cpp CreateAdminHostCmdLineArgsTest.cpp CreateAdminUserCmdLineArgs.cpp - CreateAdminUserCmdLineArgsTest.cpp) + CreateAdminUserCmdLineArgsTest.cpp + CreateSchemaCmdLineArgs.cpp + CreateSchemaCmdLineArgsTest.cpp) add_library (ctacataloguecmdlineunittests SHARED ${CATALOGUE_CMD_LINE_UNIT_TESTS_LIB_SRC_FILES}) diff --git a/catalogue/CreateSchemaCmdLineArgsTest.cpp b/catalogue/CreateSchemaCmdLineArgsTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..137ea087faa6aa43afbda3a4a1dd063642c8f1e8 --- /dev/null +++ b/catalogue/CreateSchemaCmdLineArgsTest.cpp @@ -0,0 +1,121 @@ +/* + * 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/CreateSchemaCmdLineArgs.hpp" + +#include <gtest/gtest.h> +#include <list> + +namespace unitTests { + +class cta_catalogue_CreateSchemaCmdLineArgsTest : 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_CreateSchemaCmdLineArgsTest, 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-create"); + args->argv[1] = dupString("-h"); + args->argv[2] = NULL; + + CreateSchemaCmdLineArgs cmdLine(args->argc, args->argv); + + ASSERT_TRUE(cmdLine.help); + ASSERT_TRUE(cmdLine.dbConfigPath.empty()); +} + +TEST_F(cta_catalogue_CreateSchemaCmdLineArgsTest, 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-create"); + args->argv[1] = dupString("--help"); + args->argv[2] = NULL; + + CreateSchemaCmdLineArgs cmdLine(args->argc, args->argv); + + ASSERT_TRUE(cmdLine.help); + ASSERT_TRUE(cmdLine.dbConfigPath.empty()); +} + +TEST_F(cta_catalogue_CreateSchemaCmdLineArgsTest, 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-create"); + args->argv[1] = dupString("dbConfigPath"); + args->argv[2] = NULL; + + CreateSchemaCmdLineArgs cmdLine(args->argc, args->argv); + + ASSERT_FALSE(cmdLine.help); + ASSERT_EQ(std::string("dbConfigPath"), cmdLine.dbConfigPath); +} + +} // namespace unitTests