PageRenderTime 26ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/test/cyad/commandline_short.cpp

https://gitlab.com/admin-github-cloud/cynara
C++ | 289 lines | 216 code | 52 blank | 21 comment | 0 complexity | e57c2b93b61ed700f40b50f19873e2d2 MD5 | raw file
  1. /*
  2. * Copyright (c) 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_short.cpp
  18. * @author Aleksander Zdyb <a.zdyb@samsung.com>
  19. * @version 1.0
  20. * @brief Tests for CyadCommandlineParser (short opts)
  21. */
  22. #include <memory>
  23. #include <gmock/gmock.h>
  24. #include <gtest/gtest.h>
  25. #include <cynara-admin-types.h>
  26. #include <common/types/PolicyKey.h>
  27. #include <cyad/CommandlineParser/CyadCommand.h>
  28. #include <cyad/CommandlineParser/CyadCommandlineParser.h>
  29. #include <cyad/CommandlineParser/HumanReadableParser.h>
  30. #include "CyadCommandlineTest.h"
  31. TEST_F(CyadCommandlineTest, help_short) {
  32. prepare_argv({ "./cyad", "-h" });
  33. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  34. auto result = std::dynamic_pointer_cast<Cynara::HelpCyadCommand>(parser.parseMain());
  35. ASSERT_NE(nullptr, result);
  36. }
  37. TEST_F(CyadCommandlineTest, deleteBucket_short) {
  38. prepare_argv({ "./cyad", "-d", "bucket" });
  39. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  40. auto result = std::dynamic_pointer_cast<Cynara::DeleteBucketCyadCommand>(parser.parseMain());
  41. ASSERT_NE(nullptr, result);
  42. ASSERT_EQ("bucket", result->bucketId());
  43. }
  44. TEST_F(CyadCommandlineTest, setBucket_short) {
  45. prepare_argv({ "./cyad", "-b", "bucket", "-t", "42" });
  46. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  47. auto result = std::dynamic_pointer_cast<Cynara::SetBucketCyadCommand>(parser.parseMain());
  48. ASSERT_NE(nullptr, result);
  49. ASSERT_EQ("bucket", result->bucketId());
  50. ASSERT_EQ("42", result->policyResult().policyType());
  51. ASSERT_TRUE(result->policyResult().metadata().empty());
  52. }
  53. TEST_F(CyadCommandlineTest, setBucketWithMetadata_short) {
  54. const std::string ultimateAnswer = "Answer to The Ultimate Question of Life,"
  55. " the Universe, and Everything";
  56. prepare_argv({ "./cyad", "-b", "adams", "-t", "42", "-m", ultimateAnswer });
  57. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  58. auto result = std::dynamic_pointer_cast<Cynara::SetBucketCyadCommand>(parser.parseMain());
  59. ASSERT_NE(nullptr, result);
  60. ASSERT_EQ("adams", result->bucketId());
  61. ASSERT_EQ("42", result->policyResult().policyType());
  62. ASSERT_EQ(ultimateAnswer, result->policyResult().metadata());
  63. }
  64. TEST_F(CyadCommandlineTest, setPolicy_short) {
  65. prepare_argv({ "./cyad", "-s", "-k", "some-bucket",
  66. "-c", "client", "-u", "user", "-p", "privilege",
  67. "-t", "42" });
  68. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  69. auto result = std::dynamic_pointer_cast<Cynara::SetPolicyCyadCommand>(parser.parseMain());
  70. ASSERT_NE(nullptr, result);
  71. ASSERT_EQ("some-bucket", result->bucketId());
  72. ASSERT_EQ(Cynara::PolicyKey("client", "user", "privilege"), result->policyKey());
  73. ASSERT_EQ("42", result->policyResult().policyType());
  74. ASSERT_TRUE(result->policyResult().metadata().empty());
  75. }
  76. TEST_F(CyadCommandlineTest, setPolicyWithMetadata_short) {
  77. prepare_argv({ "./cyad", "-s", "-k", "some-bucket",
  78. "-c", "client", "-u", "user", "-p", "privilege",
  79. "-t", "42", "-m", "some-metadata" });
  80. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  81. auto result = std::dynamic_pointer_cast<Cynara::SetPolicyCyadCommand>(parser.parseMain());
  82. ASSERT_NE(nullptr, result);
  83. ASSERT_EQ("some-bucket", result->bucketId());
  84. ASSERT_EQ(Cynara::PolicyKey("client", "user", "privilege"), result->policyKey());
  85. ASSERT_EQ("42", result->policyResult().policyType());
  86. ASSERT_EQ("some-metadata", result->policyResult().metadata());
  87. }
  88. TEST_F(CyadCommandlineTest, setPolicyInDefaultBucket_short) {
  89. prepare_argv({ "./cyad", "-s", "-k", "",
  90. "-c", "client", "-u", "user", "-p", "privilege",
  91. "-t", "ALLOW", "-m", "some-metadata" });
  92. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  93. auto result = std::dynamic_pointer_cast<Cynara::SetPolicyCyadCommand>(parser.parseMain());
  94. ASSERT_NE(nullptr, result);
  95. ASSERT_EQ("", result->bucketId());
  96. ASSERT_EQ(Cynara::PolicyKey("client", "user", "privilege"), result->policyKey());
  97. ASSERT_EQ("ALLOW", result->policyResult().policyType());
  98. ASSERT_EQ("some-metadata", result->policyResult().metadata());
  99. }
  100. TEST_F(CyadCommandlineTest, setPolicyInDefaultBucketNoOption_short) {
  101. prepare_argv({ "./cyad", "-s",
  102. "-c", "client", "-u", "user", "-p", "privilege",
  103. "-t", "ALLOW", "-m", "some-metadata" });
  104. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  105. auto result = std::dynamic_pointer_cast<Cynara::SetPolicyCyadCommand>(parser.parseMain());
  106. ASSERT_NE(nullptr, result);
  107. ASSERT_EQ("", result->bucketId());
  108. ASSERT_EQ(Cynara::PolicyKey("client", "user", "privilege"), result->policyKey());
  109. ASSERT_EQ("ALLOW", result->policyResult().policyType());
  110. ASSERT_EQ("some-metadata", result->policyResult().metadata());
  111. }
  112. TEST_F(CyadCommandlineTest, parsePolicyTypeBase10_short) {
  113. auto parsePolicyType = [] (const char *rawPolicy) -> Cynara::PolicyType {
  114. return Cynara::HumanReadableParser::policyType(rawPolicy);
  115. };
  116. ASSERT_EQ(CYNARA_ADMIN_DENY, parsePolicyType("0"));
  117. ASSERT_EQ(CYNARA_ADMIN_NONE, parsePolicyType("1"));
  118. ASSERT_EQ(CYNARA_ADMIN_BUCKET, parsePolicyType("65534"));
  119. ASSERT_EQ(CYNARA_ADMIN_ALLOW, parsePolicyType("65535"));
  120. }
  121. TEST_F(CyadCommandlineTest, parsePolicyTypeBase16_short) {
  122. auto parsePolicyType = [] (const char *rawPolicy) -> Cynara::PolicyType {
  123. return Cynara::HumanReadableParser::policyType(rawPolicy);
  124. };
  125. ASSERT_EQ(CYNARA_ADMIN_DENY, parsePolicyType("0x0"));
  126. ASSERT_EQ(CYNARA_ADMIN_NONE, parsePolicyType("0x1"));
  127. ASSERT_EQ(CYNARA_ADMIN_BUCKET, parsePolicyType("0xFFFE"));
  128. ASSERT_EQ(CYNARA_ADMIN_ALLOW, parsePolicyType("0xFFFF"));
  129. }
  130. TEST_F(CyadCommandlineTest, parsePolicyTypeHuman_short) {
  131. auto parsePolicyType = [] (const char *rawPolicy) -> Cynara::PolicyType {
  132. return Cynara::HumanReadableParser::policyType(rawPolicy);
  133. };
  134. ASSERT_EQ(CYNARA_ADMIN_DENY, parsePolicyType("DENY"));
  135. ASSERT_EQ(CYNARA_ADMIN_NONE, parsePolicyType("NONE"));
  136. ASSERT_EQ(CYNARA_ADMIN_BUCKET, parsePolicyType("BUCKET"));
  137. ASSERT_EQ(CYNARA_ADMIN_ALLOW, parsePolicyType("ALLOW"));
  138. }
  139. TEST_F(CyadCommandlineTest, setPoliciesBulkFilename_short) {
  140. prepare_argv({ "./cyad", "-s", "-f", "/tmp/input_file" });
  141. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  142. auto result = std::dynamic_pointer_cast<Cynara::SetPolicyBulkCyadCommand>(parser.parseMain());
  143. ASSERT_NE(nullptr, result);
  144. ASSERT_EQ("/tmp/input_file", result->filename());
  145. }
  146. TEST_F(CyadCommandlineTest, setPoliciesBulkStdin_short) {
  147. prepare_argv({ "./cyad", "-s", "-f", "-" });
  148. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  149. auto result = std::dynamic_pointer_cast<Cynara::SetPolicyBulkCyadCommand>(parser.parseMain());
  150. ASSERT_NE(nullptr, result);
  151. ASSERT_EQ("-", result->filename());
  152. }
  153. TEST_F(CyadCommandlineTest, eraseRecursive_short) {
  154. prepare_argv({ "./cyad", "-e", "bucket", "-r", "yes",
  155. "-c", "client", "-u", "user", "-p", "privilege" });
  156. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  157. auto result = std::dynamic_pointer_cast<Cynara::EraseCyadCommand>(parser.parseMain());
  158. ASSERT_NE(nullptr, result);
  159. ASSERT_EQ("bucket", result->bucketId());
  160. ASSERT_TRUE(result->recursive());
  161. ASSERT_EQ(Cynara::PolicyKey("client", "user", "privilege"), result->policyKey());
  162. }
  163. TEST_F(CyadCommandlineTest, eraseNonrecursive_short) {
  164. prepare_argv({ "./cyad", "-e", "bucket", "-r", "no",
  165. "-c", "client", "-u", "user", "-p", "privilege" });
  166. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  167. auto result = std::dynamic_pointer_cast<Cynara::EraseCyadCommand>(parser.parseMain());
  168. ASSERT_NE(nullptr, result);
  169. ASSERT_EQ("bucket", result->bucketId());
  170. ASSERT_FALSE(result->recursive());
  171. ASSERT_EQ(Cynara::PolicyKey("client", "user", "privilege"), result->policyKey());
  172. }
  173. TEST_F(CyadCommandlineTest, checkDefaultRecursive_short) {
  174. prepare_argv({ "./cyad", "-a", "-r", "no",
  175. "-c", "client", "-u", "user", "-p", "privilege" });
  176. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  177. auto result = std::dynamic_pointer_cast<Cynara::CheckCyadCommand>(parser.parseMain());
  178. ASSERT_NE(nullptr, result);
  179. ASSERT_EQ(CYNARA_ADMIN_DEFAULT_BUCKET, result->bucketId());
  180. ASSERT_FALSE(result->recursive());
  181. ASSERT_EQ(Cynara::PolicyKey("client", "user", "privilege"), result->policyKey());
  182. }
  183. TEST_F(CyadCommandlineTest, listPoliciesDefault_short) {
  184. prepare_argv({ "./cyad", "-l", "",
  185. "-c", "client", "-u", "user", "-p", "privilege" });
  186. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  187. auto result = std::dynamic_pointer_cast<Cynara::ListPoliciesCyadCommand>(parser.parseMain());
  188. ASSERT_NE(nullptr, result);
  189. ASSERT_EQ(CYNARA_ADMIN_DEFAULT_BUCKET, result->bucketId());
  190. ASSERT_EQ(Cynara::PolicyKey("client", "user", "privilege"), result->policyKey());
  191. }
  192. TEST_F(CyadCommandlineTest, listPoliciesOtherBucket_short) {
  193. prepare_argv({ "./cyad", "-l", "some-bucket",
  194. "-c", "c", "-u", "u", "-p", "p" });
  195. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  196. auto result = std::dynamic_pointer_cast<Cynara::ListPoliciesCyadCommand>(parser.parseMain());
  197. ASSERT_NE(nullptr, result);
  198. ASSERT_EQ("some-bucket", result->bucketId());
  199. ASSERT_EQ(Cynara::PolicyKey("c", "u", "p"), result->policyKey());
  200. }
  201. TEST_F(CyadCommandlineTest, listPoliciesAll_short) {
  202. prepare_argv({ "./cyad", "-l", "",
  203. "-A" });
  204. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  205. auto result = std::dynamic_pointer_cast<Cynara::ListPoliciesCyadCommand>(parser.parseMain());
  206. ASSERT_NE(nullptr, result);
  207. ASSERT_EQ(CYNARA_ADMIN_DEFAULT_BUCKET, result->bucketId());
  208. ASSERT_EQ(Cynara::PolicyKey(CYNARA_ADMIN_ANY, CYNARA_ADMIN_ANY, CYNARA_ADMIN_ANY),
  209. result->policyKey());
  210. }
  211. TEST_F(CyadCommandlineTest, listPoliciesAllAdditionalOption_short) {
  212. prepare_argv({ "./cyad", "-l", "",
  213. "-A", "-u", "u" });
  214. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  215. auto result = std::dynamic_pointer_cast<Cynara::ListPoliciesCyadCommand>(parser.parseMain());
  216. ASSERT_NE(nullptr, result);
  217. ASSERT_EQ(CYNARA_ADMIN_DEFAULT_BUCKET, result->bucketId());
  218. ASSERT_EQ(Cynara::PolicyKey(CYNARA_ADMIN_ANY, "u", CYNARA_ADMIN_ANY),
  219. result->policyKey());
  220. }
  221. TEST_F(CyadCommandlineTest, listPoliciesAllAdditionalOptions_short) {
  222. prepare_argv({ "./cyad", "-l", "",
  223. "-A", "-c", "c", "-u", "u", "-p", "p" });
  224. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  225. auto result = std::dynamic_pointer_cast<Cynara::ListPoliciesCyadCommand>(parser.parseMain());
  226. ASSERT_NE(nullptr, result);
  227. ASSERT_EQ(CYNARA_ADMIN_DEFAULT_BUCKET, result->bucketId());
  228. ASSERT_EQ(Cynara::PolicyKey("c", "u", "p"),
  229. result->policyKey());
  230. }
  231. TEST_F(CyadCommandlineTest, listPoliciesDesc_short) {
  232. prepare_argv({ "./cyad", "-g" });
  233. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  234. auto result = std::dynamic_pointer_cast<Cynara::ListPoliciesDescCyadCommand>(
  235. parser.parseMain());
  236. ASSERT_NE(nullptr, result);
  237. }