tree e9cdb562a8f1b4421782b975fb5f2cd81302b7a3
parent e2d1b311dc539c698b0bbd20f98002018219cedd
author Nasser Grainawi <nasser@codeaurora.org> 1604100757 -0600
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 1604100757 +0000

Update git submodules

* Update plugins/replication from branch 'stable-3.2'
  to c322f17037dae19e1943af63638974f22e870cd8
  - Merge branch 'stable-3.1' into stable-3.2
    
    * stable-3.1:
      ReplicationStorageIT: Wait for all pushes without order
      Replication*IT: Share getRef method
      ReplicationFanoutIT: Share setReplicationDestination
      ReplicationFanoutIT: Split shouldReplicateNewBranch tests
      ReplicationFanoutIT: Remove generic waitUntil helper
      ReplicationFanoutIT: Inherit from ReplicationDaemon
      ReplicationFanoutIT: Refactor setRemoteReplicationDestination
      ReplicationFanoutIT: Rename setReplicationDestination
      ReplicationFanoutIT: Cleanup shouldCreateIndividualReplicationTasksForEveryRemoteUrlPair
      Move shouldCleanupTasksAfterNewProjectReplication test
      Move storage portion of replicateBranchDeletion ITs
      Refactor Replication*IT tests to share a base class
      ReplicationIT: Add shouldMatch* e2e tests
      ReplicationStorageIT: Move shouldMatch* tests from ReplicationIT
      ReplicationTasksStorage: Add multi-primary unit tests
      ReplicationTasksStorage: Add multi-primary unit tests
      ReplicationStorageIT: Add shouldFire*ChangeRefs tests
      Move storage-based ITs into ReplicationStorageIT
      ReplicationTasksStorage.Task: Add multi-primary unit tests
      ReplicationQueue: Remove unused method
    
    Cleanup specific to stable-3.2 will be done in follow-up changes.
    
    Change-Id: Ib938c661158e8f7a3434010187b87c79e81a01b8
    
  - Merge branch 'stable-3.0' into stable-3.1
    
    * stable-3.0:
      ReplicationStorageIT: Wait for all pushes without order
      ReplicationTasksStorage: Add multi-primary unit tests
    
    Change-Id: I3961368f7bcf7d4aa923d07f7f89beeaaeb307d3
    
  - Merge "ReplicationTasksStorage.Task: Add multi-primary unit tests" into stable-3.1
  - Merge branch 'stable-2.16' into stable-3.0
    
    * stable-2.16:
      ReplicationStorageIT: Wait for all pushes without order
      ReplicationTasksStorage: Add multi-primary unit tests
    
    Change-Id: I1d749621c189ee2e49f092ddc7558f83e508411f
    
  - ReplicationStorageIT: Wait for all pushes without order
    
    Some tests don't have a predefined order for which events will be
    replicated first. Using a timeout based on a single replication event is
    flawed when we don't know the expected order. Instead, use a timeout for
    the group of events and ignore the order.
    
    For two events replicating to a single remote with a single thread, we
    expect the complete replication to take twice as long. Two events
    replicating to two remotes will use one thread each and therefore not
    take any longer than the single remote case.
    
    Change-Id: Ieb21b7eee32105eab5b5a15a35159bb4a837e363
    
  - Replication*IT: Share getRef method
    
    This helper is common to a couple test classes, so share it.
    
    Change-Id: I5839c31ad734c384e812e9e1c7bcba8ba05c23cc
    
  - ReplicationFanoutIT: Share setReplicationDestination
    
    Refactor setReplicationDestination to share the per-remote-file and
    single replication config file implementations more.
    
    Change-Id: Ic0a98ccf0f7703f14c01856a42b8a70e3d20aa8b
    
  - ReplicationFanoutIT: Split shouldReplicateNewBranch tests
    
    Split these into storage-based and e2e tests so that the storage tests
    can be reliably verified through use of replicationDelay large enough
    that task state on disk doesn't change during the tests.
    
    Keep them all in ReplicationFanoutIT for now since the setup for these
    tests is unique to that class.
    
    Also remove the unnecessary cleanup of tasks.
    
    Change-Id: I36e0a4affe1f5d1330ea27a496fd8ba295176763
    
  - ReplicationFanoutIT: Remove generic waitUntil helper
    
    Using a non-specific timeout is a bad pattern. Tests should pick a
    timeout appropriate to the action being tested.
    
    Change-Id: I69a7e469df1dc532af6a777ac47d89852091797e
    
  - ReplicationFanoutIT: Inherit from ReplicationDaemon
    
    Reduces duplication across the replication IT classes. More dedup is
    possible with the helper methods, but leave that for a future change.
    
    Change-Id: Iddd6dca9a4fe84b065954cd4dcec7289d7ed68a2
    
  - ReplicationFanoutIT: Refactor setRemoteReplicationDestination
    
    Simplify callers by providing a way to set the replicationDelay up
    front.
    
    Change-Id: I28cea83559aa1eb379ec2ff962a0beaf25fe4ca6
    
  - ReplicationFanoutIT: Rename setReplicationDestination
    
    Distinguish the methods that set the per-remote config files vs the
    methods that set the global replication.config. This helps lead up to
    ReplicationFanoutIT inheriting from ReplicationDaemon.
    
    Change-Id: I6139d2dbde15c0b0449d7d7801c169253bc7449d
    
  - ReplicationFanoutIT: Cleanup shouldCreateIndividualReplicationTasksForEveryRemoteUrlPair
    
    Remove some dead code, use Integer.MAX_VALUE for the replicationDelay so
    that tasks stay in the waiting/ area of storage for the entire test, and
    use a dedicated listWaitingTasks() to show it only depends on tasks in
    that state.
    
    Change-Id: I0035a4edc656ed4833249322c45204124a66e20d
    
  - Merge changes I0ef708ab,I81d27fd4 into stable-3.1
    
    * changes:
      Move shouldCleanupTasksAfterNewProjectReplication test
      Merge branch 'stable-3.0' into stable-3.1
    
  - Merge "ReplicationTasksStorage: Add multi-primary unit tests" into stable-3.1
  - Merge "ReplicationTasksStorage: Add multi-primary unit tests" into stable-2.16
  - Move shouldCleanupTasksAfterNewProjectReplication test
    
    This test is focused on the storage level, so move it to
    ReplicationStorageIT. Slightly improve it to use the new best practices
    for specifying test timeouts.
    
    Change-Id: I0ef708ab7813ee09d6f115d3151d2d12b9984a80
    
  - Merge branch 'stable-3.0' into stable-3.1
    
    * stable-3.0:
      Move storage portion of replicateBranchDeletion ITs
      Refactor Replication*IT tests to share a base class
      ReplicationIT: Add shouldMatch* e2e tests
      ReplicationStorageIT: Move shouldMatch* tests from ReplicationIT
      ReplicationStorageIT: Add shouldFire*ChangeRefs tests
      Move storage-based ITs into ReplicationStorageIT
      ReplicationQueue: Remove unused method
    
    This change does not try to reimpose the breakdown of tests that was
    done in 3.0. That will be done in follow up change(s) to improve
    reviewability of this change.
    
    Change-Id: I81d27fd47da8eecad3aca36d8e6400679fb564a3
    
  - Move storage portion of replicateBranchDeletion ITs
    
    All other ITs split e2e and storage tests on stable-2.16, so this change
    only updates the new replicateBranchDeletion tests that were added in
    stable-3.0.
    
    The e2e check for if the destination branch is removed or not stays in
    ReplicationIT and the check that a task is created in storage when the
    branch delete API is invoked moves to ReplicationStorageIT.
    
    This split allows the best practices for verifying e2e and storage to be
    applied independently.
    
    Change-Id: Iec7ee090bd614e3442b1f9cb454437c9e05290be
    
  - Merge branch 'stable-2.16' into stable-3.0
    
    * stable-2.16:
      Refactor Replication*IT tests to share a base class
      ReplicationIT: Add shouldMatch* e2e tests
      ReplicationStorageIT: Move shouldMatch* tests from ReplicationIT
      ReplicationStorageIT: Add shouldFire*ChangeRefs tests
      Move storage-based ITs into ReplicationStorageIT
      ReplicationQueue: Remove unused method
    
    This change does not try to reimpose the breakdown of tests that was
    done in 2.16. That will be done in follow up change(s) to improve
    reviewability of this change.
    
    Change-Id: I83202997610c5ad0d8849cb477ca36db8df760f5
    
  - Refactor Replication*IT tests to share a base class
    
    These classes have very similar setups and duplicate helper methods.
    Improve maintainability by reducing the duplication.
    
    ReplicationQueueIT is not modified because it is merged into
    ReplicationIT on stable-3.0.
    
    Change-Id: Ibc22ae4d0db2d09009f65c0e745f1095c67827ba
    
  - ReplicationIT: Add shouldMatch* e2e tests
    
    These new tests utilize creating a branch in a way that does not trigger
    replication so that scheduleFullSync() is responsible for replicating
    the update. In this way, the tests verify the destination receives the
    update because scheduleFullSync() matched the given URI.
    
    Change-Id: I4ae15d0301a308a12cbca3684915e89ca421e02f
    
  - ReplicationStorageIT: Move shouldMatch* tests from ReplicationIT
    
    These tests are focused on verifying storage, so they belong in
    ReplicationStorageIT. Improve these tests to better verify storage
    correctness by switching the 'now' parameter to false such that
    replicationDelay is honored and follow the ReplicationStorageIT
    pattern using a very long delay. These improvements make these tests
    much more stable.
    
    The tests improve the ref matching slightly by comparing to the
    PushOne.ALL_REFS constant.
    
    Also removes the disableDeleteForTesting flag as there are no users of
    it now.
    
    A later change can add ReplicationIT e2e tests for these use cases.
    
    Change-Id: Iaa14a7429a40fb62325259efa1c7d7637deef95a
    
  - ReplicationTasksStorage: Add multi-primary unit tests
    
    These tests examine the replication scenarios under
    multi-primary setup making use of the api calls present
    in ReplicationTasksStorage class similarly as done in
    single primary setup.
    
    These tests ensure that the replication compatability in
    multi-primary setup is not broken.
    
    Change-Id: Ib2d0017c4d2ac3f4cfc7262b68b09a3a357e1337
    
  - ReplicationTasksStorage: Add multi-primary unit tests
    
    These tests examine the replication scenarios under multi-primary
    setup making use of the api calls present in ReplicationTasksStorage
    class similarly as done in single primary setup.
    
    These tests ensure that the replication compatibility in multi-primary
    setup is not broken.
    
    Change-Id: I375b731829f3c0640d3a7a98635e1e5c526908ca
    
  - ReplicationStorageIT: Add shouldFire*ChangeRefs tests
    
    Copy the shouldFire*IncompleteUri tests as shouldFire*ChangeRefs to
    fill a gap in test coverage.
    
    Change-Id: Ia8df64a8574b776e6a9f7201c0862f1e6794687e
    
  - Move storage-based ITs into ReplicationStorageIT
    
    Tests in ReplicationStorageIT utilize very long replication delays such
    that tasks are never expected to complete during the test. This allows
    test writers to assume the task files are still there.
    
    Refactor tests from ReplicationIT into ReplicationStorageIT and focus
    them on verifying storage correctness. This is mostly a direct copy
    except that shouldFirePendingOnlyToStoredUri gets renamed and split into
    two tests. One that validates tasks are fired and another that validates
    replication completes to the expected destinations. This split is
    necessary because of the very long delay methodology mentioned above.
    
    Code sharing between ReplicationIT and ReplicationStorageIT will be
    improved in a later commit.
    
    Change-Id: I41179c20a10354953cff3628368dfd5f910cc940
    
  - ReplicationTasksStorage.Task: Add multi-primary unit tests
    
    These tests examine the replication scenarios under
    multi-primary setup making use of the api calls present
    in ReplicationTasksStorage.Task class similarly as done in
    single master setup.
    
    These tests ensure that the replication compatability in
    multi-primary setup is not broken.
    
    Change-Id: I980e8286bf11d31c6ab89e49ef065fdde1118181
    
  - ReplicationQueue: Remove unused method
    
    And drop the misleading @VisibleForTesting annotation from the method
    the removed method was wrapping. scheduleFullSync() is public so that
    PushAll can call it.
    
    Change-Id: I0139e653654fcaf20de68dddfb5ea85560a323d0
    