blob: b4f13edb39e19f465481bade46cdb7d278d08b66 [file] [log] [blame]
Haiyang Pane33028c2024-10-25 20:03:581#!/usr/bin/env vpython3
2#
3# Copyright 2024 The Chromium Authors
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7import unittest
8
9from unittest import mock
10
11import test_runner
12
13
Haiyang Panbb722192025-03-25 23:17:0114class UploadTestScriptRecordsTest(unittest.TestCase):
Haiyang Pane33028c2024-10-25 20:03:5815
16 def setUp(self):
17 self.sink_client = mock.MagicMock()
18 self.exc_recorder = mock.MagicMock()
Haiyang Panbb722192025-03-25 23:17:0119 self.mm_recorder = mock.MagicMock()
Haiyang Pane33028c2024-10-25 20:03:5820
Haiyang Panbb722192025-03-25 23:17:0121 def testNoRecords(self):
Haiyang Pane33028c2024-10-25 20:03:5822 self.exc_recorder.size.return_value = 0
Haiyang Panbb722192025-03-25 23:17:0123 self.mm_recorder.size.return_value = 0
24 test_runner.UploadTestScriptRecords(self.sink_client, self.exc_recorder,
25 self.mm_recorder)
Haiyang Pane33028c2024-10-25 20:03:5826 self.exc_recorder.to_dict.assert_not_called()
Haiyang Panbb722192025-03-25 23:17:0127 self.mm_recorder.to_dict.assert_not_called()
Haiyang Pane33028c2024-10-25 20:03:5828 self.sink_client.UpdateInvocationExtendedProperties.assert_not_called()
29
30 def testUploadSuccess(self):
Haiyang Panbb722192025-03-25 23:17:0131 test_runner.UploadTestScriptRecords(self.sink_client, self.exc_recorder,
32 self.mm_recorder)
Haiyang Pane33028c2024-10-25 20:03:5833 self.exc_recorder.to_dict.assert_called_once()
Haiyang Panbb722192025-03-25 23:17:0134 self.mm_recorder.to_dict.assert_called_once()
Haiyang Pane33028c2024-10-25 20:03:5835 self.sink_client.UpdateInvocationExtendedProperties.assert_called_once()
36 self.exc_recorder.clear.assert_called_once()
Haiyang Panbb722192025-03-25 23:17:0137 self.mm_recorder.clear.assert_called_once()
Haiyang Pane33028c2024-10-25 20:03:5838
39 def testUploadSuccessWithClearStacktrace(self):
40 self.sink_client.UpdateInvocationExtendedProperties.side_effect = [
41 Exception("Error 1"), None
42 ]
Haiyang Panbb722192025-03-25 23:17:0143 test_runner.UploadTestScriptRecords(self.sink_client, self.exc_recorder,
44 self.mm_recorder)
Haiyang Pane33028c2024-10-25 20:03:5845 self.assertEqual(self.exc_recorder.to_dict.call_count, 2)
Haiyang Panbb722192025-03-25 23:17:0146 self.assertEqual(self.mm_recorder.to_dict.call_count, 2)
Haiyang Pane33028c2024-10-25 20:03:5847 self.assertEqual(
48 self.sink_client.UpdateInvocationExtendedProperties.call_count, 2)
49 self.exc_recorder.clear_stacktrace.assert_called_once()
50 self.exc_recorder.clear.assert_called_once()
Haiyang Panbb722192025-03-25 23:17:0151 self.mm_recorder.clear.assert_called_once()
Haiyang Pane33028c2024-10-25 20:03:5852
53 def testUploadSuccessWithClearRecords(self):
54 self.sink_client.UpdateInvocationExtendedProperties.side_effect = [
55 Exception("Error 1"), Exception("Error 2"), None
56 ]
Haiyang Panbb722192025-03-25 23:17:0157 test_runner.UploadTestScriptRecords(self.sink_client, self.exc_recorder,
58 self.mm_recorder)
Haiyang Pane33028c2024-10-25 20:03:5859 self.assertEqual(self.exc_recorder.to_dict.call_count, 3)
Haiyang Panbb722192025-03-25 23:17:0160 self.assertEqual(self.mm_recorder.to_dict.call_count, 3)
Haiyang Pane33028c2024-10-25 20:03:5861 self.assertEqual(
62 self.sink_client.UpdateInvocationExtendedProperties.call_count, 3)
63 self.exc_recorder.clear_stacktrace.assert_called_once()
64 self.assertEqual(self.exc_recorder.clear.call_count, 2)
65 self.exc_recorder.register.assert_called_once()
Haiyang Panbb722192025-03-25 23:17:0166 self.mm_recorder.clear.assert_called_once()
Haiyang Pane33028c2024-10-25 20:03:5867
68 def testUploadFailure(self):
69 self.sink_client.UpdateInvocationExtendedProperties.side_effect = (
70 Exception("Error"))
Haiyang Panbb722192025-03-25 23:17:0171 test_runner.UploadTestScriptRecords(self.sink_client, self.exc_recorder,
72 self.mm_recorder)
Haiyang Pane33028c2024-10-25 20:03:5873 self.assertEqual(self.exc_recorder.to_dict.call_count, 3)
Haiyang Panbb722192025-03-25 23:17:0174 self.assertEqual(self.mm_recorder.to_dict.call_count, 3)
Haiyang Pane33028c2024-10-25 20:03:5875 self.assertEqual(
76 self.sink_client.UpdateInvocationExtendedProperties.call_count, 3)
77 self.assertEqual(self.exc_recorder.clear.call_count, 2)
78 self.exc_recorder.clear_stacktrace.assert_called_once()
79 self.exc_recorder.register.assert_called_once()
Haiyang Panbb722192025-03-25 23:17:0180 self.mm_recorder.clear.assert_called_once()
Ben Joyce0184a582025-05-14 22:56:3581
82
Ben Joyced8e192292025-05-20 18:52:2683class TestRunnerHelperTest(unittest.TestCase):
84
85 def testCreateStructuredTestDict(self):
86 # pylint: disable=protected-access
87 t_instance_mock = mock.MagicMock()
88 t_result_mock = mock.MagicMock()
89 test_id = 'foo.bar.class#test1[28]'
90 t_result_mock.GetNameForResultSink.return_value = test_id
91 t_instance_mock.suite = 'foo_suite'
92
93 # junit tests
94 t_instance_mock.TestType.return_value = 'junit'
95 test_dict = test_runner._CreateStructuredTestDict(t_instance_mock,
96 t_result_mock)
97 self.assertEqual(test_dict['coarseName'], 'foo.bar')
98 self.assertEqual(test_dict['fineName'], 'class')
99 self.assertTrue('test1[28]' in test_dict['caseNameComponents'])
100
101 # instrumentation tests
102 t_instance_mock.TestType.return_value = 'instrumentation'
103 test_dict = test_runner._CreateStructuredTestDict(t_instance_mock,
104 t_result_mock)
105 self.assertEqual(test_dict['coarseName'], 'foo.bar')
106 self.assertEqual(test_dict['fineName'], 'class')
107 self.assertTrue('test1[28]' in test_dict['caseNameComponents'])
108
109 # Can't be parsed as an instrumentation test as it's missing the #.
110 test_id = 'foo.bar.class.test1[28]'
111 t_result_mock.GetNameForResultSink.return_value = test_id
112 test_dict = test_runner._CreateStructuredTestDict(t_instance_mock,
113 t_result_mock)
114 self.assertIsNone(test_dict)
115
116 test_id = 'foo.bar.class$parameter#test1[28]'
117 t_result_mock.GetNameForResultSink.return_value = test_id
118 test_dict = test_runner._CreateStructuredTestDict(t_instance_mock,
119 t_result_mock)
120 self.assertEqual(test_dict['coarseName'], 'foo.bar')
121 self.assertEqual(test_dict['fineName'], 'class$parameter')
122 self.assertTrue('test1[28]' in test_dict['caseNameComponents'])
123
124 # gtest
125 t_instance_mock.TestType.return_value = 'gtest'
126 test_id = 'foo.bar.class.test1[28]'
127 t_result_mock.GetNameForResultSink.return_value = test_id
128 test_dict = test_runner._CreateStructuredTestDict(t_instance_mock,
129 t_result_mock)
130 self.assertIsNone(test_dict['coarseName'])
131 self.assertEqual(test_dict['fineName'], 'foo_suite')
132 self.assertTrue(test_id in test_dict['caseNameComponents'])
133 # pylint: disable=protected-access
134
135
Ben Joyce0184a582025-05-14 22:56:35136if __name__ == '__main__':
137 # Suppress logging messages.
138 unittest.main(buffer=True)