| #!/usr/bin/env vpython |
| # Copyright 2021 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Tests for local_device_gtest_test_run.""" |
| |
| # pylint: disable=protected-access |
| |
| from __future__ import absolute_import |
| import os |
| import tempfile |
| import unittest |
| |
| from pylib.gtest import gtest_test_instance |
| from pylib.local.device import local_device_environment |
| from pylib.local.device import local_device_gtest_run |
| from py_utils import tempfile_ext |
| |
| import mock # pylint: disable=import-error |
| |
| |
| class LocalDeviceGtestRunTest(unittest.TestCase): |
| def setUp(self): |
| self._obj = local_device_gtest_run.LocalDeviceGtestRun( |
| mock.MagicMock(spec=local_device_environment.LocalDeviceEnvironment), |
| mock.MagicMock(spec=gtest_test_instance.GtestTestInstance)) |
| |
| def testExtractTestsFromFilter(self): |
| # Checks splitting by colons. |
| self.assertEqual([ |
| 'b17', |
| 'm4e3', |
| 'p51', |
| ], local_device_gtest_run._ExtractTestsFromFilter('b17:m4e3:p51')) |
| # Checks the '-' sign. |
| self.assertIsNone(local_device_gtest_run._ExtractTestsFromFilter('-mk2')) |
| # Checks the more than one asterick. |
| self.assertIsNone( |
| local_device_gtest_run._ExtractTestsFromFilter('.mk2*:.M67*')) |
| # Checks just an asterick without a period |
| self.assertIsNone(local_device_gtest_run._ExtractTestsFromFilter('M67*')) |
| # Checks an asterick at the end with a period. |
| self.assertEqual(['.M67*'], |
| local_device_gtest_run._ExtractTestsFromFilter('.M67*')) |
| |
| def testGetLLVMProfilePath(self): |
| path = local_device_gtest_run._GetLLVMProfilePath('test_dir', 'sr71', '5') |
| self.assertEqual(path, os.path.join('test_dir', 'sr71_5_%2m.profraw')) |
| |
| @mock.patch('subprocess.check_output') |
| def testMergeCoverageFiles(self, mock_sub): |
| with tempfile_ext.NamedTemporaryDirectory() as cov_tempd: |
| pro_tempd = os.path.join(cov_tempd, 'profraw') |
| os.mkdir(pro_tempd) |
| profdata = tempfile.NamedTemporaryFile( |
| dir=pro_tempd, |
| delete=False, |
| suffix=local_device_gtest_run._PROFRAW_FILE_EXTENSION) |
| local_device_gtest_run._MergeCoverageFiles(cov_tempd, pro_tempd) |
| # Merged file should be deleted. |
| self.assertFalse(os.path.exists(profdata.name)) |
| self.assertTrue(mock_sub.called) |
| |
| @mock.patch('pylib.utils.google_storage_helper.upload') |
| def testUploadTestArtifacts(self, mock_gsh): |
| link = self._obj._UploadTestArtifacts(mock.MagicMock(), None) |
| self.assertFalse(mock_gsh.called) |
| self.assertIsNone(link) |
| |
| result = 'A/10/warthog/path' |
| mock_gsh.return_value = result |
| with tempfile_ext.NamedTemporaryFile() as temp_f: |
| link = self._obj._UploadTestArtifacts(mock.MagicMock(), temp_f) |
| self.assertTrue(mock_gsh.called) |
| self.assertEqual(result, link) |
| |
| |
| if __name__ == '__main__': |
| unittest.main(verbosity=2) |