xref: /aosp_15_r20/external/aws-sdk-java-v2/scripts/run-integ-test (revision 8a52c7834d808308836a99fc2a6e0ed8db339086)
1*8a52c783SCole Faust#!/usr/bin/env python
2*8a52c783SCole Faust"""Run Integ Tests based on the changed files
3*8a52c783SCole Faust
4*8a52c783SCole Faust"""
5*8a52c783SCole Faustfrom subprocess import call, check_call, Popen, PIPE
6*8a52c783SCole Faust
7*8a52c783SCole Faust# Minimal modules to tests when core changes are detected.
8*8a52c783SCole Faust# s3 - xml, dynamodb - json, sqs - query
9*8a52c783SCole Faustcore_modules_to_test = ["s3", "dynamodb", "sqs"]
10*8a52c783SCole Faust
11*8a52c783SCole Faust# Minimal modules to tests when http client changes are detected.
12*8a52c783SCole Faust# s3 - streaming/non streaming, kinesis - h2
13*8a52c783SCole Fausthttp_modules_to_test = {
14*8a52c783SCole Faust    "apache-client": ["s3", "apache-client"],
15*8a52c783SCole Faust    "netty-nio-client": ["kinesis", "s3", "netty-nio-client"],
16*8a52c783SCole Faust    "url-connection-client": ["url-connection-client"]
17*8a52c783SCole Faust}
18*8a52c783SCole Faust
19*8a52c783SCole Faustdef check_diffs():
20*8a52c783SCole Faust    """
21*8a52c783SCole Faust    Retrieve the changed files
22*8a52c783SCole Faust    """
23*8a52c783SCole Faust    process = Popen(["git", "diff", "HEAD^", "--name-only"], stdout=PIPE)
24*8a52c783SCole Faust
25*8a52c783SCole Faust    diff, stderr = process.communicate()
26*8a52c783SCole Faust
27*8a52c783SCole Faust    if process.returncode !=0:
28*8a52c783SCole Faust        raise Exception("Unable to do git diff")
29*8a52c783SCole Faust    return diff.splitlines(False)
30*8a52c783SCole Faust
31*8a52c783SCole Faustdef get_modules(file_path):
32*8a52c783SCole Faust    """
33*8a52c783SCole Faust    Parse the changed file path and get the respective module names
34*8a52c783SCole Faust    """
35*8a52c783SCole Faust    path = file_path.split('/')
36*8a52c783SCole Faust
37*8a52c783SCole Faust    # filter out non-java file
38*8a52c783SCole Faust    if not path[-1].endswith(".java"):
39*8a52c783SCole Faust        return
40*8a52c783SCole Faust
41*8a52c783SCole Faust    top_directory = path[0]
42*8a52c783SCole Faust
43*8a52c783SCole Faust    if top_directory in ["core", "codegen"]:
44*8a52c783SCole Faust        return core_modules_to_test
45*8a52c783SCole Faust    if top_directory in ["http-clients"]:
46*8a52c783SCole Faust        return http_modules_to_test.get(path[1])
47*8a52c783SCole Faust    elif top_directory== "services":
48*8a52c783SCole Faust        return path[1]
49*8a52c783SCole Faust
50*8a52c783SCole Faustdef run_tests(modules):
51*8a52c783SCole Faust    """
52*8a52c783SCole Faust    Run integration tests for the given modules
53*8a52c783SCole Faust    """
54*8a52c783SCole Faust    print("Running integ tests in the following modules: " + ', '.join(modules))
55*8a52c783SCole Faust    modules_to_include = ""
56*8a52c783SCole Faust
57*8a52c783SCole Faust    for m in modules:
58*8a52c783SCole Faust        modules_to_include += ":" + m + ","
59*8a52c783SCole Faust
60*8a52c783SCole Faust    # remove last comma
61*8a52c783SCole Faust    modules_to_include = modules_to_include[:-1]
62*8a52c783SCole Faust
63*8a52c783SCole Faust    # build necessary dependencies first
64*8a52c783SCole Faust    check_call(["mvn", "clean", "install", "-pl", modules_to_include, "-P", "quick", "--am"])
65*8a52c783SCole Faust    check_call(["mvn", "verify", "-pl", modules_to_include, "-P", "integration-tests", "-Dfailsafe.rerunFailingTestsCount=1"])
66*8a52c783SCole Faust
67*8a52c783SCole Faustif __name__ == "__main__":
68*8a52c783SCole Faust    diffs = check_diffs()
69*8a52c783SCole Faust    modules = set()
70*8a52c783SCole Faust    for d in diffs:
71*8a52c783SCole Faust        module = get_modules(d)
72*8a52c783SCole Faust        if isinstance(module, list):
73*8a52c783SCole Faust            modules.update(module)
74*8a52c783SCole Faust        elif module:
75*8a52c783SCole Faust            modules.add(module)
76*8a52c783SCole Faust
77*8a52c783SCole Faust    if modules:
78*8a52c783SCole Faust        run_tests(modules)
79*8a52c783SCole Faust    else:
80*8a52c783SCole Faust        print("No modules configured to run. Skipping integ tests")
81