xref: /aosp_15_r20/external/autotest/server/cros/chrome_sideloader_unittest.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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