blob: 60b33dbebc1cfe8a63d91dddd8eac3ea2f5b3776 [file] [log] [blame]
# Copyright 2019 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.
import ast
import copy
from mock import patch
import os
import unittest
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros.enterprise import enterprise_policy_utils as epu
"""
This is the unittest file for enterprise_policy_utils.
If you modify that file, you should be at minimum re-running this file.
Add and correct tests as changes are made to the utils file.
To run the tests, use the following command from your DEV box (outside_chroot):
src/third_party/autotest/files/utils$ python unittest_suite.py \
autotest_lib.client.cros.enterprise.enterprise_policy_utils_unittest --debug
Most of the test data are large dictionaries mocking real data. They are stored
in the ent_policy_unittest_data file (located in this directory).
"""
# Load the test data
TEST_DATA = {}
folderDir = os.path.join(os.path.dirname(__file__))
fileName = 'ent_policy_unittest_data'
fullPath = os.path.join(folderDir, fileName)
with open(fullPath) as t:
f = (t.readlines())
for variable in f:
name, data = variable.split('=')
TEST_DATA[name] = ast.literal_eval(data)
# Set the base path for the Mock
PATCH_BASE = 'autotest_lib.client.cros.enterprise.enterprise_policy_utils'
class TestPolicyUtils_get_all_policies(unittest.TestCase):
"""
Test the "get_all_policies" function.
Mock the reply from the API with an example policy.
"""
FX_NAME = '_get_pol_from_api'
PATCH_PATH = '{}.{}'.format(PATCH_BASE, FX_NAME)
@patch(PATCH_PATH)
def test_Normal(self, get_pol_mock):
get_pol_mock.return_value = TEST_DATA['TEST_RAW']
self.assertEqual(epu.get_all_policies(None), TEST_DATA['TEST_RAW'])
@patch(PATCH_PATH)
def test_NoAPIResponse(self, get_pol_mock):
get_pol_mock.return_value = None
self.assertRaises(error.TestError, epu.get_all_policies, None)
class TestPolicyUtils_reformat_policies(unittest.TestCase):
"""Test the _reformat_policies function and the following private
methods:
_remove_visual_formatting
"""
def test_NormalData(self):
# Tests a policy with a "chromePolicies" and 1 "extensionPolicies".
subtest_data = copy.deepcopy(TEST_DATA['TEST_RAW'])
epu._reformat_policies(subtest_data)
self.assertEqual(subtest_data, TEST_DATA['TEST_RAW'])
def test_no_data(self):
subtest_data = {}
epu._reformat_policies(subtest_data)
self.assertEqual(subtest_data, {})
subtest_data2 = {'deviceLocalAccountPolicies': {},
'extensionPolicies': {},
'chromePolicies': {}}
expected = copy.deepcopy(subtest_data2)
epu._reformat_policies(subtest_data2)
self.assertEqual(subtest_data2, expected)
def test_partial_data(self):
# "chromePolicies" contains data, "extensionPolicies" has an extension
# with no policies.
subtest_data = copy.deepcopy(TEST_DATA['PARTIAL_RAW'])
epu._reformat_policies(subtest_data)
self.assertEqual(subtest_data, TEST_DATA['PARTIAL_RAW'])
def test_mult_extension(self):
subtest_data = copy.deepcopy(TEST_DATA['TEST_MULTI_EXT'])
epu._reformat_policies(subtest_data)
self.assertEqual(subtest_data, TEST_DATA['TEST_MULTI_EXT'])
def test_unicode_dict(self):
# Specifically will check if the _remove_visual_formatting
# function will remove visual formatting. e.g. "\n "
subtest_data = copy.deepcopy(TEST_DATA['POL_WITH_UNICODE'])
epu._reformat_policies(subtest_data)
self.assertEqual(subtest_data, TEST_DATA['POL_WITH_UNICODE_PARSED'])
def test_string_value(self):
# Checks that a unicode string is not modified.
subtest_data = copy.deepcopy(TEST_DATA['POL_WITH_STRING'])
epu._reformat_policies(subtest_data)
self.assertEqual(subtest_data, TEST_DATA['POL_WITH_STRING'])
if __name__ == '__main__':
unittest.main()