| // Copyright 2017 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <gtest/gtest.h> |
| |
| #include "authpolicy/policy/extension_policy_encoder.h" |
| #include "authpolicy/policy/policy_encoder_test_base.h" |
| #include "bindings/authpolicy_containers.pb.h" |
| |
| namespace { |
| constexpr char kValidExtensionId[] = "abcdeFGHabcdefghAbcdefGhabcdEfgh"; |
| constexpr char kTooShortExtensionId[] = "abcdeFGHabcdefgh"; |
| constexpr char kBadCharsExtensionId[] = "TheQuickBrownFoxJumpsOverTheOryx"; |
| |
| constexpr char kMandatoryKey[] = "Policy"; |
| constexpr char kRecommendedKey[] = "Recommended"; |
| } // namespace |
| |
| namespace policy { |
| |
| class ExtensionPolicyEncoderTest |
| : public PolicyEncoderTestBase<ExtensionPolicies> { |
| public: |
| ExtensionPolicyEncoderTest() = default; |
| ExtensionPolicyEncoderTest(const ExtensionPolicyEncoderTest&) = delete; |
| ExtensionPolicyEncoderTest& operator=(const ExtensionPolicyEncoderTest&) = |
| delete; |
| |
| ~ExtensionPolicyEncoderTest() override = default; |
| |
| protected: |
| void EncodeDict(ExtensionPolicies* policy, |
| const RegistryDict* dict) override { |
| ExtensionPolicyEncoder encoder(dict); |
| policy->clear(); |
| encoder.EncodePolicy(policy); |
| } |
| }; |
| |
| // Test encoding with "<extension_id>\\Policy" registry path for mandatory |
| // policies. |
| TEST_F(ExtensionPolicyEncoderTest, TestEncoding) { |
| // Make sure the registry key path contains the extension id and the mandatory |
| // or recommended key. |
| ExtensionPolicies policies; |
| |
| SetPath({kValidExtensionId, kMandatoryKey}); |
| EncodeBoolean(&policies, "policy1", true); |
| ASSERT_EQ(1, policies.size()); |
| EXPECT_EQ(kValidExtensionId, policies[0].id()); |
| EXPECT_EQ("{\"Policy\":{\"policy1\":true}}", policies[0].json_data()); |
| |
| EncodeInteger(&policies, "policy2", 123); |
| ASSERT_EQ(1, policies.size()); |
| EXPECT_EQ(kValidExtensionId, policies[0].id()); |
| EXPECT_EQ("{\"Policy\":{\"policy2\":123}}", policies[0].json_data()); |
| |
| EncodeString(&policies, "policy3", "val1"); |
| ASSERT_EQ(1, policies.size()); |
| EXPECT_EQ(kValidExtensionId, policies[0].id()); |
| EXPECT_EQ("{\"Policy\":{\"policy3\":\"val1\"}}", policies[0].json_data()); |
| |
| EncodeStringList(&policies, "policy4", {"val1", "val2", "val3"}); |
| ASSERT_EQ(1, policies.size()); |
| EXPECT_EQ(kValidExtensionId, policies[0].id()); |
| EXPECT_EQ( |
| "{\"Policy\":{\"policy4\":{\"1\":\"val1\",\"2\":\"val2\",\"3\":\"val3\"}}" |
| "}", |
| policies[0].json_data()); |
| } |
| |
| // Test that a "<bad_extension_id>\\Policy" registry path is ignored. |
| TEST_F(ExtensionPolicyEncoderTest, BadExtensionsIdFails) { |
| ExtensionPolicies policies; |
| |
| SetPath({kTooShortExtensionId, kMandatoryKey}); |
| EncodeBoolean(&policies, "testpolicy", true); |
| EXPECT_EQ(0, policies.size()); |
| |
| SetPath({kBadCharsExtensionId, kMandatoryKey}); |
| EncodeBoolean(&policies, "testpolicy", true); |
| EXPECT_EQ(0, policies.size()); |
| } |
| |
| // Test "<extension_id>\\Recommended" registry path. In fact, anything after a |
| // valid extension id works and will be filtered out later in Chrome. |
| TEST_F(ExtensionPolicyEncoderTest, RecommendedKey) { |
| ExtensionPolicies policies; |
| |
| SetPath({kValidExtensionId, kRecommendedKey}); |
| EncodeBoolean(&policies, "policy1", true); |
| ASSERT_EQ(1, policies.size()); |
| EXPECT_EQ(kValidExtensionId, policies[0].id()); |
| EXPECT_EQ("{\"Recommended\":{\"policy1\":true}}", policies[0].json_data()); |
| } |
| |
| } // namespace policy |