summaryrefslogtreecommitdiffstats
path: root/tests/test_git_trace2_event_log.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_git_trace2_event_log.py')
-rw-r--r--tests/test_git_trace2_event_log.py72
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'))