1#!/usr/bin/env python2.7 2# Copyright 2015 gRPC authors. 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15"""Generates the appropriate build.json data for all the naming tests.""" 16 17import collections 18import hashlib 19import json 20 21import yaml 22 23_LOCAL_DNS_SERVER_ADDRESS = "127.0.0.1:15353" 24 25 26def _append_zone_name(name, zone_name): 27 return "%s.%s" % (name, zone_name) 28 29 30def _build_expected_addrs_cmd_arg(expected_addrs): 31 out = [] 32 for addr in expected_addrs: 33 out.append("%s,%s" % (addr["address"], str(addr["is_balancer"]))) 34 return ";".join(out) 35 36 37def _resolver_test_cases(resolver_component_data): 38 out = [] 39 for test_case in resolver_component_data["resolver_component_tests"]: 40 target_name = _append_zone_name( 41 test_case["record_to_resolve"], 42 resolver_component_data["resolver_tests_common_zone_name"], 43 ) 44 out.append( 45 { 46 "test_title": target_name, 47 "arg_names_and_values": [ 48 ("target_name", target_name), 49 ( 50 "do_ordered_address_comparison", 51 test_case["do_ordered_address_comparison"], 52 ), 53 ( 54 "expected_addrs", 55 _build_expected_addrs_cmd_arg( 56 test_case["expected_addrs"] 57 ), 58 ), 59 ( 60 "expected_chosen_service_config", 61 (test_case["expected_chosen_service_config"] or ""), 62 ), 63 ( 64 "expected_service_config_error", 65 (test_case["expected_service_config_error"] or ""), 66 ), 67 ( 68 "expected_lb_policy", 69 (test_case["expected_lb_policy"] or ""), 70 ), 71 ("enable_srv_queries", test_case["enable_srv_queries"]), 72 ("enable_txt_queries", test_case["enable_txt_queries"]), 73 ( 74 "inject_broken_nameserver_list", 75 test_case["inject_broken_nameserver_list"], 76 ), 77 ], 78 } 79 ) 80 return out 81 82 83def main(): 84 resolver_component_data = "" 85 with open("test/cpp/naming/resolver_test_record_groups.yaml") as f: 86 resolver_component_data = yaml.safe_load(f) 87 88 json = { 89 "resolver_tests_common_zone_name": resolver_component_data[ 90 "resolver_tests_common_zone_name" 91 ], 92 # this data is required by the resolver_component_tests_runner.py.template 93 "resolver_component_test_cases": _resolver_test_cases( 94 resolver_component_data 95 ), 96 } 97 98 print(yaml.safe_dump(json)) 99 100 101if __name__ == "__main__": 102 main() 103