Introduce 'default' method type for credential helpers
[platform/core/security/cynara.git] / test / cyad / commandline_errors.cpp
1 /*
2  * Copyright (c) 2014-2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 /**
17  * @file        test/cyad/commandline.cpp
18  * @author      Aleksander Zdyb <a.zdyb@samsung.com>
19  * @version     1.0
20  * @brief       Tests for CyadCommandlineParser (errors)
21  */
22
23 #include <memory>
24
25 #include <gmock/gmock.h>
26 #include <gtest/gtest.h>
27
28 #include <cyad/CommandlineParser/CmdlineErrors.h>
29 #include <cyad/CommandlineParser/CmdlineOpts.h>
30 #include <cyad/CommandlineParser/CyadCommand.h>
31 #include <cyad/CommandlineParser/CyadCommandlineParser.h>
32
33 #include "CyadCommandlineTest.h"
34
35 namespace Errors = Cynara::CmdlineErrors;
36 using Cynara::CmdlineOpts::CmdlineOpt;
37
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()); \
43 }
44
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());
49 }
50
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());
55 }
56
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());
61 }
62
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());
67 }
68
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());
73 }
74
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());
79 }
80
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());
85 }
86
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());
91 }
92
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());
97 }
98
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());
103 }
104
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());
109 }
110
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());
117 }
118
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());
124 }
125
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());
132 }