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