diff options
Diffstat (limited to 'tests/test_git_trace2_event_log.py')
-rw-r--r-- | tests/test_git_trace2_event_log.py | 72 |
1 files changed, 70 insertions, 2 deletions
diff --git a/tests/test_git_trace2_event_log.py b/tests/test_git_trace2_event_log.py index 4a3a4c48..89dcfb92 100644 --- a/tests/test_git_trace2_event_log.py +++ b/tests/test_git_trace2_event_log.py | |||
@@ -42,7 +42,7 @@ class EventLogTestCase(unittest.TestCase): | |||
42 | self._event_log_module = git_trace2_event_log.EventLog(env=env) | 42 | self._event_log_module = git_trace2_event_log.EventLog(env=env) |
43 | self._log_data = None | 43 | self._log_data = None |
44 | 44 | ||
45 | def verifyCommonKeys(self, log_entry, expected_event_name, full_sid=True): | 45 | def verifyCommonKeys(self, log_entry, expected_event_name=None, full_sid=True): |
46 | """Helper function to verify common event log keys.""" | 46 | """Helper function to verify common event log keys.""" |
47 | self.assertIn('event', log_entry) | 47 | self.assertIn('event', log_entry) |
48 | self.assertIn('sid', log_entry) | 48 | self.assertIn('sid', log_entry) |
@@ -50,7 +50,8 @@ class EventLogTestCase(unittest.TestCase): | |||
50 | self.assertIn('time', log_entry) | 50 | self.assertIn('time', log_entry) |
51 | 51 | ||
52 | # Do basic data format validation. | 52 | # Do basic data format validation. |
53 | self.assertEqual(expected_event_name, log_entry['event']) | 53 | if expected_event_name: |
54 | self.assertEqual(expected_event_name, log_entry['event']) | ||
54 | if full_sid: | 55 | if full_sid: |
55 | self.assertRegex(log_entry['sid'], self.FULL_SID_REGEX) | 56 | self.assertRegex(log_entry['sid'], self.FULL_SID_REGEX) |
56 | else: | 57 | else: |
@@ -65,6 +66,13 @@ class EventLogTestCase(unittest.TestCase): | |||
65 | log_data.append(json.loads(line)) | 66 | log_data.append(json.loads(line)) |
66 | return log_data | 67 | return log_data |
67 | 68 | ||
69 | def remove_prefix(self, s, prefix): | ||
70 | """Return a copy string after removing |prefix| from |s|, if present or the original string.""" | ||
71 | if s.startswith(prefix): | ||
72 | return s[len(prefix):] | ||
73 | else: | ||
74 | return s | ||
75 | |||
68 | def test_initial_state_with_parent_sid(self): | 76 | def test_initial_state_with_parent_sid(self): |
69 | """Test initial state when 'GIT_TRACE2_PARENT_SID' is set by parent.""" | 77 | """Test initial state when 'GIT_TRACE2_PARENT_SID' is set by parent.""" |
70 | self.assertRegex(self._event_log_module.full_sid, self.FULL_SID_REGEX) | 78 | self.assertRegex(self._event_log_module.full_sid, self.FULL_SID_REGEX) |
@@ -234,6 +242,66 @@ class EventLogTestCase(unittest.TestCase): | |||
234 | self.assertEqual(len(self._log_data), 1) | 242 | self.assertEqual(len(self._log_data), 1) |
235 | self.verifyCommonKeys(self._log_data[0], expected_event_name='version') | 243 | self.verifyCommonKeys(self._log_data[0], expected_event_name='version') |
236 | 244 | ||
245 | def test_data_event_config(self): | ||
246 | """Test 'data' event data outputs all config keys. | ||
247 | |||
248 | Expected event log: | ||
249 | <version event> | ||
250 | <data event> | ||
251 | <data event> | ||
252 | """ | ||
253 | config = { | ||
254 | 'git.foo': 'bar', | ||
255 | 'repo.partialclone': 'false', | ||
256 | 'repo.syncstate.superproject.hassuperprojecttag': 'true', | ||
257 | 'repo.syncstate.superproject.sys.argv': ['--', 'sync', 'protobuf'], | ||
258 | } | ||
259 | prefix_value = 'prefix' | ||
260 | self._event_log_module.LogDataConfigEvents(config, prefix_value) | ||
261 | |||
262 | with tempfile.TemporaryDirectory(prefix='event_log_tests') as tempdir: | ||
263 | log_path = self._event_log_module.Write(path=tempdir) | ||
264 | self._log_data = self.readLog(log_path) | ||
265 | |||
266 | self.assertEqual(len(self._log_data), 5) | ||
267 | data_events = self._log_data[1:] | ||
268 | self.verifyCommonKeys(self._log_data[0], expected_event_name='version') | ||
269 | |||
270 | for event in data_events: | ||
271 | self.verifyCommonKeys(event) | ||
272 | # Check for 'data' event specific fields. | ||
273 | self.assertIn('key', event) | ||
274 | self.assertIn('value', event) | ||
275 | key = event['key'] | ||
276 | key = self.remove_prefix(key, f'{prefix_value}/') | ||
277 | value = event['value'] | ||
278 | self.assertEqual(self._event_log_module.GetDataEventName(value), event['event']) | ||
279 | self.assertTrue(key in config and value == config[key]) | ||
280 | |||
281 | def test_error_event(self): | ||
282 | """Test and validate 'error' event data is valid. | ||
283 | |||
284 | Expected event log: | ||
285 | <version event> | ||
286 | <error event> | ||
287 | """ | ||
288 | msg = 'invalid option: --cahced' | ||
289 | fmt = 'invalid option: %s' | ||
290 | self._event_log_module.ErrorEvent(msg, fmt) | ||
291 | with tempfile.TemporaryDirectory(prefix='event_log_tests') as tempdir: | ||
292 | log_path = self._event_log_module.Write(path=tempdir) | ||
293 | self._log_data = self.readLog(log_path) | ||
294 | |||
295 | self.assertEqual(len(self._log_data), 2) | ||
296 | error_event = self._log_data[1] | ||
297 | self.verifyCommonKeys(self._log_data[0], expected_event_name='version') | ||
298 | self.verifyCommonKeys(error_event, expected_event_name='error') | ||
299 | # Check for 'error' event specific fields. | ||
300 | self.assertIn('msg', error_event) | ||
301 | self.assertIn('fmt', error_event) | ||
302 | self.assertEqual(error_event['msg'], msg) | ||
303 | self.assertEqual(error_event['fmt'], fmt) | ||
304 | |||
237 | def test_write_with_filename(self): | 305 | def test_write_with_filename(self): |
238 | """Test Write() with a path to a file exits with None.""" | 306 | """Test Write() with a path to a file exits with None.""" |
239 | self.assertIsNone(self._event_log_module.Write(path='path/to/file')) | 307 | self.assertIsNone(self._event_log_module.Write(path='path/to/file')) |