xref: /aosp_15_r20/external/autotest/server/cros/chrome_sideloader_unittest.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li# Copyright 2022 The Chromium OS Authors. All rights reserved.
2*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be
3*9c5db199SXin Li# found in the LICENSE file.
4*9c5db199SXin Li
5*9c5db199SXin Liimport base64
6*9c5db199SXin Liimport unittest
7*9c5db199SXin Lifrom unittest import mock
8*9c5db199SXin Li
9*9c5db199SXin Lifrom autotest_lib.server.cros import chrome_sideloader
10*9c5db199SXin Li
11*9c5db199SXin Li
12*9c5db199SXin Liclass TestGetTastExpr(unittest.TestCase):
13*9c5db199SXin Li    """Test GetTastExpr in ChromeSideloader library."""
14*9c5db199SXin Li
15*9c5db199SXin Li    class MockHost:
16*9c5db199SXin Li        def path_exists(self, path):
17*9c5db199SXin Li            return True
18*9c5db199SXin Li
19*9c5db199SXin Li        def get_file(self, src, dst, delete_dest):
20*9c5db199SXin Li            pass
21*9c5db199SXin Li
22*9c5db199SXin Li    def testTastExpr(self):
23*9c5db199SXin Li        tast_expr = "lacros.Basic"
24*9c5db199SXin Li        args_dict = {'tast_expr': tast_expr}
25*9c5db199SXin Li        self.assertEqual(chrome_sideloader.get_tast_expr(args_dict), tast_expr)
26*9c5db199SXin Li
27*9c5db199SXin Li    def testEmptyArgsDict(self):
28*9c5db199SXin Li        args_dict = {}
29*9c5db199SXin Li        with self.assertRaises(Exception):
30*9c5db199SXin Li            chrome_sideloader.get_tast_expr(args_dict)
31*9c5db199SXin Li
32*9c5db199SXin Li    def testTastExprB64(self):
33*9c5db199SXin Li        tast_expr = '''("group:mainline" && !informational)'''
34*9c5db199SXin Li        tast_expr_b64 = _base64_encode_str(tast_expr)
35*9c5db199SXin Li        args_dict = {'tast_expr_b64': tast_expr_b64}
36*9c5db199SXin Li        self.assertEqual(chrome_sideloader.get_tast_expr(args_dict), tast_expr)
37*9c5db199SXin Li
38*9c5db199SXin Li    def testTastExprB64Corrupted(self):
39*9c5db199SXin Li        tast_expr = '''("group:mainline" && !informational)'''
40*9c5db199SXin Li        tast_expr_b64 = _base64_encode_str(tast_expr)
41*9c5db199SXin Li        # remove last character to corrupt the encoding
42*9c5db199SXin Li        tast_expr_b64 = tast_expr_b64[:-1]
43*9c5db199SXin Li        args_dict = {'tast_expr_b64': tast_expr_b64}
44*9c5db199SXin Li        with self.assertRaises(Exception):
45*9c5db199SXin Li            chrome_sideloader.get_tast_expr(args_dict)
46*9c5db199SXin Li
47*9c5db199SXin Li    def testTastFileWithKey(self):
48*9c5db199SXin Li        read_data = '{"default": "(\\"group:mainline\\" && !informational)"}'
49*9c5db199SXin Li        file_mock = mock.mock_open(read_data=read_data)
50*9c5db199SXin Li        args_dict = {
51*9c5db199SXin Li                'tast_expr_file': 'mocked_file',
52*9c5db199SXin Li                'tast_expr_key': 'default'
53*9c5db199SXin Li        }
54*9c5db199SXin Li        with mock.patch('builtins.open', file_mock),\
55*9c5db199SXin Li            mock.patch('os.stat'),\
56*9c5db199SXin Li            mock.patch('os.chmod'):
57*9c5db199SXin Li            expr = chrome_sideloader.get_tast_expr_from_file(
58*9c5db199SXin Li                    TestGetTastExpr.MockHost(), args_dict, 'mock/path/')
59*9c5db199SXin Li            self.assertEqual('("group:mainline" && !informational)', expr)
60*9c5db199SXin Li
61*9c5db199SXin Li
62*9c5db199SXin Lidef _base64_encode_str(s):
63*9c5db199SXin Li    return base64.b64encode(s.encode('utf-8')).decode('ascii')
64*9c5db199SXin Li
65*9c5db199SXin Li
66*9c5db199SXin Liif __name__ == '__main__':
67*9c5db199SXin Li    unittest.main()
68