summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/test/java/com/google/gerrit/server/notedb/rebuild/EventSorterTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/test/java/com/google/gerrit/server/notedb/rebuild/EventSorterTest.java')
-rw-r--r--gerrit-server/src/test/java/com/google/gerrit/server/notedb/rebuild/EventSorterTest.java231
1 files changed, 0 insertions, 231 deletions
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/rebuild/EventSorterTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/rebuild/EventSorterTest.java
deleted file mode 100644
index 1de82b14da..0000000000
--- a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/rebuild/EventSorterTest.java
+++ /dev/null
@@ -1,231 +0,0 @@
-// Copyright (C) 2016 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.server.notedb.rebuild;
-
-import static com.google.common.truth.Truth.assertThat;
-import static java.util.stream.Collectors.toList;
-import static org.junit.Assert.fail;
-
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Lists;
-import com.google.gerrit.common.TimeUtil;
-import com.google.gerrit.reviewdb.client.Account;
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.reviewdb.client.PatchSet;
-import com.google.gerrit.server.notedb.ChangeUpdate;
-import com.google.gerrit.testutil.TestTimeUtil;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Stream;
-import org.junit.Before;
-import org.junit.Test;
-
-public class EventSorterTest {
- private class TestEvent extends Event {
- protected TestEvent(Timestamp when) {
- super(
- new PatchSet.Id(new Change.Id(1), 1),
- new Account.Id(1000),
- new Account.Id(1000),
- when,
- changeCreatedOn,
- null);
- }
-
- @Override
- boolean uniquePerUpdate() {
- return false;
- }
-
- @Override
- void apply(ChangeUpdate update) {
- throw new UnsupportedOperationException();
- }
-
- @SuppressWarnings("deprecation")
- @Override
- public String toString() {
- return "E{" + when.getSeconds() + '}';
- }
- }
-
- private Timestamp changeCreatedOn;
-
- @Before
- public void setUp() {
- TestTimeUtil.resetWithClockStep(10, TimeUnit.SECONDS);
- changeCreatedOn = TimeUtil.nowTs();
- }
-
- @Test
- public void naturalSort() {
- Event e1 = new TestEvent(TimeUtil.nowTs());
- Event e2 = new TestEvent(TimeUtil.nowTs());
- Event e3 = new TestEvent(TimeUtil.nowTs());
-
- for (List<Event> events : Collections2.permutations(events(e1, e2, e3))) {
- assertSorted(events, events(e1, e2, e3));
- }
- }
-
- @Test
- public void topoSortOneDep() {
- List<Event> es;
-
- // Input list is 0,1,2
-
- // 0 depends on 1 => 1,0,2
- es = threeEventsOneDep(0, 1);
- assertSorted(es, events(es, 1, 0, 2));
-
- // 1 depends on 0 => 0,1,2
- es = threeEventsOneDep(1, 0);
- assertSorted(es, events(es, 0, 1, 2));
-
- // 0 depends on 2 => 1,2,0
- es = threeEventsOneDep(0, 2);
- assertSorted(es, events(es, 1, 2, 0));
-
- // 2 depends on 0 => 0,1,2
- es = threeEventsOneDep(2, 0);
- assertSorted(es, events(es, 0, 1, 2));
-
- // 1 depends on 2 => 0,2,1
- es = threeEventsOneDep(1, 2);
- assertSorted(es, events(es, 0, 2, 1));
-
- // 2 depends on 1 => 0,1,2
- es = threeEventsOneDep(2, 1);
- assertSorted(es, events(es, 0, 1, 2));
- }
-
- private List<Event> threeEventsOneDep(int depFromIdx, int depOnIdx) {
- List<Event> events =
- Lists.newArrayList(
- new TestEvent(TimeUtil.nowTs()),
- new TestEvent(TimeUtil.nowTs()),
- new TestEvent(TimeUtil.nowTs()));
- events.get(depFromIdx).addDep(events.get(depOnIdx));
- return events;
- }
-
- @Test
- public void lastEventDependsOnFirstEvent() {
- List<Event> events = new ArrayList<>();
- for (int i = 0; i < 20; i++) {
- events.add(new TestEvent(TimeUtil.nowTs()));
- }
- events.get(events.size() - 1).addDep(events.get(0));
- assertSorted(events, events);
- }
-
- @Test
- public void firstEventDependsOnLastEvent() {
- List<Event> events = new ArrayList<>();
- for (int i = 0; i < 20; i++) {
- events.add(new TestEvent(TimeUtil.nowTs()));
- }
- events.get(0).addDep(events.get(events.size() - 1));
-
- List<Event> expected = new ArrayList<>();
- expected.addAll(events.subList(1, events.size()));
- expected.add(events.get(0));
- assertSorted(events, expected);
- }
-
- @Test
- public void topoSortChainOfDeps() {
- Event e1 = new TestEvent(TimeUtil.nowTs());
- Event e2 = new TestEvent(TimeUtil.nowTs());
- Event e3 = new TestEvent(TimeUtil.nowTs());
- Event e4 = new TestEvent(TimeUtil.nowTs());
- e1.addDep(e2);
- e2.addDep(e3);
- e3.addDep(e4);
-
- assertSorted(events(e1, e2, e3, e4), events(e4, e3, e2, e1));
- }
-
- @Test
- public void topoSortMultipleDeps() {
- Event e1 = new TestEvent(TimeUtil.nowTs());
- Event e2 = new TestEvent(TimeUtil.nowTs());
- Event e3 = new TestEvent(TimeUtil.nowTs());
- Event e4 = new TestEvent(TimeUtil.nowTs());
- e1.addDep(e2);
- e1.addDep(e4);
- e2.addDep(e3);
-
- // Processing 3 pops 2, processing 4 pops 1.
- assertSorted(events(e2, e3, e1, e4), events(e3, e2, e4, e1));
- }
-
- @Test
- public void topoSortMultipleDepsPreservesNaturalOrder() {
- Event e1 = new TestEvent(TimeUtil.nowTs());
- Event e2 = new TestEvent(TimeUtil.nowTs());
- Event e3 = new TestEvent(TimeUtil.nowTs());
- Event e4 = new TestEvent(TimeUtil.nowTs());
- e1.addDep(e4);
- e2.addDep(e4);
- e3.addDep(e4);
-
- // Processing 4 pops 1, 2, 3 in natural order.
- assertSorted(events(e4, e3, e2, e1), events(e4, e1, e2, e3));
- }
-
- @Test
- public void topoSortCycle() {
- Event e1 = new TestEvent(TimeUtil.nowTs());
- Event e2 = new TestEvent(TimeUtil.nowTs());
-
- // Implementation is not really defined, but infinite looping would be bad.
- // According to current implementation details, 2 pops 1, 1 pops 2 which was
- // already seen.
- assertSorted(events(e2, e1), events(e1, e2));
- }
-
- @Test
- public void topoSortDepNotInInputList() {
- Event e1 = new TestEvent(TimeUtil.nowTs());
- Event e2 = new TestEvent(TimeUtil.nowTs());
- Event e3 = new TestEvent(TimeUtil.nowTs());
- e1.addDep(e3);
-
- List<Event> events = events(e2, e1);
- try {
- new EventSorter(events).sort();
- fail("expected IllegalArgumentException");
- } catch (IllegalArgumentException e) {
- // Expected.
- }
- }
-
- private static List<Event> events(Event... es) {
- return Lists.newArrayList(es);
- }
-
- private static List<Event> events(List<Event> in, Integer... indexes) {
- return Stream.of(indexes).map(in::get).collect(toList());
- }
-
- private static void assertSorted(List<Event> unsorted, List<Event> expected) {
- List<Event> actual = new ArrayList<>(unsorted);
- new EventSorter(actual).sort();
- assertThat(actual).named("sorted" + unsorted).isEqualTo(expected);
- }
-}