xref: /aosp_15_r20/external/grpc-grpc/test/core/security/cel_authorization_engine_test.cc (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1 // Copyright 2020 gRPC authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "src/core/lib/security/authorization/cel_authorization_engine.h"
16 
17 #include <gtest/gtest.h>
18 
19 namespace grpc_core {
20 
21 class CelAuthorizationEngineTest : public ::testing::Test {
22  protected:
SetUp()23   void SetUp() override {
24     deny_policy_ = envoy_config_rbac_v3_RBAC_new(arena_.ptr());
25     envoy_config_rbac_v3_RBAC_set_action(deny_policy_, 1);
26     allow_policy_ = envoy_config_rbac_v3_RBAC_new(arena_.ptr());
27     envoy_config_rbac_v3_RBAC_set_action(allow_policy_, 0);
28   }
29   upb::Arena arena_;
30   envoy_config_rbac_v3_RBAC* deny_policy_;
31   envoy_config_rbac_v3_RBAC* allow_policy_;
32 };
33 
TEST_F(CelAuthorizationEngineTest,CreateEngineSuccessOnePolicy)34 TEST_F(CelAuthorizationEngineTest, CreateEngineSuccessOnePolicy) {
35   std::vector<envoy_config_rbac_v3_RBAC*> policies{allow_policy_};
36   std::unique_ptr<CelAuthorizationEngine> engine =
37       CelAuthorizationEngine::CreateCelAuthorizationEngine(policies);
38   EXPECT_NE(engine, nullptr)
39       << "Error: Failed to create CelAuthorizationEngine with one policy.";
40 }
41 
TEST_F(CelAuthorizationEngineTest,CreateEngineSuccessTwoPolicies)42 TEST_F(CelAuthorizationEngineTest, CreateEngineSuccessTwoPolicies) {
43   std::vector<envoy_config_rbac_v3_RBAC*> policies{deny_policy_, allow_policy_};
44   std::unique_ptr<CelAuthorizationEngine> engine =
45       CelAuthorizationEngine::CreateCelAuthorizationEngine(policies);
46   EXPECT_NE(engine, nullptr)
47       << "Error: Failed to create CelAuthorizationEngine with two policies.";
48 }
49 
TEST_F(CelAuthorizationEngineTest,CreateEngineFailNoPolicies)50 TEST_F(CelAuthorizationEngineTest, CreateEngineFailNoPolicies) {
51   std::vector<envoy_config_rbac_v3_RBAC*> policies{};
52   std::unique_ptr<CelAuthorizationEngine> engine =
53       CelAuthorizationEngine::CreateCelAuthorizationEngine(policies);
54   EXPECT_EQ(engine, nullptr)
55       << "Error: Created CelAuthorizationEngine without policies.";
56 }
57 
TEST_F(CelAuthorizationEngineTest,CreateEngineFailTooManyPolicies)58 TEST_F(CelAuthorizationEngineTest, CreateEngineFailTooManyPolicies) {
59   std::vector<envoy_config_rbac_v3_RBAC*> policies{deny_policy_, allow_policy_,
60                                                    deny_policy_};
61   std::unique_ptr<CelAuthorizationEngine> engine =
62       CelAuthorizationEngine::CreateCelAuthorizationEngine(policies);
63   EXPECT_EQ(engine, nullptr)
64       << "Error: Created CelAuthorizationEngine with more than two policies.";
65 }
66 
TEST_F(CelAuthorizationEngineTest,CreateEngineFailWrongPolicyOrder)67 TEST_F(CelAuthorizationEngineTest, CreateEngineFailWrongPolicyOrder) {
68   std::vector<envoy_config_rbac_v3_RBAC*> policies{allow_policy_, deny_policy_};
69   std::unique_ptr<CelAuthorizationEngine> engine =
70       CelAuthorizationEngine::CreateCelAuthorizationEngine(policies);
71   EXPECT_EQ(engine, nullptr) << "Error: Created CelAuthorizationEngine with "
72                                 "policies in the wrong order.";
73 }
74 
75 }  // namespace grpc_core
76 
main(int argc,char ** argv)77 int main(int argc, char** argv) {
78   ::testing::InitGoogleTest(&argc, argv);
79   return RUN_ALL_TESTS();
80 }
81