Index: infra/services/gnumbd/test/gnumbd_smoketests.py |
diff --git a/infra/services/gnumbd/test/gnumbd_smoketests.py b/infra/services/gnumbd/test/gnumbd_smoketests.py |
deleted file mode 100644 |
index ee2c3953897ccd8e87414883c04fb1a990ba3af5..0000000000000000000000000000000000000000 |
--- a/infra/services/gnumbd/test/gnumbd_smoketests.py |
+++ /dev/null |
@@ -1,507 +0,0 @@ |
-# Copyright 2014 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-import collections |
- |
-from infra.services.gnumbd import inner_loop as gnumbd |
-content_of = gnumbd.content_of |
- |
-REAL = 'refs/heads/master' |
-PEND = 'refs/pending/heads/master' |
-PEND_TAG = 'refs/pending-tags/heads/master' |
- |
-BRANCH = 'refs/branch-heads/cool_branch' |
-BRANCH_PEND = 'refs/pending/branch-heads/cool_branch' |
-BRANCH_TAG = 'refs/pending-tags/branch-heads/cool_branch' |
- |
- |
-GNUMBD_TESTS = {} |
-def gnumbd_test(f): |
- GNUMBD_TESTS[f.__name__] = f |
- return f |
- |
- |
-# Error cases |
-@gnumbd_test |
-def no_real_ref(origin, _local, _config_ref, RUN, CHECKPOINT): |
- origin[PEND].synthesize_commit('Hello world') |
- CHECKPOINT('One commit in origin') |
- RUN() |
- CHECKPOINT('Origin should not have changed') |
- |
- |
-@gnumbd_test |
-def no_pending_tag(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- origin[PEND].update_to(base_commit) |
- origin[PEND].synthesize_commit('Hello world') |
- CHECKPOINT('Two commits in origin') |
- RUN() |
- CHECKPOINT('Origin should not have changed') |
- |
- |
-@gnumbd_test |
-def bad_position_footer(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit( |
- 'Base commit', footers={gnumbd.COMMIT_POSITION: ['BlobbyGumpus!']}) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- origin[PEND].synthesize_commit('Hello world') |
- CHECKPOINT('Bad master commit footer') |
- RUN() |
- CHECKPOINT('Should be the same') |
- assert origin[REAL].commit == base_commit |
- |
- |
-@gnumbd_test |
-def bad_svn_footer(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit( |
- 'Base commit', footers={gnumbd.GIT_SVN_ID: ['BlobbyGumpus!']}) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- origin[PEND].synthesize_commit('Hello world') |
- CHECKPOINT('Bad master commit footer') |
- RUN() |
- CHECKPOINT('Should be the same') |
- assert origin[REAL].commit == base_commit |
- |
- |
-@gnumbd_test |
-def no_position_footer(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit( |
- 'Base commit', footers={'Sup': ['Not a footer']}) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- origin[PEND].synthesize_commit('Hello world') |
- CHECKPOINT('Master has no position footer') |
- RUN() |
- CHECKPOINT('Should be the same') |
- assert origin[REAL].commit == base_commit |
- |
- |
-@gnumbd_test |
-def merge_commits_fail(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- o_commit = origin['refs/heads/other'].synthesize_commit('Incoming merge!', 20) |
- m_commit = base_commit.alter( |
- parents=(base_commit.hsh, o_commit.hsh), |
- message_lines=['Two for one!'], |
- footers={k: None for k in base_commit.data.footers} |
- ) |
- |
- origin[PEND].update_to(m_commit) |
- origin[PEND].synthesize_commit('Hello world') |
- |
- CHECKPOINT('The setup.') |
- RUN() |
- CHECKPOINT('Should be the same') |
- |
- |
-@gnumbd_test |
-def manual_merge_commits_ok(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- |
- o_commit = origin['refs/heads/other'].synthesize_commit('Incoming merge!', 20) |
- footers = {k: None for k in base_commit.data.footers} |
- footers[gnumbd.COMMIT_POSITION] = ['refs/heads/master@{#101}'] |
- |
- m_commit = base_commit.alter( |
- parents=(base_commit.hsh, o_commit.hsh), |
- message_lines=['Two for one!'], |
- footers=footers |
- ) |
- origin[REAL].update_to(m_commit) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(m_commit) |
- |
- origin[PEND].synthesize_commit('Hello world') |
- |
- CHECKPOINT('The setup.') |
- RUN() |
- CHECKPOINT('Hello world landed w/o a hitch') |
- |
- |
-@gnumbd_test |
-def no_number_on_parent(origin, local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base without number') |
- user_commit = origin[PEND].synthesize_commit('Hello world') |
- CHECKPOINT('One commit in origin') |
- RUN() |
- CHECKPOINT('Should still only have 1 commit') |
- assert local[PEND].commit == user_commit |
- assert local[REAL].commit == base_commit |
- |
- |
-# Normal cases |
-@gnumbd_test |
-def incoming_svn_id_drops(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100, svn=True) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- user_commit = origin[PEND].synthesize_commit('Hello world') |
- CHECKPOINT('Two commits in origin') |
- RUN() |
- CHECKPOINT('Hello world should be 101') |
- assert content_of(origin[REAL].commit) == content_of(user_commit) |
- assert origin[REAL].commit.parent == base_commit |
- |
- |
-# pending > master == tag |
-@gnumbd_test |
-def normal_update(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- user_commit = origin[PEND].synthesize_commit('Hello world') |
- CHECKPOINT('Two commits') |
- RUN() |
- CHECKPOINT('Hello world should be 101') |
- assert content_of(origin[REAL].commit) == content_of(user_commit) |
- assert origin[REAL].commit.parent == base_commit |
- |
- |
-# master == pending == tag |
-@gnumbd_test |
-def steady_state(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- user_commit = origin[PEND].synthesize_commit('Hello world') |
- RUN(include_log=False) |
- CHECKPOINT('Hello world should be 101') |
- RUN() |
- CHECKPOINT('Hello world should still be 101') |
- assert content_of(origin[REAL].commit) == content_of(user_commit) |
- assert origin[REAL].commit.parent == base_commit |
- |
- |
-# master == pending > tag |
-@gnumbd_test |
-def tag_lagging_no_actual(origin, _local, _config_ref, RUN, CHECKPOINT): |
- origin[REAL].synthesize_commit('Root commit', 99) |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- user_commit = origin[PEND].synthesize_commit('Hello world') |
- |
- RUN(include_log=False) |
- origin[PEND_TAG].update_to(origin[PEND_TAG].commit.parent.parent) |
- |
- CHECKPOINT('Tag on root (2 behind pend)') |
- RUN() |
- CHECKPOINT('Tag caught up') |
- assert content_of(origin[REAL].commit) == content_of(user_commit) |
- assert origin[REAL].commit.parent == base_commit |
- assert origin[PEND_TAG].commit == origin[PEND].commit |
- |
- |
-# pending > master > tag |
-@gnumbd_test |
-def tag_lagging(origin, _local, _config_ref, RUN, CHECKPOINT): |
- origin[REAL].synthesize_commit('Root commit', 99) |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- origin[PEND].synthesize_commit('Hello world') |
- |
- RUN(include_log=False) |
- landed_commit = origin[REAL].commit |
- |
- origin[PEND_TAG].update_to(origin[PEND_TAG].commit.parent.parent) |
- user_commit = origin[PEND].synthesize_commit('New commit') |
- |
- CHECKPOINT('Tag on root (3 behind pend). Real 1 behind pend') |
- RUN() |
- CHECKPOINT('Tag + pending caught up') |
- assert content_of(origin[REAL].commit) == content_of(user_commit) |
- assert origin[REAL].commit.parent == landed_commit |
- assert origin[PEND_TAG].commit == origin[PEND].commit |
- |
- |
-@gnumbd_test |
-def multi_pending(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- user_commit1 = origin[PEND].synthesize_commit('Hello world') |
- user_commit2 = origin[PEND].synthesize_commit('Cat food') |
- CHECKPOINT('Two pending commits') |
- RUN() |
- CHECKPOINT('And now they\'re on master') |
- assert content_of(origin[REAL].commit.parent) == content_of(user_commit1) |
- assert content_of(origin[REAL].commit) == content_of(user_commit2) |
- assert origin[REAL].commit.parent.parent == base_commit |
- |
- |
-# Inconsistency |
- |
-# tag > pending |
-# Implicitly covers: |
-# * master > tag > pending |
-# * tag > pending > master |
-# * tag > master > pending |
-# * tag > pending == master |
-@gnumbd_test |
-def master_tag_ahead_pending(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- origin[PEND].synthesize_commit('Hello world') |
- RUN(include_log=False) |
- |
- origin[PEND].update_to(base_commit) |
- CHECKPOINT('Master and tag ahead of pending') |
- RUN() |
- CHECKPOINT('Should see errors and no change') |
- |
- |
-# pending > tag > master |
-@gnumbd_test |
-def normal_with_master_lag(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- origin[PEND].synthesize_commit('Hello world') |
- RUN(include_log=False) |
- |
- # master moves back |
- origin[REAL].update_to(base_commit) |
- |
- # pending gets a new commit |
- origin[PEND].synthesize_commit('New pending') |
- |
- CHECKPOINT('Master is behind, pending is ahead of tag') |
- RUN() |
- CHECKPOINT('Should see errors and no change') |
- |
- # fix by rewinding tag |
- origin[PEND_TAG].update_to(origin[PEND_TAG].commit.parent) |
- CHECKPOINT('Fix by rewinding tag') |
- RUN() |
- CHECKPOINT('All better') |
- |
- |
-@gnumbd_test |
-def master_ahead_tag_ahead_pending(origin, _local, _config_ref, RUN, |
- CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- origin[REAL].synthesize_commit('Directly landed commit!') |
- origin[PEND_TAG].synthesize_commit('Tag ahead of pending') |
- |
- CHECKPOINT('Master and tag have diverged, pend lags') |
- RUN() |
- CHECKPOINT('Should have errored and nothing changed') |
- |
- |
-# master > pending == tag |
-@gnumbd_test |
-def master_ahead(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- base_commit = origin[REAL].synthesize_commit('Directly landed commit!') |
- |
- CHECKPOINT('Master contains a commit whose content isn\'t in pending') |
- RUN() |
- CHECKPOINT('Should have errored and nothing changed') |
- assert origin[REAL].commit == base_commit |
- |
- |
-# pending == tag > master |
-@gnumbd_test |
-def master_behind(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- user_commit = origin[PEND].synthesize_commit('Hello world') |
- origin[PEND_TAG].update_to(user_commit) |
- CHECKPOINT('Master should have new commit but does not') |
- RUN() |
- CHECKPOINT('Error and no change') |
- |
- |
-# master > pending > tag |
-@gnumbd_test |
-def master_mismatch_and_pend(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- origin[PEND].synthesize_commit('Hello world') |
- |
- base_commit = origin[REAL].synthesize_commit('Directly landed commit!') |
- |
- CHECKPOINT('Master contains a commit whose content isn\'t in pending') |
- RUN() |
- CHECKPOINT('Should have errored and nothing changed') |
- assert origin[REAL].commit == base_commit |
- |
- |
-# Branching |
-@gnumbd_test |
-def branch(origin, _local, config_ref, RUN, CHECKPOINT): |
- new_globs = config_ref['enabled_refglobs'] + ['refs/branch-heads/*'] |
- config_ref.update(enabled_refglobs=new_globs) |
- |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- origin[PEND].synthesize_commit('Hello world') |
- CHECKPOINT('Pending commit', include_config=True) |
- RUN() |
- CHECKPOINT('And now it\'s on master', include_config=True) |
- |
- # Build a new branch |
- for ref in (BRANCH, BRANCH_TAG, BRANCH_PEND): |
- origin[ref].update_to(origin[REAL].commit) |
- |
- origin[BRANCH_PEND].synthesize_commit('Branch commit!') |
- CHECKPOINT('New branch with pending', include_config=True) |
- RUN() |
- CHECKPOINT('Pending commit now on branch', include_config=True) |
- |
- origin[BRANCH_PEND].synthesize_commit('Another branch commit') |
- CHECKPOINT('New pending commit for branch', include_config=True) |
- RUN() |
- CHECKPOINT('Second pending commit now on branch', include_config=True) |
- |
- assert origin[BRANCH].commit.data.footers[gnumbd.BRANCHED_FROM] == ( |
- '%s-%s' % ( |
- origin[REAL].commit.hsh, |
- origin[REAL].commit.data.footers[gnumbd.COMMIT_POSITION][0] |
- ), |
- ) |
- |
- |
-@gnumbd_test |
-def branch_from_branch(origin, _local, config_ref, RUN, CHECKPOINT): |
- new_globs = config_ref['enabled_refglobs'] + ['refs/branch-heads/*'] |
- config_ref.update(enabled_refglobs=new_globs) |
- |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- origin[PEND].synthesize_commit('Hello world') |
- RUN(include_log=False) |
- |
- # Build a new branch |
- for ref in (BRANCH, BRANCH_TAG, BRANCH_PEND): |
- origin[ref].update_to(origin[REAL].commit) |
- |
- origin[BRANCH_PEND].synthesize_commit('Branch commit!') |
- RUN(include_log=False) |
- |
- CHECKPOINT('Branch 1 in place', include_config=True) |
- |
- yo_branch = BRANCH+'_yo' |
- yo_branch_tag = BRANCH_TAG+'_yo' |
- yo_branch_pend = BRANCH_PEND+'_yo' |
- for ref in (yo_branch, yo_branch_tag, yo_branch_pend): |
- origin[ref].update_to(origin[BRANCH].commit) |
- |
- origin[yo_branch_pend].synthesize_commit('Super branchey commit') |
- CHECKPOINT('New pending commit for branch', include_config=True) |
- RUN() |
- CHECKPOINT('Second pending commit now on branch', include_config=True) |
- |
- assert origin[yo_branch].commit.data.footers[gnumbd.BRANCHED_FROM] == ( |
- '%s-%s' % ( |
- origin[BRANCH].commit.hsh, |
- origin[BRANCH].commit.data.footers[gnumbd.COMMIT_POSITION][0] |
- ), |
- '%s-%s' % ( |
- origin[REAL].commit.hsh, |
- origin[REAL].commit.data.footers[gnumbd.COMMIT_POSITION][0] |
- ), |
- ) |
- |
- |
-# Extra footers |
-@gnumbd_test |
-def extra_user_footer(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- user_commit = origin[PEND].synthesize_commit( |
- 'Hello world', footers=collections.OrderedDict([ |
- ('Change-Id', ['Icafebabe1cec6eadfeba']), |
- ('Reviewed-by', [ |
- 'Cool Dudette 64 <cd64@example.com>', |
- 'Epic Sky Troll <est@example.com>', |
- ]), |
- ('Tested-by', ['Lol JK <lol_jk@example.com>']) |
- ])) |
- CHECKPOINT('The setup...') |
- RUN() |
- CHECKPOINT('The new footers should appear after the current ones') |
- assert content_of(origin[REAL].commit) == content_of(user_commit) |
- assert origin[REAL].commit.parent == base_commit |
- |
- |
-@gnumbd_test |
-def extra_user_footer_bad(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- user_commit = origin[PEND].synthesize_commit( |
- 'Hello world', footers=collections.OrderedDict([ |
- ('Cr-Double-Secret', ['I can impersonate the daemon!']), |
- ('git-svn-id', ['Well... this should never happen']) |
- ])) |
- CHECKPOINT('Two commits') |
- RUN() |
- CHECKPOINT('The bogus footers should be gone') |
- assert content_of(origin[REAL].commit) == content_of(user_commit) |
- assert origin[REAL].commit.data.footers == { |
- gnumbd.COMMIT_POSITION: (gnumbd.FMT_COMMIT_POSITION(origin[REAL], 101),) |
- } |
- |
- |
-@gnumbd_test |
-def enforce_commit_timestamps(origin, _local, _config_ref, RUN, CHECKPOINT): |
- base_commit = origin[REAL].synthesize_commit('Base commit', 100) |
- for ref in (PEND, PEND_TAG): |
- origin[ref].update_to(base_commit) |
- |
- # cheat and rewind the TestClock |
- origin._clock._time -= 100 # pylint: disable=W0212 |
- |
- user_commit = origin[PEND].synthesize_commit('Hello world') |
- assert ( |
- user_commit.data.committer.timestamp.secs < |
- base_commit.data.committer.timestamp.secs |
- ) |
- |
- CHECKPOINT('%r has a timestamp behind %r' % ( |
- user_commit.hsh, base_commit.hsh), include_committer=True) |
- RUN() |
- CHECKPOINT('Presto! Timestamp is fixed', include_committer=True) |
- assert content_of(origin[REAL].commit) == content_of(user_commit) |
- assert origin[REAL].commit.parent == base_commit |
- assert ( |
- origin[REAL].commit.data.committer.timestamp.secs > |
- origin[REAL].commit.parent.data.committer.timestamp.secs |
- ) |