xref: /aosp_15_r20/external/mesa3d/bin/commit_in_branch_test.py (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Workerimport argparse
2*61046927SAndroid Build Coastguard Workerimport pytest  # type: ignore
3*61046927SAndroid Build Coastguard Workerimport subprocess
4*61046927SAndroid Build Coastguard Worker
5*61046927SAndroid Build Coastguard Workerfrom .commit_in_branch import (
6*61046927SAndroid Build Coastguard Worker    is_commit_valid,
7*61046927SAndroid Build Coastguard Worker    branch_has_commit,
8*61046927SAndroid Build Coastguard Worker    branch_has_backport_of_commit,
9*61046927SAndroid Build Coastguard Worker    canonicalize_commit,
10*61046927SAndroid Build Coastguard Worker    validate_branch,
11*61046927SAndroid Build Coastguard Worker)
12*61046927SAndroid Build Coastguard Worker
13*61046927SAndroid Build Coastguard Worker
14*61046927SAndroid Build Coastguard Workerdef get_upstream() -> str:
15*61046927SAndroid Build Coastguard Worker    # Let's assume main is bound to the upstream remote and not a fork
16*61046927SAndroid Build Coastguard Worker    out = subprocess.check_output(['git', 'for-each-ref',
17*61046927SAndroid Build Coastguard Worker                                   '--format=%(upstream)',
18*61046927SAndroid Build Coastguard Worker                                   'refs/heads/main'],
19*61046927SAndroid Build Coastguard Worker                                  stderr=subprocess.DEVNULL)
20*61046927SAndroid Build Coastguard Worker    return out.decode().strip().split('/')[2]
21*61046927SAndroid Build Coastguard Worker
22*61046927SAndroid Build Coastguard Worker
23*61046927SAndroid Build Coastguard Worker@pytest.mark.parametrize(
24*61046927SAndroid Build Coastguard Worker    'commit, expected',
25*61046927SAndroid Build Coastguard Worker    [
26*61046927SAndroid Build Coastguard Worker        ('20.1-branchpoint', True),
27*61046927SAndroid Build Coastguard Worker        ('main', True),
28*61046927SAndroid Build Coastguard Worker        ('e58a10af640ba58b6001f5c5ad750b782547da76', True),
29*61046927SAndroid Build Coastguard Worker        ('d043d24654c851f0be57dbbf48274b5373dea42b', True),
30*61046927SAndroid Build Coastguard Worker        ('dd2bd68fa69124c86cd008b256d06f44fab8e6cd', True),
31*61046927SAndroid Build Coastguard Worker        ('0000000000000000000000000000000000000000', False),
32*61046927SAndroid Build Coastguard Worker        ('not-even-a-valid-commit-format', False),
33*61046927SAndroid Build Coastguard Worker    ])
34*61046927SAndroid Build Coastguard Workerdef test_canonicalize_commit(commit: str, expected: bool) -> None:
35*61046927SAndroid Build Coastguard Worker    if expected:
36*61046927SAndroid Build Coastguard Worker        assert canonicalize_commit(commit)
37*61046927SAndroid Build Coastguard Worker    else:
38*61046927SAndroid Build Coastguard Worker        try:
39*61046927SAndroid Build Coastguard Worker            assert canonicalize_commit(commit)
40*61046927SAndroid Build Coastguard Worker        except argparse.ArgumentTypeError:
41*61046927SAndroid Build Coastguard Worker            return
42*61046927SAndroid Build Coastguard Worker        assert False
43*61046927SAndroid Build Coastguard Worker
44*61046927SAndroid Build Coastguard Worker
45*61046927SAndroid Build Coastguard Worker@pytest.mark.parametrize(
46*61046927SAndroid Build Coastguard Worker    'commit, expected',
47*61046927SAndroid Build Coastguard Worker    [
48*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', True),
49*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/staging/20.1', True),
50*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/main', True),
51*61046927SAndroid Build Coastguard Worker        ('20.1', False),
52*61046927SAndroid Build Coastguard Worker        ('main', False),
53*61046927SAndroid Build Coastguard Worker        ('e58a10af640ba58b6001f5c5ad750b782547da76', False),
54*61046927SAndroid Build Coastguard Worker        ('d043d24654c851f0be57dbbf48274b5373dea42b', False),
55*61046927SAndroid Build Coastguard Worker        ('dd2bd68fa69124c86cd008b256d06f44fab8e6cd', False),
56*61046927SAndroid Build Coastguard Worker        ('0000000000000000000000000000000000000000', False),
57*61046927SAndroid Build Coastguard Worker        ('not-even-a-valid-commit-format', False),
58*61046927SAndroid Build Coastguard Worker    ])
59*61046927SAndroid Build Coastguard Workerdef test_validate_branch(commit: str, expected: bool) -> None:
60*61046927SAndroid Build Coastguard Worker    if expected:
61*61046927SAndroid Build Coastguard Worker        assert validate_branch(commit)
62*61046927SAndroid Build Coastguard Worker    else:
63*61046927SAndroid Build Coastguard Worker        try:
64*61046927SAndroid Build Coastguard Worker            assert validate_branch(commit)
65*61046927SAndroid Build Coastguard Worker        except argparse.ArgumentTypeError:
66*61046927SAndroid Build Coastguard Worker            return
67*61046927SAndroid Build Coastguard Worker        assert False
68*61046927SAndroid Build Coastguard Worker
69*61046927SAndroid Build Coastguard Worker
70*61046927SAndroid Build Coastguard Worker@pytest.mark.parametrize(
71*61046927SAndroid Build Coastguard Worker    'commit, expected',
72*61046927SAndroid Build Coastguard Worker    [
73*61046927SAndroid Build Coastguard Worker        ('main', True),
74*61046927SAndroid Build Coastguard Worker        ('20.1-branchpoint', True),
75*61046927SAndroid Build Coastguard Worker        ('20.1', False),
76*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', True),
77*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/staging/20.1', True),
78*61046927SAndroid Build Coastguard Worker        ('e58a10af640ba58b6001f5c5ad750b782547da76', True),
79*61046927SAndroid Build Coastguard Worker        ('d043d24654c851f0be57dbbf48274b5373dea42b', True),
80*61046927SAndroid Build Coastguard Worker        ('dd2bd68fa69124c86cd008b256d06f44fab8e6cd', True),
81*61046927SAndroid Build Coastguard Worker        ('0000000000000000000000000000000000000000', False),
82*61046927SAndroid Build Coastguard Worker        ('not-even-a-valid-commit-format', False),
83*61046927SAndroid Build Coastguard Worker    ])
84*61046927SAndroid Build Coastguard Workerdef test_is_commit_valid(commit: str, expected: bool) -> None:
85*61046927SAndroid Build Coastguard Worker    assert is_commit_valid(commit) == expected
86*61046927SAndroid Build Coastguard Worker
87*61046927SAndroid Build Coastguard Worker
88*61046927SAndroid Build Coastguard Worker@pytest.mark.parametrize(
89*61046927SAndroid Build Coastguard Worker    'branch, commit, expected',
90*61046927SAndroid Build Coastguard Worker    [
91*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', '20.1-branchpoint', True),
92*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', '20.0', False),
93*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', 'main', False),
94*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', 'e58a10af640ba58b6001f5c5ad750b782547da76', True),
95*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', 'd043d24654c851f0be57dbbf48274b5373dea42b', True),
96*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/staging/20.1', 'd043d24654c851f0be57dbbf48274b5373dea42b', True),
97*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', False),
98*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/main', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', True),
99*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.0', 'd043d24654c851f0be57dbbf48274b5373dea42b', False),
100*61046927SAndroid Build Coastguard Worker    ])
101*61046927SAndroid Build Coastguard Workerdef test_branch_has_commit(branch: str, commit: str, expected: bool) -> None:
102*61046927SAndroid Build Coastguard Worker    assert branch_has_commit(branch, commit) == expected
103*61046927SAndroid Build Coastguard Worker
104*61046927SAndroid Build Coastguard Worker
105*61046927SAndroid Build Coastguard Worker@pytest.mark.parametrize(
106*61046927SAndroid Build Coastguard Worker    'branch, commit, expected',
107*61046927SAndroid Build Coastguard Worker    [
108*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', 'd043d24654c851f0be57dbbf48274b5373dea42b'),
109*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/staging/20.1', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', 'd043d24654c851f0be57dbbf48274b5373dea42b'),
110*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', '20.1-branchpoint', ''),
111*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', '20.0', ''),
112*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', '20.2', 'abac4859618e02aea00f705b841a7c5c5007ad1a'),
113*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', 'main', ''),
114*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.1', 'd043d24654c851f0be57dbbf48274b5373dea42b', ''),
115*61046927SAndroid Build Coastguard Worker        (get_upstream() + '/20.0', 'dd2bd68fa69124c86cd008b256d06f44fab8e6cd', '8cd4f57381cefe69019a3282d457d5bda3644030'),
116*61046927SAndroid Build Coastguard Worker    ])
117*61046927SAndroid Build Coastguard Workerdef test_branch_has_backport_of_commit(branch: str, commit: str, expected: bool) -> None:
118*61046927SAndroid Build Coastguard Worker    assert branch_has_backport_of_commit(branch, commit) == expected
119