blob: 608f32c85c5fdc4fc8929719632dd44117e3292a [file] [log] [blame]
# Copyright 2022 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 base64
import unittest
from unittest import mock
from autotest_lib.server.cros import chrome_sideloader
class TestGetTastExpr(unittest.TestCase):
"""Test GetTastExpr in ChromeSideloader library."""
class MockHost:
def path_exists(self, path):
return True
def get_file(self, src, dst, delete_dest):
pass
def testTastExpr(self):
tast_expr = "lacros.Basic"
args_dict = {'tast_expr': tast_expr}
self.assertEqual(chrome_sideloader.get_tast_expr(args_dict), tast_expr)
def testEmptyArgsDict(self):
args_dict = {}
with self.assertRaises(Exception):
chrome_sideloader.get_tast_expr(args_dict)
def testTastExprB64(self):
tast_expr = '''("group:mainline" && !informational)'''
tast_expr_b64 = _base64_encode_str(tast_expr)
args_dict = {'tast_expr_b64': tast_expr_b64}
self.assertEqual(chrome_sideloader.get_tast_expr(args_dict), tast_expr)
def testTastExprB64Corrupted(self):
tast_expr = '''("group:mainline" && !informational)'''
tast_expr_b64 = _base64_encode_str(tast_expr)
# remove last character to corrupt the encoding
tast_expr_b64 = tast_expr_b64[:-1]
args_dict = {'tast_expr_b64': tast_expr_b64}
with self.assertRaises(Exception):
chrome_sideloader.get_tast_expr(args_dict)
def testTastFileWithKey(self):
read_data = '{"default": "(\\"group:mainline\\" && !informational)"}'
file_mock = mock.mock_open(read_data=read_data)
args_dict = {
'tast_expr_file': 'mocked_file',
'tast_expr_key': 'default'
}
with mock.patch('builtins.open', file_mock),\
mock.patch('os.stat'),\
mock.patch('os.chmod'):
expr = chrome_sideloader.get_tast_expr_from_file(
TestGetTastExpr.MockHost(), args_dict, 'mock/path/')
self.assertEqual('("group:mainline" && !informational)', expr)
def _base64_encode_str(s):
return base64.b64encode(s.encode('utf-8')).decode('ascii')
if __name__ == '__main__':
unittest.main()