# 用于检查配置 yaml 中的测试用例与实际的 Kong 路由是否匹配,避免有其他高优先级的路由配置抢占了 import dns.resolver import requests import yaml FILE_PATH = "../deploy/configs/formal.yaml" DNS_HOST = "k8s-kongingressalb-ea55959e45-1906132441.us-west-2.elb.amazonaws.com" REQUEST_HOST = "us-west-2.prod.aws.tidbcloud.com" resolver = dns.resolver.Resolver(configure=False) resolver.nameservers = ["119.29.29.29"] answer = resolver.resolve(DNS_HOST, "A") ip = answer.response.answer[0].to_text().split("\n")[0].split(" ")[-1] configs = yaml.safe_load(open(FILE_PATH)) for config in configs: for case in config["test_cases"]: url = "http://{}{}".format(ip, case) resp = requests.get( url, headers={ "Host": REQUEST_HOST, "kong-debug": "1", }, allow_redirects=False, ) service_name = resp.headers.get("Kong-Service-Name") if service_name is None: print("`{}` can't match any route".format(case)) raise namespace, name, port = service_name.split(".") if config["serviceName"] != name: print( "`{}` serviceName unmatch, expect: {}, but got: {}".format( case, config["serviceName"], name ) ) raise if not port.endswith(str(config["servicePort"])): print( "`{}` servicePort unmatch, expect: {}, but got: {}".format( case, config["servicePort"], port ) ) raise print("`{}` success".format(case))