parent
913760a6a9
commit
4dfd34f002
1 changed files with 58 additions and 0 deletions
@ -0,0 +1,58 @@ |
|||||||
|
#!/usr/bin/env python3 |
||||||
|
|
||||||
|
# Copyright 2020 The gRPC Authors |
||||||
|
# |
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
# you may not use this file except in compliance with the License. |
||||||
|
# You may obtain a copy of the License at |
||||||
|
# |
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
# |
||||||
|
# Unless required by applicable law or agreed to in writing, software |
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
# See the License for the specific language governing permissions and |
||||||
|
# limitations under the License. |
||||||
|
|
||||||
|
# Helper script to extract JSON scenario definitions from scenario_config.py |
||||||
|
|
||||||
|
import json |
||||||
|
import re |
||||||
|
import scenario_config |
||||||
|
import sys |
||||||
|
|
||||||
|
|
||||||
|
def get_json_scenarios(language_name, scenario_name_regex='.*', category='all'): |
||||||
|
"""Returns list of scenarios that match given constraints.""" |
||||||
|
result = [] |
||||||
|
scenarios = scenario_config.LANGUAGES[language_name].scenarios() |
||||||
|
for scenario_json in scenarios: |
||||||
|
if re.search(scenario_name_regex, scenario_json['name']): |
||||||
|
# if the 'CATEGORIES' key is missing, treat scenario as part of 'scalable' and 'smoketest' |
||||||
|
# this matches the behavior of run_performance_tests.py |
||||||
|
scenario_categories = scenario_json.get('CATEGORIES', |
||||||
|
['scalable', 'smoketest']) |
||||||
|
# TODO(jtattermusch): consider adding filtering for 'CLIENT_LANGUAGE' and 'SERVER_LANGUAGE' |
||||||
|
# fields, before the get stripped away. |
||||||
|
if category in scenario_categories or category == 'all': |
||||||
|
scenario_json_stripped = scenario_config.remove_nonproto_fields( |
||||||
|
scenario_json) |
||||||
|
result.append(scenario_json_stripped) |
||||||
|
return result |
||||||
|
|
||||||
|
|
||||||
|
def dump_to_json_files(json_scenarios, filename_prefix='scenario_dump_'): |
||||||
|
"""Dump a list of json scenarios to json files""" |
||||||
|
for scenario in json_scenarios: |
||||||
|
filename = "%s%s.json" % (filename_prefix, scenario['name']) |
||||||
|
print('Writing file %s' % filename, file=sys.stderr) |
||||||
|
with open(filename, 'w') as outfile: |
||||||
|
json.dump(scenario, outfile, indent=2) |
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__": |
||||||
|
# example usage: extract C# scenarios and dump them as .json files |
||||||
|
scenarios = get_json_scenarios('csharp', |
||||||
|
scenario_name_regex='.*', |
||||||
|
category='scalable') |
||||||
|
dump_to_json_files(scenarios, 'scenario_dump_') |
Loading…
Reference in new issue