+
+func TestTreeIndexesTheNodesAfterACrash(t *testing.T) {
+ root := t.TempDir()
+ clock := newTestClock()
+ tree, err := openTree(t.Context(), root, 2, clock.Now)
+ require.NoError(t, err)
+
+ require.NoError(t, tree.Add(treeTestNode(0, 0, "user: a")))
+ require.NoError(t, tree.Add(treeTestNode(0, 1, "reply: b")))
+ require.NoError(t, tree.Close())
+
+ // A crash after the line write and in the middle of the index writes.
+ order := filepath.Join(root, "index", "tree.idx")
+ require.NoError(t, os.Truncate(order, treeRecordBytes+5))
+ require.NoError(t, os.Truncate(filepath.Join(root, "index", "tree-0.idx"), positionBytes))
+
+ tree, err = openTree(t.Context(), root, 2, clock.Now)
+ require.NoError(t, err)
+
+ defer func() {
+ require.NoError(t, tree.Close())
+ }()
+
+ require.Equal(t, 2, tree.Count())
+ require.Equal(t, "reply: b", treeReadNode(t, tree, 0, 1).Text)
+ require.NoError(t, tree.Add(treeTestNode(1, 0, "user: a\nreply: b")))
+}