[#335] treesvc: Fix inmemory unit tests and nil meta items

Bolt forest saves empty slice of items. Now inmemory forest
does it the same way.

Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
Dmitrii Stepanov 2023-07-13 11:50:13 +03:00
parent b4e72a2dfd
commit af82c2865e
2 changed files with 19 additions and 8 deletions

View file

@ -147,16 +147,23 @@ func testForestTreeGetChildren(t *testing.T, s Forest) {
treeAdd(t, 2, 0)
treeAdd(t, 7, 0)
testGetChildren := func(t *testing.T, nodeID Node, expected []Node) {
testGetChildren := func(t *testing.T, nodeID Node, expected []NodeInfo) {
actual, err := s.TreeGetChildren(context.Background(), cid, treeID, nodeID)
require.NoError(t, err)
require.ElementsMatch(t, expected, actual)
}
testGetChildren(t, 0, []uint64{10, 2, 7})
testGetChildren(t, 10, []uint64{3, 6})
testGetChildren(t, 0, []NodeInfo{
{ID: 10, Meta: Meta{Time: 1, Items: []KeyValue{}}},
{ID: 2, Meta: Meta{Time: 5, Items: []KeyValue{}}},
{ID: 7, Meta: Meta{Time: 6, Items: []KeyValue{}}},
})
testGetChildren(t, 10, []NodeInfo{
{ID: 3, ParentID: 10, Meta: Meta{Time: 2, Items: []KeyValue{}}},
{ID: 6, ParentID: 10, Meta: Meta{Time: 3, Items: []KeyValue{}}},
})
testGetChildren(t, 3, nil)
testGetChildren(t, 6, []uint64{11})
testGetChildren(t, 6, []NodeInfo{{ID: 11, ParentID: 6, Meta: Meta{Time: 4, Items: []KeyValue{}}}})
testGetChildren(t, 11, nil)
testGetChildren(t, 2, nil)
testGetChildren(t, 7, nil)
@ -495,11 +502,11 @@ func testForestApplySameOperation(t *testing.T, constructor func(t testing.TB, _
nodes, err := s.TreeGetChildren(ctx, cid, treeID, RootID)
require.NoError(t, err)
require.Equal(t, []Node{1}, nodes)
require.Equal(t, []NodeInfo{{ID: 1, ParentID: RootID, Meta: meta[0]}}, nodes)
nodes, err = s.TreeGetChildren(ctx, cid, treeID, 1)
require.NoError(t, err)
require.Equal(t, []Node{2}, nodes)
require.Equal(t, []NodeInfo{{ID: 2, ParentID: 1, Meta: meta[1]}}, nodes)
}
t.Run("expected", func(t *testing.T) {

View file

@ -68,10 +68,14 @@ func (s *memoryTree) Apply(op *Move) error {
// do performs a single move operation on a tree.
func (s *memoryTree) do(op *Move) move {
m := op.Meta
if m.Items == nil {
m.Items = []KeyValue{}
}
lm := move{
Move: Move{
Parent: op.Parent,
Meta: op.Meta,
Meta: m,
Child: op.Child,
},
}
@ -91,7 +95,7 @@ func (s *memoryTree) do(op *Move) move {
p.Meta.Time = op.Time
}
p.Meta = op.Meta
p.Meta = m
p.Parent = op.Parent
s.tree.infoMap[op.Child] = p