Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1085)

Unified Diff: testing/variations/PRESUBMIT.py

Issue 1180693002: Update from https://crrev.com/333737 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rebased Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « testing/test.gni ('k') | testing/variations/fieldtrial_testing_config.json » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: testing/variations/PRESUBMIT.py
diff --git a/testing/variations/PRESUBMIT.py b/testing/variations/PRESUBMIT.py
new file mode 100644
index 0000000000000000000000000000000000000000..9e565e03d7b6b938b3efc3ce546ac779ec84634b
--- /dev/null
+++ b/testing/variations/PRESUBMIT.py
@@ -0,0 +1,83 @@
+# Copyright 2015 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.
+
+"""Presubmit script validating field trial configs.
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details on the presubmit API built into depot_tools.
+"""
+
+def ValidateData(json_data, file_path, message_type):
+ """Validates the format of a fieldtrial configuration.
+
+ Args:
+ json_data: Parsed JSON object representing the fieldtrial config.
+ file_path: String representing the path to the JSON file.
+ message_type: Type of message from |output_api| to return in the case of
+ errors/warnings.
+
+ Returns:
+ A list of |message_type| messages. In the case of all tests passing with no
+ warnings/errors, this will return [].
+ """
+ if not isinstance(json_data, dict):
+ return [message_type(
+ 'Malformed config file %s: Expecting dict' % file_path)]
+ for (study, groups) in json_data.iteritems():
+ if not isinstance(study, unicode):
+ return [message_type(
+ 'Malformed config file %s: Expecting keys to be string, got %s'
+ % (file_path, type(study)))]
+ if not isinstance(groups, list):
+ return [message_type(
+ 'Malformed config file %s: Expecting list for study %s'
+ % (file_path, study))]
+ for group in groups:
+ if not isinstance(group, dict):
+ return [message_type(
+ 'Malformed config file %s: Expecting dict for group in '
+ 'Study[%s]' % (file_path, study))]
+ if not 'group_name' in group or not isinstance(group['group_name'],
+ unicode):
+ return [message_type(
+ 'Malformed config file %s: Missing valid group_name for group'
+ ' in Study[%s]' % (file_path, study))]
+ if 'params' in group:
+ params = group['params']
+ if not isinstance(params, dict):
+ return [message_type(
+ 'Malformed config file %s: Invalid params for Group[%s]'
+ ' in Study[%s]' % (file_path, group['group_name'],
+ study))]
+ for (key, value) in params.iteritems():
+ if not isinstance(key, unicode) or not isinstance(value,
+ unicode):
+ return [message_type(
+ 'Malformed config file %s: Invalid params for Group[%s]'
+ ' in Study[%s]' % (file_path, group['group_name'],
+ study))]
+ return []
+
+def CommonChecks(input_api, output_api):
+ affected_files = input_api.AffectedFiles(
+ include_deletes=False,
+ file_filter=lambda x: x.LocalPath().endswith('.json'))
+ for f in affected_files:
+ contents = input_api.ReadFile(f)
+ try:
+ json_data = input_api.json.loads(contents)
+ result = ValidateData(json_data, f.LocalPath(),
+ output_api.PresubmitError)
+ if len(result):
+ return result
+ except ValueError:
+ return [output_api.PresubmitError(
+ 'Malformed JSON file: %s' % f.LocalPath())]
+ return []
+
+def CheckChangeOnUpload(input_api, output_api):
+ return CommonChecks(input_api, output_api)
+
+def CheckChangeOnCommit(input_api, output_api):
+ return CommonChecks(input_api, output_api)
« no previous file with comments | « testing/test.gni ('k') | testing/variations/fieldtrial_testing_config.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698