| import mock |
| from tools.wpt import revlist |
| |
| |
| def test_calculate_cutoff_date(): |
| assert revlist.calculate_cutoff_date(3601, 3600, 0) == 3600 |
| assert revlist.calculate_cutoff_date(3600, 3600, 0) == 3600 |
| assert revlist.calculate_cutoff_date(3599, 3600, 0) == 0 |
| assert revlist.calculate_cutoff_date(3600, 3600, 1) == 1 |
| assert revlist.calculate_cutoff_date(3600, 3600, -1) == 3599 |
| |
| |
| def test_parse_epoch(): |
| assert revlist.parse_epoch("10h") == 36000 |
| assert revlist.parse_epoch("10d") == 864000 |
| assert revlist.parse_epoch("10w") == 6048000 |
| |
| def check_revisions(tagged_revisions, expected_revisions): |
| for tagged, expected in zip(tagged_revisions, expected_revisions): |
| assert tagged == expected |
| |
| @mock.patch('subprocess.check_output') |
| def test_get_epoch_revisions(mocked_check_output): |
| # check: |
| # |
| # * Several revisions in the same epoch offset (BC, DEF, HIJ, and LM) |
| # * Revision with a timestamp exactly equal to the epoch boundary (H) |
| # * Revision in non closed interval (O) |
| # |
| # mon tue wed thu fri sat sun mon thu wed |
| # | | | | | | | | | |
| # -A---B-C---DEF---G---H--IJ----------K-----L-M----N--O-- |
| # ^ |
| # until |
| # max_count: 5; epoch: 1d |
| # Expected result: N,M,K,J,G,F,C,A |
| epoch = 86400 |
| until = 1188000 # Wednesday, 14 January 1970 18:00:00 UTC |
| mocked_check_output.return_value = b''' |
| merge_pr_O O 1166400 _wed_ |
| merge_pr_N N 1080000 _tue_ |
| merge_pr_M M 1015200 _mon_ |
| merge_pr_L L 993600 _mon_ |
| merge_pr_K K 907200 _sun_ |
| merge_pr_J J 734400 _fri_ |
| merge_pr_I I 712800 _fri_ |
| merge_pr_H H 691200 _fri_ |
| merge_pr_G G 648000 _thu_ |
| merge_pr_F F 583200 _wed_ |
| merge_pr_E E 561600 _wed_ |
| merge_pr_D D 540000 _wed_ |
| merge_pr_C C 475200 _tue_ |
| merge_pr_B B 453600 _tue_ |
| merge_pr_A A 388800 _mon_ |
| ''' |
| tagged_revisions = revlist.get_epoch_revisions(epoch, until, 8) |
| check_revisions(tagged_revisions, ['N', 'M', 'K', 'J', 'G', 'F', 'C', 'A']) |
| assert len(list(tagged_revisions)) == 0 # generator exhausted |
| |
| |
| # check: max_count with enough candidate items in the revision list |
| # |
| # mon tue wed thu fri sat sun mon |
| # | | | | | | | |
| # ------B-----C-----D----E-----F-----G------H--- |
| # ^ |
| # until |
| # max_count: 5; epoch: 1d |
| # Expected result: G,F,E,D,C |
| epoch = 86400 |
| until = 1015200 # Monday, 12 January 1970 18:00:00 UTC |
| mocked_check_output.return_value = b''' |
| merge_pr_H H 993600 _mon_ |
| merge_pr_G G 907200 _sun_ |
| merge_pr_F F 820800 _sat_ |
| merge_pr_E E 734400 _fri_ |
| merge_pr_D D 648000 _thu_ |
| merge_pr_C C 561600 _wed_ |
| merge_pr_B B 475200 _thu_ |
| ''' |
| tagged_revisions = revlist.get_epoch_revisions(epoch, until, 5) |
| check_revisions(tagged_revisions, ['G', 'F', 'E', 'D', 'C']) |
| assert len(list(tagged_revisions)) == 0 # generator exhausted |
| |
| |
| # check: max_count with less returned candidates items than the needed |
| # |
| # mon tue wed thu fri sat sun mon |
| # | | | | | | | |
| # -----------------------------F-----G------H--- |
| # ^ |
| # until |
| # max_count: 5; epoch: 1d |
| # Expected result: G,F |
| epoch = 86400 |
| until = 1015200 # Monday, 12 January 1970 18:00:00 UTC |
| mocked_check_output.return_value = b''' |
| merge_pr_H H 993600 _mon_ |
| merge_pr_G G 907200 _sun_ |
| merge_pr_F F 820800 _sat_ |
| ''' |
| tagged_revisions = revlist.get_epoch_revisions(epoch, until, 5) |
| check_revisions(tagged_revisions, ['G', 'F']) |
| assert len(list(tagged_revisions)) == 0 # generator exhausted |
| |
| |
| # check: initial until value is on an epoch boundary |
| # |
| # sud mon tue wed thu |
| # | | | | |
| # -F-G-----------------H |
| # ^ |
| # until |
| # max_count: 3; epoch: 1d |
| # Expected result: G,F |
| # * H is skipped because because the epoch |
| # interval is defined as an right-open interval |
| # * G is included but in the Monday's interval |
| # * F is included because it is the unique candidate |
| # included in the Sunday's interval |
| epoch = 86400 |
| until = 1296000 # Thursday, 15 January 1970 0:00:00 UTC |
| mocked_check_output.return_value = b''' |
| merge_pr_H H 1296000 _wed_ |
| merge_pr_G G 950400 _mon_ |
| merge_pr_F F 921600 _sud_ |
| ''' |
| tagged_revisions = revlist.get_epoch_revisions(epoch, until, 3) |
| check_revisions(tagged_revisions, ['G', 'F']) |
| assert len(list(tagged_revisions)) == 0 # generator exhausted |
| |
| |
| # check: until aligned with Monday, 5 January 1970 0:00:00 (345600) |
| # not with Thursday, 1 January 1970 0:00:00 (0) |
| # |
| # sud mon tue wed thu |
| # | | | | |
| # -F-G--------------H--- |
| # ^ |
| # until |
| # max_count: 1; epoch: 1w |
| # Expected result: F |
| epoch = 604800 |
| moday = 950400 # Monday, 12 January 1970 00:00:00 UTC |
| until = moday + 345600 # 1296000. Thursday, 15 January 1970 0:00:00 UTC |
| mocked_check_output.return_value = b''' |
| merge_pr_H H 1180800 _wed_ |
| merge_pr_G G 950400 _mon_ |
| merge_pr_F F 921600 _sud_ |
| ''' |
| tagged_revisions = revlist.get_epoch_revisions(epoch, until, 1) |
| check_revisions(tagged_revisions, ['F']) |
| assert len(list(tagged_revisions)) == 0 # generator exhausted |