tools/scripts/endpoints_checker.py (101 lines of code) (raw):
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0.
#
import os
import re
"""
endpoints = [
"us-east-1", "us-east-2",
"us-west-1", "us-west-2",
"eu-west-1", "eu-west-2", "eu-west-3",
"eu-central-1",
"eu-north-1",
"ap-southeast-1", "ap-southeast-2",
"ap-northeast-1", "ap-northeast-2", "ap-northeast-3",
"ap-south-1",
"ap-east-1",
"sa-east-1",
"cn-north-1",
"cn-northwest-1",
"ca-central-1",
"us-gov-west-1","us-gov-east-1",
"us-iso-west-1",
"me-south-1",
"af-south-1"
];
"""
def remove_cpp_comments(text):
def replacer(match):
s = match.group(0)
if s.startswith('/'):
return " " # int/**/x=5 -> int x=5, instead of intx=5.
else:
return s
pattern = re.compile(r'//.*?$|/\*.*?\*/|"(?:\\.|[^\\"])*"', re.DOTALL | re.MULTILINE)
return re.sub(pattern, replacer, text)
def skip_file(filename):
skip_file_pattern = re.compile(r'.*source/model/BucketLocationConstraint.cpp'
'|.*source/S3Client.cpp'
'|.*source/model/.*Region.*.cpp'
'|.*source/[^/]+Endpoint.cpp'
'|.*aws-cpp-sdk-core/include/aws/core/Region.h'
'|.*tests/.*Test.cpp'
# add more white lists here
)
if skip_file_pattern.match(filename):
return True
return False
def scan_content(content):
endpoints_pattern = re.compile(
r'us-east-1|us-east-2|'
r'us-west-1|us-west-2|'
r'eu-west-1|eu-west-2|eu-west-3|'
r'eu-central-1|'
r'eu-north-1|'
r'ap-southeast-1|ap-southeast-2|'
r'ap-northeast-1|ap-northeast-2|ap-northeast-3|'
r'ap-south-1|'
r'ap-east-1|'
r'sa-east-1|'
r'cn-north-1|'
r'cn-northwest-1|'
r'ca-central-1|'
r'us-gov-west-1|us-gov-east-1|'
r'us-iso-west-1|'
r'me-south-1|'
r'af-south-1')
return re.search(endpoints_pattern, content)
def check_file(input_file):
if skip_file(input_file):
return False
with open(input_file) as input_file_handler:
content = input_file_handler.read()
stripped_content = remove_cpp_comments(content)
match = scan_content(stripped_content)
if match:
print(input_file)
print("..." + stripped_content[match.start(): match.end()] + "...")
return True
return False
def main():
# Test Start
assert remove_cpp_comments("") == ""
assert remove_cpp_comments("/") == "/"
assert remove_cpp_comments("//") == " "
assert remove_cpp_comments("abc//test") == "abc "
assert remove_cpp_comments("//test") == " "
assert remove_cpp_comments("abc") == "abc"
assert remove_cpp_comments("/abc") == "/abc"
assert remove_cpp_comments("/abc/") == "/abc/"
assert remove_cpp_comments("/**/") == " "
assert remove_cpp_comments("/*") == "/*"
assert remove_cpp_comments("*/") == "*/"
assert remove_cpp_comments("/*/") == "/*/"
assert remove_cpp_comments("\"") == "\""
assert remove_cpp_comments(r'"Hello \"/*test*/World\""') == r'"Hello \"/*test*/World\""'
assert remove_cpp_comments("/*abc*/") == " "
assert remove_cpp_comments(r'abc="//"//comments') == r'abc="//" '
assert remove_cpp_comments(r'abc="/*inner comments*/"/*\
multiline\
comments*/') == r'abc="/*inner comments*/" '
assert skip_file("source/model/Regionabc.cpp") is True
assert skip_file("source/model/abcRegion.cpp") is True
assert skip_file("source/abcEndpoint.cpp") is True
assert skip_file("aws-cpp-sdk-core/include/aws/core/Region.h") is True
assert skip_file("aws-cpp-sdk-s3/source/model/BucketLocationConstraint.cpp") is True
assert skip_file("aws-cpp-sdk-s3/source/S3Client.cpp") is True
assert skip_file("source/model/abc.cpp") is False
assert skip_file("source/model/absEndpoint.cpp") is False
assert skip_file("source/model/Endpointabs.cpp") is False
assert skip_file("Endpoint.cpp") is False
assert scan_content("us-west-1") is not None
assert scan_content("avbcap-southeast-1") is not None
assert scan_content("eu-central-1") is not None
assert scan_content("\"cn-north-1 is in BJS\"") is not None
assert scan_content("\"cn-north-2 doesn't exist\"") is None
# Test End
print("Start checking hard coded endpoints in source files...")
exit_code = 0
root_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
for root, dirnames, file_names in os.walk(root_dir):
for fileName in file_names:
if not root.endswith('-tests') and fileName.endswith(('.h', '.cpp')):
target_file = os.path.join(root, fileName)
exit_code |= check_file(target_file)
print("Finished checking hard coded endpoints in source files with exit code", exit_code, ".")
exit(exit_code)
if __name__ == "__main__":
main()