2 * Copyright (c) 2014-2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file test/cyad/commandline.cpp
18 * @author Aleksander Zdyb <a.zdyb@samsung.com>
20 * @brief Tests for CyadCommandlineParser (errors)
25 #include <gmock/gmock.h>
26 #include <gtest/gtest.h>
28 #include <cyad/CommandlineParser/CmdlineErrors.h>
29 #include <cyad/CommandlineParser/CmdlineOpts.h>
30 #include <cyad/CommandlineParser/CyadCommand.h>
31 #include <cyad/CommandlineParser/CyadCommandlineParser.h>
33 #include "CyadCommandlineTest.h"
35 namespace Errors = Cynara::CmdlineErrors;
36 using Cynara::CmdlineOpts::CmdlineOpt;
38 #define ASSERT_ERROR_MSG(msg,rawResult) { \
39 auto result = std::dynamic_pointer_cast<Cynara::ErrorCyadCommand>(rawResult); \
40 ASSERT_NE(nullptr, result); \
41 ASSERT_TRUE(result->isError()); \
42 ASSERT_EQ(msg, result->message()); \
45 TEST_F(CyadCommandlineTest, noOption) {
46 prepare_argv({ "./cyad" });
47 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
48 ASSERT_ERROR_MSG(Errors::noOption(), parser.parseMain());
51 TEST_F(CyadCommandlineTest, unknownOption) {
52 prepare_argv({ "./cyad", "--unknown-option" });
53 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
54 ASSERT_ERROR_MSG(Errors::unknownOption(), parser.parseMain());
57 TEST_F(CyadCommandlineTest, deleteBucketNoBucket) {
58 prepare_argv({ "./cyad", "--delete-bucket" });
59 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
60 ASSERT_ERROR_MSG(Errors::noBucket(), parser.parseMain());
63 TEST_F(CyadCommandlineTest, deleteBucketUnknownOption) {
64 prepare_argv({ "./cyad", "--delete-bucket=bucket", "--unknown" });
65 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
66 ASSERT_ERROR_MSG(Errors::unknownOption(CmdlineOpt::DeleteBucket), parser.parseMain());
69 TEST_F(CyadCommandlineTest, setBucketNoBucket) {
70 prepare_argv({ "./cyad", "--set-bucket" });
71 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
72 ASSERT_ERROR_MSG(Errors::noBucket(), parser.parseMain());
75 TEST_F(CyadCommandlineTest, setBucketNoPolicy) {
76 prepare_argv({ "./cyad", "--set-bucket=bucket" });
77 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
78 ASSERT_ERROR_MSG(Cynara::CmdlineErrors::noType(), parser.parseMain());
81 TEST_F(CyadCommandlineTest, setBucketUnknownOption) {
82 prepare_argv({ "./cyad", "--set-bucket=bucket", "--unknown", "--type=42" });
83 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
84 ASSERT_ERROR_MSG(Errors::unknownOption(CmdlineOpt::SetBucket), parser.parseMain());
87 TEST_F(CyadCommandlineTest, setBucketMetadataNoPolicy) {
88 prepare_argv({ "./cyad", "--set-bucket=bucket", "--metadata=some-meta" });
89 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
90 ASSERT_ERROR_MSG(Errors::noType(), parser.parseMain());
93 TEST_F(CyadCommandlineTest, setPolicyNoOption) {
94 prepare_argv({ "./cyad", "--set-policy" });
95 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
96 ASSERT_ERROR_MSG(Errors::optionMissing(CmdlineOpt::SetPolicy), parser.parseMain());
99 TEST_F(CyadCommandlineTest, setPolicyUnknownOption) {
100 prepare_argv({ "./cyad", "--set-policy", "--unknown-option" });
101 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
102 ASSERT_ERROR_MSG(Errors::unknownOption(CmdlineOpt::SetPolicy), parser.parseMain());
105 TEST_F(CyadCommandlineTest, setPolicyArgumentMissing) {
106 prepare_argv({ "./cyad", "--set-policy", "--bucket" });
107 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
108 ASSERT_ERROR_MSG(Errors::argumentMissing(CmdlineOpt::SetPolicy), parser.parseMain());
111 TEST_F(CyadCommandlineTest, setPolicyNoPolicy) {
112 // TODO: In the future, we can identify actual options being missed
113 prepare_argv({ "./cyad", "--set-policy", "--bucket=some-bucket",
114 "--client=client", "--user=user", "--privilege=privilege" });
115 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
116 ASSERT_ERROR_MSG(Errors::optionMissing(CmdlineOpt::SetPolicy), parser.parseMain());
119 TEST_F(CyadCommandlineTest, eraseNoRecursive) {
120 prepare_argv({ "./cyad", "--erase=",
121 "--client=client", "--user=user", "--privilege=privilege" });
122 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
123 ASSERT_ERROR_MSG(Errors::optionMissing(CmdlineOpt::Erase), parser.parseMain());
126 // Error should be argument missing, but getopt acts weird
127 TEST_F(CyadCommandlineTest, listPoliciesNoBucket) {
128 prepare_argv({ "./cyad", "--list-policies",
129 "--client=client", "--user=user", "--privilege=privilege" });
130 Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
131 ASSERT_ERROR_MSG(Errors::optionMissing(CmdlineOpt::ListPolicies), parser.parseMain());