74 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
| # Copyright 2018 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 hashlib
 | |
| import logging
 | |
| import os
 | |
| 
 | |
| from autotest_lib.client.common_lib import error
 | |
| from autotest_lib.client.cros.enterprise import enterprise_policy_base
 | |
| 
 | |
| 
 | |
| class policy_ExtensionPolicy(enterprise_policy_base.EnterprisePolicyTest):
 | |
|     version = 1
 | |
| 
 | |
| 
 | |
|     def initialize(self, **kwargs):
 | |
|         """
 | |
|         Start webserver and set the extension policy file's path and checksum.
 | |
| 
 | |
|         """
 | |
|         super(policy_ExtensionPolicy, self).initialize(**kwargs)
 | |
|         self.start_webserver()
 | |
| 
 | |
|         # Location of the extension policy on the server.
 | |
|         POLICY_FILE = 'extension_policy.json'
 | |
|         policy_path = os.path.join(self.enterprise_dir, POLICY_FILE)
 | |
|         self.EXTENSION_POLICY_URL = '%s/%s' % (self.WEB_HOST, POLICY_FILE)
 | |
|         self.CHECKSUM = self.sha256sum(policy_path)
 | |
| 
 | |
| 
 | |
|     def sha256sum(self, filepath):
 | |
|         """
 | |
|         Generate the SHA256 checksum of |filepath|.
 | |
| 
 | |
|         @param filepath: Path to file.
 | |
| 
 | |
|         @returns: SHA256 checksum as a hex string.
 | |
| 
 | |
|         """
 | |
|         with open(filepath, 'rb') as f:
 | |
|             return hashlib.sha256(f.read()).hexdigest()
 | |
| 
 | |
| 
 | |
|     def run_once(self):
 | |
|         """
 | |
|         Setup and run the test configured for the specified test case.
 | |
| 
 | |
|         """
 | |
|         extension_path = os.path.join(os.path.dirname(__file__),
 | |
|                                       'policy_test_extension')
 | |
| 
 | |
|         self.setup_case(extension_paths=[extension_path])
 | |
| 
 | |
|         # The extension ID is required for setting the extension policy. But
 | |
|         # the extension ID is assigned randomly, so we need to force install
 | |
|         # the policy test extension first and then read its ID.
 | |
|         extension_id = self.cr.get_extension(extension_path).extension_id
 | |
|         extension_policies = {
 | |
|             extension_id: {
 | |
|                 'download_url': self.EXTENSION_POLICY_URL,
 | |
|                 'secure_hash': self.CHECKSUM
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         if self.dms_is_fake:
 | |
|             # Update the server policies with the extension policies.
 | |
|             self.add_policies(extension=extension_policies)
 | |
| 
 | |
|         # Ensure fields marked sensitive are censored in the policy tab.
 | |
|         sensitive_fields = ['SensitiveStringPolicy', 'SensitiveDictPolicy']
 | |
|         self.verify_extension_stats(extension_policies,
 | |
|                                     sensitive_fields=sensitive_fields)
 |