From 4537417423bfa6f63dff2dd6254f7570c804d23d Mon Sep 17 00:00:00 2001
From: Pawel Wieczorek
Date: Tue, 17 Feb 2015 10:28:02 +0100
Subject: [PATCH] Add tests for version reporting
This patch adds tests for calling main Cynara executable with additional
options. Following call scenarios are checked (both long and short
options):
* print version,
* print help,
* unknown option.
Change-Id: Ibab5d7a081fd1da8b98a59c9a242fd17725cd400
---
test/CMakeLists.txt | 2 +
test/service/main/CynaraCommandlineTest.h | 31 +++++++
test/service/main/cmdlineparser.cpp | 135 ++++++++++++++++++++++++++++++
3 files changed, 168 insertions(+)
create mode 100644 test/service/main/CynaraCommandlineTest.h
create mode 100644 test/service/main/cmdlineparser.cpp
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 119e2e7..8032ee3 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -59,6 +59,7 @@ SET(CYNARA_SOURCES_FOR_TESTS
${CYNARA_SRC}/cyad/PolicyTypeTranslator.cpp
${CYNARA_SRC}/helpers/creds-commons/CredsCommonsInner.cpp
${CYNARA_SRC}/helpers/creds-commons/creds-commons.cpp
+ ${CYNARA_SRC}/service/main/CmdlineParser.cpp
${CYNARA_SRC}/storage/BucketDeserializer.cpp
${CYNARA_SRC}/storage/InMemoryStorageBackend.cpp
${CYNARA_SRC}/storage/Integrity.cpp
@@ -86,6 +87,7 @@ SET(CYNARA_TESTS_SOURCES
cyad/policy_collection.cpp
cyad/policy_parser.cpp
helpers.cpp
+ service/main/cmdlineparser.cpp
storage/performance/bucket.cpp
storage/storage/policies.cpp
storage/storage/check.cpp
diff --git a/test/service/main/CynaraCommandlineTest.h b/test/service/main/CynaraCommandlineTest.h
new file mode 100644
index 0000000..eaf208d
--- /dev/null
+++ b/test/service/main/CynaraCommandlineTest.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @file test/service/main/CynaraCommandlineTest.h
+ * @author Pawel Wieczorek
+ * @version 1.0
+ * @brief Fixture for CmdlineParser tests
+ */
+
+#ifndef TEST_SERVICE_MAIN_CYNARACOMMANDLINETEST_H_
+#define TEST_SERVICE_MAIN_CYNARACOMMANDLINETEST_H_
+
+#include
+
+class CynaraCommandlineTest : public QuietCommandlineTest {
+};
+
+#endif /* TEST_SERVICE_MAIN_CYNARACOMMANDLINETEST_H_ */
diff --git a/test/service/main/cmdlineparser.cpp b/test/service/main/cmdlineparser.cpp
new file mode 100644
index 0000000..3f6a43b
--- /dev/null
+++ b/test/service/main/cmdlineparser.cpp
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+/**
+ * @file test/service/main/cmdlineparser.cpp
+ * @author Pawel Wieczorek
+ * @version 1.0
+ * @brief Tests of CmdlineParser
+ */
+
+#include
+
+#include
+
+#include "CynaraCommandlineTest.h"
+
+namespace {
+
+const std::string execName("./cynara");
+const std::string helpMessage("Usage: " + execName + " [OPTIONS]\n\n"
+ " -V, --version print version of ./cynara and exit\n"
+ " -h, --help print this help message and exit\n");
+
+} // namespace
+
+namespace Parser = Cynara::CmdlineParser;
+
+/**
+ * @brief Verify if passing "help" option to commandline handler returns help message
+ * @test Expected result:
+ * - call handler indicates success
+ * - help message in output stream
+ * - empty error stream
+ */
+TEST_F(CynaraCommandlineTest, help) {
+ std::string err;
+ std::string out;
+
+ for (const auto &opt : { "-h", "--help" }) {
+ clearOutput();
+ prepare_argv({ execName, opt });
+
+ SCOPED_TRACE(opt);
+ const auto handlingSuccess = Parser::handleCmdlineOptions(this->argc(), this->argv());
+ getOutput(out, err);
+
+ ASSERT_TRUE(handlingSuccess);
+ ASSERT_EQ(helpMessage, out);
+ ASSERT_TRUE(err.empty());
+ }
+}
+
+/**
+ * @brief Verify if passing "version" option to commandline handler returns version message
+ * @test Expected result:
+ * - call handler indicates success
+ * - version message in output stream
+ * - empty error stream
+ */
+TEST_F(CynaraCommandlineTest, version) {
+ std::string err;
+ std::string out;
+
+ for (const auto &opt : { "-V", "--version" }) {
+ clearOutput();
+ prepare_argv({ execName, opt });
+
+ SCOPED_TRACE(opt);
+ const auto handlingSuccess = Parser::handleCmdlineOptions(this->argc(), this->argv());
+ getOutput(out, err);
+
+ ASSERT_TRUE(handlingSuccess);
+ ASSERT_EQ(std::string(CYNARA_VERSION) + "\n", out);
+ ASSERT_TRUE(err.empty());
+ }
+}
+
+/**
+ * @brief Verify if passing unknown option to commandline handler returns error message
+ * @test Expected result:
+ * - call handler indicates failure
+ * - help message in output stream
+ * - error message in error stream
+ */
+TEST_F(CynaraCommandlineTest, unknownOption) {
+ std::string err;
+ std::string out;
+
+ for (const auto &badOpt : { "-b", "--badOption" }) {
+ clearOutput();
+ prepare_argv({ execName, badOpt });
+
+ SCOPED_TRACE(badOpt);
+ const auto handlingSuccess = Parser::handleCmdlineOptions(this->argc(), this->argv());
+ getOutput(out, err);
+
+ ASSERT_FALSE(handlingSuccess);
+ ASSERT_EQ(helpMessage, out);
+ ASSERT_EQ("Unknown option\n", err);
+ }
+}
+
+/**
+ * @brief Verify if passing no options to commandline handler returns error message
+ * @test Expected result:
+ * - call handler indicates failure
+ * - help message in output stream
+ * - error message in error stream
+ */
+TEST_F(CynaraCommandlineTest, noOption) {
+ std::string err;
+ std::string out;
+
+ clearOutput();
+ prepare_argv({ execName });
+
+ const auto handlingSuccess = Parser::handleCmdlineOptions(this->argc(), this->argv());
+ getOutput(out, err);
+
+ ASSERT_FALSE(handlingSuccess);
+ ASSERT_EQ(helpMessage, out);
+ ASSERT_EQ("No options given\n", err);
+}
--
2.7.4