/test/cyad/commandline_errors.cpp

https://gitlab.com/github-cloud-corporation/cynara · C++ · 139 lines · 95 code · 21 blank · 23 comment · 0 complexity · d0f009a493f16c67dfd324529633f3f5 MD5 · raw file

  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. #include <memory>
  23. #include <gmock/gmock.h>
  24. #include <gtest/gtest.h>
  25. #include <cyad/CommandlineParser/CmdlineErrors.h>
  26. #include <cyad/CommandlineParser/CmdlineOpts.h>
  27. #include <cyad/CommandlineParser/CyadCommand.h>
  28. #include <cyad/CommandlineParser/CyadCommandlineParser.h>
  29. #include "CyadCommandlineTest.h"
  30. namespace Errors = Cynara::CmdlineErrors;
  31. using Cynara::CmdlineOpts::CmdlineOpt;
  32. #define ASSERT_ERROR_MSG(msg,rawResult) { \
  33. auto result = std::dynamic_pointer_cast<Cynara::ErrorCyadCommand>(rawResult); \
  34. ASSERT_NE(nullptr, result); \
  35. ASSERT_TRUE(result->isError()); \
  36. ASSERT_EQ(msg, result->message()); \
  37. }
  38. TEST_F(CyadCommandlineTest, noOption) {
  39. prepare_argv({ "./cyad" });
  40. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  41. ASSERT_ERROR_MSG(Errors::noOption(), parser.parseMain());
  42. }
  43. TEST_F(CyadCommandlineTest, unknownOption) {
  44. prepare_argv({ "./cyad", "--unknown-option" });
  45. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  46. ASSERT_ERROR_MSG(Errors::unknownOption(), parser.parseMain());
  47. }
  48. TEST_F(CyadCommandlineTest, deleteBucketNoBucket) {
  49. prepare_argv({ "./cyad", "--delete-bucket" });
  50. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  51. ASSERT_ERROR_MSG(Errors::noBucket(), parser.parseMain());
  52. }
  53. TEST_F(CyadCommandlineTest, deleteBucketUnknownOption) {
  54. prepare_argv({ "./cyad", "--delete-bucket=bucket", "--unknown" });
  55. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  56. ASSERT_ERROR_MSG(Errors::unknownOption(CmdlineOpt::DeleteBucket), parser.parseMain());
  57. }
  58. TEST_F(CyadCommandlineTest, setBucketNoBucket) {
  59. prepare_argv({ "./cyad", "--set-bucket" });
  60. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  61. ASSERT_ERROR_MSG(Errors::noBucket(), parser.parseMain());
  62. }
  63. TEST_F(CyadCommandlineTest, setBucketNoPolicy) {
  64. prepare_argv({ "./cyad", "--set-bucket=bucket" });
  65. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  66. ASSERT_ERROR_MSG(Cynara::CmdlineErrors::noType(), parser.parseMain());
  67. }
  68. TEST_F(CyadCommandlineTest, setBucketUnknownOption) {
  69. prepare_argv({ "./cyad", "--set-bucket=bucket", "--unknown", "--type=42" });
  70. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  71. ASSERT_ERROR_MSG(Errors::unknownOption(CmdlineOpt::SetBucket), parser.parseMain());
  72. }
  73. TEST_F(CyadCommandlineTest, setBucketMetadataNoPolicy) {
  74. prepare_argv({ "./cyad", "--set-bucket=bucket", "--metadata=some-meta" });
  75. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  76. ASSERT_ERROR_MSG(Errors::noType(), parser.parseMain());
  77. }
  78. TEST_F(CyadCommandlineTest, setPolicyNoOption) {
  79. prepare_argv({ "./cyad", "--set-policy" });
  80. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  81. ASSERT_ERROR_MSG(Errors::optionMissing(CmdlineOpt::SetPolicy), parser.parseMain());
  82. }
  83. TEST_F(CyadCommandlineTest, setPolicyUnknownOption) {
  84. prepare_argv({ "./cyad", "--set-policy", "--unknown-option" });
  85. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  86. ASSERT_ERROR_MSG(Errors::unknownOption(CmdlineOpt::SetPolicy), parser.parseMain());
  87. }
  88. TEST_F(CyadCommandlineTest, setPolicyArgumentMissing) {
  89. prepare_argv({ "./cyad", "--set-policy", "--bucket" });
  90. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  91. ASSERT_ERROR_MSG(Errors::argumentMissing(CmdlineOpt::SetPolicy), parser.parseMain());
  92. }
  93. TEST_F(CyadCommandlineTest, setPolicyNoPolicy) {
  94. // TODO: In the future, we can identify actual options being missed
  95. prepare_argv({ "./cyad", "--set-policy", "--bucket=some-bucket",
  96. "--client=client", "--user=user", "--privilege=privilege" });
  97. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  98. ASSERT_ERROR_MSG(Errors::optionMissing(CmdlineOpt::SetPolicy), parser.parseMain());
  99. }
  100. TEST_F(CyadCommandlineTest, eraseNoRecursive) {
  101. prepare_argv({ "./cyad", "--erase=",
  102. "--client=client", "--user=user", "--privilege=privilege" });
  103. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  104. ASSERT_ERROR_MSG(Errors::optionMissing(CmdlineOpt::Erase), parser.parseMain());
  105. }
  106. // Error should be argument missing, but getopt acts weird
  107. TEST_F(CyadCommandlineTest, listPoliciesNoBucket) {
  108. prepare_argv({ "./cyad", "--list-policies",
  109. "--client=client", "--user=user", "--privilege=privilege" });
  110. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  111. ASSERT_ERROR_MSG(Errors::optionMissing(CmdlineOpt::ListPolicies), parser.parseMain());
  112. }
  113. TEST_F(CyadCommandlineTest, listPoliciesAllWithArgument) {
  114. prepare_argv({ "./cyad", "--list-policies",
  115. "", "--all=all" });
  116. Cynara::CyadCommandlineParser parser(this->argc(), this->argv());
  117. ASSERT_ERROR_MSG(Errors::unknownOption(CmdlineOpt::ListPolicies), parser.parseMain());
  118. }