Home | History | Annotate | Download | only in tests
      1 // Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "policy/libpolicy.h"
      6 
      7 #include <memory>
      8 #include <utility>
      9 
     10 #include <openssl/err.h>
     11 #include <openssl/ssl.h>
     12 
     13 #include <base/files/file_path.h>
     14 #include <base/logging.h>
     15 #include <gtest/gtest.h>
     16 
     17 #include "bindings/chrome_device_policy.pb.h"
     18 #include "install_attributes/mock_install_attributes_reader.h"
     19 #include "policy/device_policy_impl.h"
     20 
     21 namespace policy {
     22 
     23 static const char kPolicyFileAllSet[] = "policy/tests/whitelist/policy_all";
     24 static const char kPolicyFileNoneSet[] = "policy/tests/whitelist/policy_none";
     25 static const char kKeyFile[] = "policy/tests/whitelist/owner.key";
     26 static const char kNonExistingFile[] = "file-does-not-exist";
     27 
     28 // Creates the DevicePolicyImpl with given parameters for test.
     29 std::unique_ptr<DevicePolicyImpl> CreateDevicePolicyImpl(
     30     std::unique_ptr<InstallAttributesReader> install_attributes_reader,
     31     const base::FilePath& policy_path,
     32     const base::FilePath& keyfile_path,
     33     bool verify_files) {
     34   std::unique_ptr<DevicePolicyImpl> device_policy(new DevicePolicyImpl());
     35   device_policy->set_install_attributes_for_testing(
     36       std::move(install_attributes_reader));
     37   device_policy->set_policy_path_for_testing(policy_path);
     38   device_policy->set_key_file_path_for_testing(keyfile_path);
     39   device_policy->set_verify_root_ownership_for_testing(verify_files);
     40 
     41   return device_policy;
     42 }
     43 
     44 // Test that a policy file can be verified and parsed correctly. The file
     45 // contains all possible fields, so reading should succeed for all.
     46 TEST(PolicyTest, DevicePolicyAllSetTest) {
     47   base::FilePath policy_file(kPolicyFileAllSet);
     48   base::FilePath key_file(kKeyFile);
     49   PolicyProvider provider;
     50   provider.SetDevicePolicyForTesting(CreateDevicePolicyImpl(
     51       std::make_unique<MockInstallAttributesReader>(
     52           InstallAttributesReader::kDeviceModeEnterprise, true),
     53       policy_file, key_file, false));
     54   provider.Reload();
     55 
     56   // Ensure we successfully loaded the device policy file.
     57   ASSERT_TRUE(provider.device_policy_is_loaded());
     58 
     59   const DevicePolicy& policy = provider.GetDevicePolicy();
     60 
     61   // Check that we can read out all fields of the sample protobuf.
     62   int int_value = -1;
     63   ASSERT_TRUE(policy.GetPolicyRefreshRate(&int_value));
     64   EXPECT_EQ(100, int_value);
     65 
     66   std::vector<std::string> list_value;
     67   ASSERT_TRUE(policy.GetUserWhitelist(&list_value));
     68   ASSERT_EQ(3, list_value.size());
     69   EXPECT_EQ("me (at) here.com", list_value[0]);
     70   EXPECT_EQ("you (at) there.com", list_value[1]);
     71   EXPECT_EQ("*@monsters.com", list_value[2]);
     72 
     73   bool bool_value = true;
     74   ASSERT_TRUE(policy.GetGuestModeEnabled(&bool_value));
     75   EXPECT_FALSE(bool_value);
     76 
     77   bool_value = true;
     78   ASSERT_TRUE(policy.GetCameraEnabled(&bool_value));
     79   EXPECT_FALSE(bool_value);
     80 
     81   bool_value = true;
     82   ASSERT_TRUE(policy.GetShowUserNames(&bool_value));
     83   EXPECT_FALSE(bool_value);
     84 
     85   bool_value = true;
     86   ASSERT_TRUE(policy.GetDataRoamingEnabled(&bool_value));
     87   EXPECT_FALSE(bool_value);
     88 
     89   bool_value = true;
     90   ASSERT_TRUE(policy.GetAllowNewUsers(&bool_value));
     91   EXPECT_FALSE(bool_value);
     92 
     93   bool_value = true;
     94   ASSERT_TRUE(policy.GetMetricsEnabled(&bool_value));
     95   EXPECT_FALSE(bool_value);
     96 
     97   bool_value = true;
     98   ASSERT_TRUE(policy.GetReportVersionInfo(&bool_value));
     99   EXPECT_FALSE(bool_value);
    100 
    101   bool_value = true;
    102   ASSERT_TRUE(policy.GetReportActivityTimes(&bool_value));
    103   EXPECT_FALSE(bool_value);
    104 
    105   bool_value = true;
    106   ASSERT_TRUE(policy.GetReportBootMode(&bool_value));
    107   EXPECT_FALSE(bool_value);
    108 
    109   bool_value = true;
    110   ASSERT_TRUE(policy.GetEphemeralUsersEnabled(&bool_value));
    111   EXPECT_FALSE(bool_value);
    112 
    113   std::string string_value;
    114   ASSERT_TRUE(policy.GetReleaseChannel(&string_value));
    115   EXPECT_EQ("stable-channel", string_value);
    116 
    117   bool_value = false;
    118   ASSERT_TRUE(policy.GetReleaseChannelDelegated(&bool_value));
    119   EXPECT_TRUE(bool_value);
    120 
    121   bool_value = true;
    122   ASSERT_TRUE(policy.GetUpdateDisabled(&bool_value));
    123   EXPECT_FALSE(bool_value);
    124 
    125   int64_t int64_value = -1LL;
    126   ASSERT_TRUE(policy.GetScatterFactorInSeconds(&int64_value));
    127   EXPECT_EQ(17LL, int64_value);
    128 
    129   ASSERT_TRUE(policy.GetTargetVersionPrefix(&string_value));
    130   EXPECT_EQ("42.0.", string_value);
    131 
    132   int_value = -1;
    133   ASSERT_TRUE(policy.GetRollbackToTargetVersion(&int_value));
    134   EXPECT_EQ(enterprise_management::AutoUpdateSettingsProto::
    135                 ROLLBACK_WITH_FULL_POWERWASH,
    136             int_value);
    137 
    138   int_value = -1;
    139   ASSERT_TRUE(policy.GetRollbackAllowedMilestones(&int_value));
    140   EXPECT_EQ(3, int_value);
    141 
    142   std::set<std::string> types;
    143   ASSERT_TRUE(policy.GetAllowedConnectionTypesForUpdate(&types));
    144   EXPECT_TRUE(types.end() != types.find("ethernet"));
    145   EXPECT_TRUE(types.end() != types.find("wifi"));
    146   EXPECT_EQ(2, types.size());
    147 
    148   ASSERT_TRUE(policy.GetOpenNetworkConfiguration(&string_value));
    149   EXPECT_EQ("{}", string_value);
    150 
    151   ASSERT_TRUE(policy.GetOwner(&string_value));
    152   EXPECT_EQ("", string_value);
    153 
    154   bool_value = true;
    155   ASSERT_TRUE(policy.GetHttpDownloadsEnabled(&bool_value));
    156   EXPECT_FALSE(bool_value);
    157 
    158   bool_value = true;
    159   ASSERT_TRUE(policy.GetAuP2PEnabled(&bool_value));
    160   EXPECT_FALSE(bool_value);
    161 
    162   bool_value = true;
    163   ASSERT_TRUE(policy.GetAllowKioskAppControlChromeVersion(&bool_value));
    164   EXPECT_FALSE(bool_value);
    165 
    166   std::vector<DevicePolicy::UsbDeviceId> list_device;
    167   ASSERT_TRUE(policy.GetUsbDetachableWhitelist(&list_device));
    168   EXPECT_EQ(2, list_device.size());
    169   EXPECT_EQ(0x413c, list_device[0].vendor_id);
    170   EXPECT_EQ(0x2105, list_device[0].product_id);
    171   EXPECT_EQ(0x0403, list_device[1].vendor_id);
    172   EXPECT_EQ(0x6001, list_device[1].product_id);
    173 
    174   ASSERT_TRUE(policy.GetAutoLaunchedKioskAppId(&string_value));
    175   EXPECT_EQ("my_kiosk_app", string_value);
    176 
    177   int_value = -1;
    178   ASSERT_TRUE(policy.GetSecondFactorAuthenticationMode(&int_value));
    179   EXPECT_EQ(2, int_value);
    180 
    181   std::vector<DevicePolicy::WeeklyTimeInterval> intervals;
    182   ASSERT_TRUE(policy.GetDisallowedTimeIntervals(&intervals));
    183   ASSERT_EQ(2, intervals.size());
    184   EXPECT_EQ(4, intervals[0].start_day_of_week);
    185   EXPECT_EQ(base::TimeDelta::FromMinutes(30) + base::TimeDelta::FromHours(12),
    186             intervals[0].start_time);
    187   EXPECT_EQ(6, intervals[0].end_day_of_week);
    188   EXPECT_EQ(base::TimeDelta::FromMinutes(15) + base::TimeDelta::FromHours(3),
    189             intervals[0].end_time);
    190   EXPECT_EQ(1, intervals[1].start_day_of_week);
    191   EXPECT_EQ(base::TimeDelta::FromMinutes(10) + base::TimeDelta::FromHours(20),
    192             intervals[1].start_time);
    193   EXPECT_EQ(3, intervals[1].end_day_of_week);
    194   EXPECT_EQ(base::TimeDelta::FromMinutes(20), intervals[1].end_time);
    195 
    196   ASSERT_TRUE(policy.GetAutoLaunchedKioskAppId(&string_value));
    197   ASSERT_EQ("my_kiosk_app", string_value);
    198 
    199   // Reloading the protobuf should succeed.
    200   EXPECT_TRUE(provider.Reload());
    201 }
    202 
    203 // Test that a policy file can be verified and parsed correctly. The file
    204 // contains none of the possible fields, so reading should fail for all.
    205 TEST(PolicyTest, DevicePolicyNoneSetTest) {
    206   base::FilePath policy_file(kPolicyFileNoneSet);
    207   base::FilePath key_file(kKeyFile);
    208 
    209   PolicyProvider provider;
    210   provider.SetDevicePolicyForTesting(CreateDevicePolicyImpl(
    211       std::make_unique<MockInstallAttributesReader>(
    212           InstallAttributesReader::kDeviceModeEnterprise, true),
    213       policy_file, key_file, false));
    214   provider.Reload();
    215 
    216   // Ensure we successfully loaded the device policy file.
    217   ASSERT_TRUE(provider.device_policy_is_loaded());
    218 
    219   const DevicePolicy& policy = provider.GetDevicePolicy();
    220 
    221   // Check that we cannot read any fields out of the sample protobuf.
    222   int int_value;
    223   int64_t int64_value;
    224   std::vector<std::string> list_value;
    225   bool bool_value;
    226   std::string string_value;
    227   std::vector<DevicePolicy::UsbDeviceId> list_device;
    228   std::vector<DevicePolicy::WeeklyTimeInterval> intervals;
    229 
    230   EXPECT_FALSE(policy.GetPolicyRefreshRate(&int_value));
    231   EXPECT_FALSE(policy.GetUserWhitelist(&list_value));
    232   EXPECT_FALSE(policy.GetGuestModeEnabled(&bool_value));
    233   EXPECT_FALSE(policy.GetCameraEnabled(&bool_value));
    234   EXPECT_FALSE(policy.GetShowUserNames(&bool_value));
    235   EXPECT_FALSE(policy.GetDataRoamingEnabled(&bool_value));
    236   EXPECT_FALSE(policy.GetAllowNewUsers(&bool_value));
    237   EXPECT_FALSE(policy.GetMetricsEnabled(&bool_value));
    238   EXPECT_FALSE(policy.GetReportVersionInfo(&bool_value));
    239   EXPECT_FALSE(policy.GetReportActivityTimes(&bool_value));
    240   EXPECT_FALSE(policy.GetReportBootMode(&bool_value));
    241   EXPECT_FALSE(policy.GetEphemeralUsersEnabled(&bool_value));
    242   EXPECT_FALSE(policy.GetReleaseChannel(&string_value));
    243   EXPECT_FALSE(policy.GetUpdateDisabled(&bool_value));
    244   EXPECT_FALSE(policy.GetTargetVersionPrefix(&string_value));
    245   EXPECT_FALSE(policy.GetRollbackToTargetVersion(&int_value));
    246   // RollbackAllowedMilestones has the default value of 0 for enterprise
    247   // devices.
    248   ASSERT_TRUE(policy.GetRollbackAllowedMilestones(&int_value));
    249   EXPECT_EQ(0, int_value);
    250   EXPECT_FALSE(policy.GetScatterFactorInSeconds(&int64_value));
    251   EXPECT_FALSE(policy.GetOpenNetworkConfiguration(&string_value));
    252   EXPECT_FALSE(policy.GetHttpDownloadsEnabled(&bool_value));
    253   EXPECT_FALSE(policy.GetAuP2PEnabled(&bool_value));
    254   EXPECT_FALSE(policy.GetAllowKioskAppControlChromeVersion(&bool_value));
    255   EXPECT_FALSE(policy.GetUsbDetachableWhitelist(&list_device));
    256   EXPECT_FALSE(policy.GetSecondFactorAuthenticationMode(&int_value));
    257   EXPECT_FALSE(policy.GetDisallowedTimeIntervals(&intervals));
    258 }
    259 
    260 // Verify that the library will correctly recognize and signal missing files.
    261 TEST(PolicyTest, DevicePolicyFailure) {
    262   LOG(INFO) << "Errors expected.";
    263   // Try loading non-existing protobuf should fail.
    264   base::FilePath policy_file(kNonExistingFile);
    265   base::FilePath key_file(kNonExistingFile);
    266   PolicyProvider provider;
    267   provider.SetDevicePolicyForTesting(
    268       CreateDevicePolicyImpl(std::make_unique<MockInstallAttributesReader>(
    269                                  cryptohome::SerializedInstallAttributes()),
    270                              policy_file, key_file, true));
    271 
    272   // Even after reload the policy should still be not loaded.
    273   ASSERT_FALSE(provider.Reload());
    274   EXPECT_FALSE(provider.device_policy_is_loaded());
    275 }
    276 
    277 // Verify that signature verification is waived for a device in enterprise_ad
    278 // mode.
    279 TEST(PolicyTest, SkipSignatureForEnterpriseAD) {
    280   base::FilePath policy_file(kPolicyFileAllSet);
    281   base::FilePath key_file(kNonExistingFile);
    282   PolicyProvider provider;
    283   provider.SetDevicePolicyForTesting(CreateDevicePolicyImpl(
    284       std::make_unique<MockInstallAttributesReader>(
    285           InstallAttributesReader::kDeviceModeEnterpriseAD, true),
    286       policy_file, key_file, false));
    287   provider.Reload();
    288 
    289   // Ensure we successfully loaded the device policy file.
    290   EXPECT_TRUE(provider.device_policy_is_loaded());
    291 }
    292 
    293 // Ensure that signature verification is enforced for a device in vanilla
    294 // enterprise mode.
    295 TEST(PolicyTest, DontSkipSignatureForEnterprise) {
    296   base::FilePath policy_file(kPolicyFileAllSet);
    297   base::FilePath key_file(kNonExistingFile);
    298 
    299   PolicyProvider provider;
    300   provider.SetDevicePolicyForTesting(CreateDevicePolicyImpl(
    301       std::make_unique<MockInstallAttributesReader>(
    302           InstallAttributesReader::kDeviceModeEnterprise, true),
    303       policy_file, key_file, false));
    304   provider.Reload();
    305 
    306   // Ensure that unverifed policy is not loaded.
    307   EXPECT_FALSE(provider.device_policy_is_loaded());
    308 }
    309 
    310 // Ensure that signature verification is enforced for a device in consumer mode.
    311 TEST(PolicyTest, DontSkipSignatureForConsumer) {
    312   base::FilePath policy_file(kPolicyFileAllSet);
    313   base::FilePath key_file(kNonExistingFile);
    314   cryptohome::SerializedInstallAttributes install_attributes;
    315 
    316   PolicyProvider provider;
    317   provider.SetDevicePolicyForTesting(CreateDevicePolicyImpl(
    318       std::make_unique<MockInstallAttributesReader>(install_attributes),
    319       policy_file, key_file, false));
    320   provider.Reload();
    321 
    322   // Ensure that unverifed policy is not loaded.
    323   EXPECT_FALSE(provider.device_policy_is_loaded());
    324 }
    325 
    326 // Checks return value of IsConsumerDevice when it's a still in OOBE.
    327 TEST(PolicyTest, IsConsumerDeviceOobe) {
    328   PolicyProvider provider;
    329   provider.SetInstallAttributesReaderForTesting(
    330       std::make_unique<MockInstallAttributesReader>("", false));
    331   EXPECT_FALSE(provider.IsConsumerDevice());
    332 }
    333 
    334 // Checks return value of IsConsumerDevice when it's a consumer device.
    335 TEST(PolicyTest, IsConsumerDeviceConsumer) {
    336   PolicyProvider provider;
    337   provider.SetInstallAttributesReaderForTesting(
    338       std::make_unique<MockInstallAttributesReader>("", true));
    339   EXPECT_TRUE(provider.IsConsumerDevice());
    340 }
    341 
    342 // Checks return value of IsConsumerDevice when it's an enterprise device.
    343 TEST(PolicyTest, IsConsumerDeviceEnterprise) {
    344   PolicyProvider provider;
    345   provider.SetInstallAttributesReaderForTesting(
    346       std::make_unique<MockInstallAttributesReader>(
    347           InstallAttributesReader::kDeviceModeEnterprise, true));
    348   EXPECT_FALSE(provider.IsConsumerDevice());
    349 }
    350 
    351 // Checks return value of IsConsumerDevice when it's an enterprise AD device.
    352 TEST(PolicyTest, IsConsumerDeviceEnterpriseAd) {
    353   PolicyProvider provider;
    354   provider.SetInstallAttributesReaderForTesting(
    355       std::make_unique<MockInstallAttributesReader>(
    356           InstallAttributesReader::kDeviceModeEnterpriseAD, true));
    357   EXPECT_FALSE(provider.IsConsumerDevice());
    358 }
    359 
    360 }  // namespace policy
    361 
    362 int main(int argc, char* argv[]) {
    363   ::testing::InitGoogleTest(&argc, argv);
    364   return RUN_ALL_TESTS();
    365 }
    366