1# Copyright 2022 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 5import base64 6import unittest 7from unittest import mock 8 9from autotest_lib.server.cros import chrome_sideloader 10 11 12class TestGetTastExpr(unittest.TestCase): 13 """Test GetTastExpr in ChromeSideloader library.""" 14 15 class MockHost: 16 def path_exists(self, path): 17 return True 18 19 def get_file(self, src, dst, delete_dest): 20 pass 21 22 def testTastExpr(self): 23 tast_expr = "lacros.Basic" 24 args_dict = {'tast_expr': tast_expr} 25 self.assertEqual(chrome_sideloader.get_tast_expr(args_dict), tast_expr) 26 27 def testEmptyArgsDict(self): 28 args_dict = {} 29 with self.assertRaises(Exception): 30 chrome_sideloader.get_tast_expr(args_dict) 31 32 def testTastExprB64(self): 33 tast_expr = '''("group:mainline" && !informational)''' 34 tast_expr_b64 = _base64_encode_str(tast_expr) 35 args_dict = {'tast_expr_b64': tast_expr_b64} 36 self.assertEqual(chrome_sideloader.get_tast_expr(args_dict), tast_expr) 37 38 def testTastExprB64Corrupted(self): 39 tast_expr = '''("group:mainline" && !informational)''' 40 tast_expr_b64 = _base64_encode_str(tast_expr) 41 # remove last character to corrupt the encoding 42 tast_expr_b64 = tast_expr_b64[:-1] 43 args_dict = {'tast_expr_b64': tast_expr_b64} 44 with self.assertRaises(Exception): 45 chrome_sideloader.get_tast_expr(args_dict) 46 47 def testTastFileWithKey(self): 48 read_data = '{"default": "(\\"group:mainline\\" && !informational)"}' 49 file_mock = mock.mock_open(read_data=read_data) 50 args_dict = { 51 'tast_expr_file': 'mocked_file', 52 'tast_expr_key': 'default' 53 } 54 with mock.patch('builtins.open', file_mock),\ 55 mock.patch('os.stat'),\ 56 mock.patch('os.chmod'): 57 expr = chrome_sideloader.get_tast_expr_from_file( 58 TestGetTastExpr.MockHost(), args_dict, 'mock/path/') 59 self.assertEqual('("group:mainline" && !informational)', expr) 60 61 62def _base64_encode_str(s): 63 return base64.b64encode(s.encode('utf-8')).decode('ascii') 64 65 66if __name__ == '__main__': 67 unittest.main() 68