mirror of
https://github.com/usatiuk/dhfs.git
synced 2025-10-28 20:47:49 +01:00
KleppmannTree: fix undo with rename
This commit is contained in:
@@ -18,6 +18,11 @@
|
||||
<artifactId>junit-jupiter-engine</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-collections4</artifactId>
|
||||
|
||||
@@ -64,7 +64,7 @@ public class KleppmannTree<TimestampT extends Comparable<TimestampT>, PeerIdT ex
|
||||
// Needs to be read after changing curParent, as it might be the same node
|
||||
var oldParent = _storage.getById(effect.oldInfo().oldParent());
|
||||
{
|
||||
var newOldParentChildren = oldParent.children().plus(node.meta().getName(), node.key());
|
||||
var newOldParentChildren = oldParent.children().plus(effect.oldInfo().oldMeta().getName(), node.key());
|
||||
oldParent = oldParent.withChildren(newOldParentChildren);
|
||||
_storage.putNode(oldParent);
|
||||
}
|
||||
|
||||
@@ -2,13 +2,15 @@ package com.usatiuk.kleppmanntree;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.ValueSource;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class KleppmanTreeSimpleTest {
|
||||
private final TestNode testNode1 = new TestNode(1);
|
||||
private final TestNode testNode2 = new TestNode(2);
|
||||
|
||||
private final TestNode testNode3 = new TestNode(3);
|
||||
|
||||
@Test
|
||||
void circularTest() {
|
||||
@@ -89,4 +91,50 @@ public class KleppmanTreeSimpleTest {
|
||||
Assertions.assertTrue(testNode2._storageInterface.getLog().size() <= 1);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@ValueSource(booleans = {true, false})
|
||||
void undoWithRenameTest(boolean opOrder) {
|
||||
var d1id = testNode1._storageInterface.getNewNodeId();
|
||||
var d2id = testNode2._storageInterface.getNewNodeId();
|
||||
var d3id = testNode2._storageInterface.getNewNodeId();
|
||||
testNode1._tree.move(testNode1._storageInterface.getRootId(), new TestNodeMetaDir("Test1"), d1id);
|
||||
testNode2._tree.move(testNode1._storageInterface.getRootId(), new TestNodeMetaDir("Test1"), d2id);
|
||||
testNode3._tree.move(testNode1._storageInterface.getRootId(), new TestNodeMetaDir("Test1"), d3id);
|
||||
var r1 = testNode1.getRecorded();
|
||||
var r2 = testNode2.getRecorded();
|
||||
var r3 = testNode3.getRecorded();
|
||||
Assertions.assertEquals(1, r1.size());
|
||||
Assertions.assertEquals(1, r2.size());
|
||||
Assertions.assertEquals(1, r3.size());
|
||||
|
||||
if (opOrder) {
|
||||
testNode2._tree.applyExternalOp(3L, r3.getFirst());
|
||||
testNode2._tree.applyExternalOp(1L, r1.getFirst());
|
||||
} else {
|
||||
testNode2._tree.applyExternalOp(1L, r1.getFirst());
|
||||
testNode2._tree.applyExternalOp(3L, r3.getFirst());
|
||||
}
|
||||
|
||||
Assertions.assertIterableEquals(List.of("Test1", "Test1.conflict." + d1id, "Test1.conflict." + d2id), testNode2._storageInterface.getById(testNode2._storageInterface.getRootId()).children().keySet());
|
||||
|
||||
if (opOrder) {
|
||||
testNode1._tree.applyExternalOp(3L, r3.getFirst());
|
||||
testNode1._tree.applyExternalOp(2L, r2.getFirst());
|
||||
} else {
|
||||
testNode1._tree.applyExternalOp(2L, r2.getFirst());
|
||||
testNode1._tree.applyExternalOp(3L, r3.getFirst());
|
||||
}
|
||||
|
||||
Assertions.assertIterableEquals(List.of("Test1", "Test1.conflict." + d1id, "Test1.conflict." + d2id), testNode1._storageInterface.getById(testNode1._storageInterface.getRootId()).children().keySet());
|
||||
|
||||
if (opOrder) {
|
||||
testNode3._tree.applyExternalOp(2L, r2.getFirst());
|
||||
testNode3._tree.applyExternalOp(1L, r1.getFirst());
|
||||
} else {
|
||||
testNode3._tree.applyExternalOp(1L, r1.getFirst());
|
||||
testNode3._tree.applyExternalOp(2L, r2.getFirst());
|
||||
}
|
||||
|
||||
Assertions.assertIterableEquals(List.of("Test1", "Test1.conflict." + d1id, "Test1.conflict." + d2id), testNode3._storageInterface.getById(testNode3._storageInterface.getRootId()).children().keySet());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user