summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaman Tenneti <rtenneti@google.com>2021-09-27 10:55:44 -0700
committerRaman Tenneti <rtenneti@google.com>2021-09-27 19:11:14 +0000
commit956f7363d100abe6c1f58b36d7aea59b9e41cd04 (patch)
tree1974f54a33adea2fc321f735ba1efe00c96b0189
parent6f8c1bf4ff1c8cd210e00f0514eec3864967c8a5 (diff)
downloadgit-repo-956f7363d100abe6c1f58b36d7aea59b9e41cd04.tar.gz
superproject: Log argv parameter of syncstate as 'data-json'.
Fixed: "we need to make a special case for logging the argv; it should probably be a "data-json" event so that we log this directly as an array rather than an encoded string. Tested: $ repo_dev sync Verified event logged for argv is "data-json". $./run_tests Bug: [google internal] b/201102002 Change-Id: I18ccec79c73c8dc931cb8afc472b2361db8aea4c Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/319055 Reviewed-by: Josh Steadmon <steadmon@google.com> Reviewed-by: Xin Li <delphij@google.com> Tested-by: Raman Tenneti <rtenneti@google.com>
-rw-r--r--git_trace2_event_log.py6
-rw-r--r--tests/test_git_trace2_event_log.py11
2 files changed, 12 insertions, 5 deletions
diff --git a/git_trace2_event_log.py b/git_trace2_event_log.py
index 92c4cc6b..0d4f23f4 100644
--- a/git_trace2_event_log.py
+++ b/git_trace2_event_log.py
@@ -167,6 +167,10 @@ class EventLog(object):
167 repo_config = {k: v for k, v in config.items() if k.startswith('repo.')} 167 repo_config = {k: v for k, v in config.items() if k.startswith('repo.')}
168 self.LogConfigEvents(repo_config, 'def_param') 168 self.LogConfigEvents(repo_config, 'def_param')
169 169
170 def GetDataEventName(self, key):
171 """Returns the 'data-json' if the key is argv else returns 'data'."""
172 return 'data-json' if key.endswith('sys.argv') else 'data'
173
170 def LogDataConfigEvents(self, config, prefix): 174 def LogDataConfigEvents(self, config, prefix):
171 """Append a 'data' event for each config key/value in |config| to the current log. 175 """Append a 'data' event for each config key/value in |config| to the current log.
172 176
@@ -178,7 +182,7 @@ class EventLog(object):
178 prefix: Prefix for each key that is logged. 182 prefix: Prefix for each key that is logged.
179 """ 183 """
180 for key, value in config.items(): 184 for key, value in config.items():
181 event = self._CreateEventDict('data') 185 event = self._CreateEventDict(self.GetDataEventName(key))
182 event['key'] = f'{prefix}/{key}' 186 event['key'] = f'{prefix}/{key}'
183 event['value'] = value 187 event['value'] = value
184 self._log.append(event) 188 self._log.append(event)
diff --git a/tests/test_git_trace2_event_log.py b/tests/test_git_trace2_event_log.py
index a5a6cbba..6131c7b3 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:
@@ -246,6 +247,7 @@ class EventLogTestCase(unittest.TestCase):
246 'git.foo': 'bar', 247 'git.foo': 'bar',
247 'repo.partialclone': 'false', 248 'repo.partialclone': 'false',
248 'repo.syncstate.superproject.hassuperprojecttag': 'true', 249 'repo.syncstate.superproject.hassuperprojecttag': 'true',
250 'repo.syncstate.superproject.sys.argv': ['--', 'sync', 'protobuf'],
249 } 251 }
250 prefix_value = 'prefix' 252 prefix_value = 'prefix'
251 self._event_log_module.LogDataConfigEvents(config, prefix_value) 253 self._event_log_module.LogDataConfigEvents(config, prefix_value)
@@ -254,17 +256,18 @@ class EventLogTestCase(unittest.TestCase):
254 log_path = self._event_log_module.Write(path=tempdir) 256 log_path = self._event_log_module.Write(path=tempdir)
255 self._log_data = self.readLog(log_path) 257 self._log_data = self.readLog(log_path)
256 258
257 self.assertEqual(len(self._log_data), 4) 259 self.assertEqual(len(self._log_data), 5)
258 data_events = self._log_data[1:] 260 data_events = self._log_data[1:]
259 self.verifyCommonKeys(self._log_data[0], expected_event_name='version') 261 self.verifyCommonKeys(self._log_data[0], expected_event_name='version')
260 262
261 for event in data_events: 263 for event in data_events:
262 self.verifyCommonKeys(event, expected_event_name='data') 264 self.verifyCommonKeys(event)
263 # Check for 'data' event specific fields. 265 # Check for 'data' event specific fields.
264 self.assertIn('key', event) 266 self.assertIn('key', event)
265 self.assertIn('value', event) 267 self.assertIn('value', event)
266 key = event['key'].removeprefix(f'{prefix_value}/') 268 key = event['key'].removeprefix(f'{prefix_value}/')
267 value = event['value'] 269 value = event['value']
270 self.assertEqual(self._event_log_module.GetDataEventName(key), event['event'])
268 self.assertTrue(key in config and value == config[key]) 271 self.assertTrue(key in config and value == config[key])
269 272
270 def test_error_event(self): 273 def test_error_event(self):