blob: 863deac5ed89c802942e7114db572e24351c587c [file] [log] [blame]
// 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() override = default;
protected:
void EncodeDict(ExtensionPolicies* policy,
const RegistryDict* dict) override {
ExtensionPolicyEncoder encoder(dict);
policy->clear();
encoder.EncodePolicy(policy);
}
private:
DISALLOW_COPY_AND_ASSIGN(ExtensionPolicyEncoderTest);
};
// 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