diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2023-04-17 02:05:51 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2023-04-17 02:05:51 -0600 |
commit | 4efa228eb104145bb0750fb68c0d9493dc5854d5 (patch) | |
tree | 1dbcbd104be9e1034037a2d43b5927b1b61c08d6 /lib/btrfsutil/rebuilt_forrest_test.go | |
parent | 4adcf5f67965bf355cc7e16ec11e2293c2506700 (diff) | |
parent | f262c7bbc72796ae36b7e40dc38ab7167d138d5b (diff) |
Merge branch 'lukeshu/rebuilt-v2-pt2-lax-parents'
Diffstat (limited to 'lib/btrfsutil/rebuilt_forrest_test.go')
-rw-r--r-- | lib/btrfsutil/rebuilt_forrest_test.go | 94 |
1 files changed, 70 insertions, 24 deletions
diff --git a/lib/btrfsutil/rebuilt_forrest_test.go b/lib/btrfsutil/rebuilt_forrest_test.go index 96749c4..8bbb50a 100644 --- a/lib/btrfsutil/rebuilt_forrest_test.go +++ b/lib/btrfsutil/rebuilt_forrest_test.go @@ -106,26 +106,60 @@ func TestRebuiltTreeCycles(t *testing.T) { }, } - rfs := NewRebuiltForrest(nil, Graph{}, cbs) - - tree, err := rfs.RebuiltTree(ctx, 306) - assert.EqualError(t, err, `loop detected: [306 305 304 303 305]`) - assert.Nil(t, tree) - - assert.NotNil(t, rfs.trees[305]) - tree, err = rfs.RebuiltTree(ctx, 305) - assert.EqualError(t, err, `loop detected: [305 304 303 305]`) - assert.Nil(t, tree) - - assert.NotNil(t, rfs.trees[304]) - tree, err = rfs.RebuiltTree(ctx, 304) - assert.EqualError(t, err, `loop detected: [304 303 305 304]`) - assert.Nil(t, tree) - - assert.NotNil(t, rfs.trees[303]) - tree, err = rfs.RebuiltTree(ctx, 303) - assert.EqualError(t, err, `loop detected: [303 305 304 303]`) - assert.Nil(t, tree) + t.Run("strict", func(t *testing.T) { + t.Parallel() + rfs := NewRebuiltForrest(nil, Graph{}, cbs, false) + + tree, err := rfs.RebuiltTree(ctx, 306) + assert.EqualError(t, err, `loop detected: [306 305 304 303 305]`) + assert.Nil(t, tree) + + assert.NotNil(t, rfs.trees[305]) + tree, err = rfs.RebuiltTree(ctx, 305) + assert.EqualError(t, err, `loop detected: [305 304 303 305]`) + assert.Nil(t, tree) + + assert.NotNil(t, rfs.trees[304]) + tree, err = rfs.RebuiltTree(ctx, 304) + assert.EqualError(t, err, `loop detected: [304 303 305 304]`) + assert.Nil(t, tree) + + assert.NotNil(t, rfs.trees[303]) + tree, err = rfs.RebuiltTree(ctx, 303) + assert.EqualError(t, err, `loop detected: [303 305 304 303]`) + assert.Nil(t, tree) + }) + t.Run("lax", func(t *testing.T) { + t.Parallel() + rfs := NewRebuiltForrest(nil, Graph{}, cbs, true) + + tree, err := rfs.RebuiltTree(ctx, 306) + assert.NoError(t, err) + assert.NotNil(t, tree) + assert.True(t, tree.ancestorLoop) + assert.Equal(t, btrfsprim.ObjID(303), tree.ancestorRoot) + + assert.NotNil(t, rfs.trees[305]) + tree, err = rfs.RebuiltTree(ctx, 305) + assert.NoError(t, err) + assert.NotNil(t, tree) + assert.True(t, tree.ancestorLoop) + assert.Equal(t, btrfsprim.ObjID(303), tree.ancestorRoot) + + assert.NotNil(t, rfs.trees[304]) + tree, err = rfs.RebuiltTree(ctx, 304) + assert.NoError(t, err) + assert.NotNil(t, tree) + assert.True(t, tree.ancestorLoop) + assert.Equal(t, btrfsprim.ObjID(305), tree.ancestorRoot) + + assert.NotNil(t, rfs.trees[303]) + tree, err = rfs.RebuiltTree(ctx, 303) + assert.NoError(t, err) + assert.NotNil(t, tree) + assert.True(t, tree.ancestorLoop) + assert.Equal(t, btrfsprim.ObjID(304), tree.ancestorRoot) + }) } func TestRebuiltTreeParentErr(t *testing.T) { @@ -185,9 +219,21 @@ func TestRebuiltTreeParentErr(t *testing.T) { }, } - rfs := NewRebuiltForrest(nil, Graph{}, cbs) + t.Run("strict", func(t *testing.T) { + t.Parallel() + rfs := NewRebuiltForrest(nil, Graph{}, cbs, false) - tree, err := rfs.RebuiltTree(ctx, 305) - assert.EqualError(t, err, `failed to rebuild parent tree: 304: tree does not exist`) - assert.Nil(t, tree) + tree, err := rfs.RebuiltTree(ctx, 305) + assert.EqualError(t, err, `failed to rebuild parent tree: 304: tree does not exist`) + assert.Nil(t, tree) + }) + + t.Run("lax", func(t *testing.T) { + t.Parallel() + rfs := NewRebuiltForrest(nil, Graph{}, cbs, true) + + tree, err := rfs.RebuiltTree(ctx, 305) + assert.NoError(t, err) + assert.NotNil(t, tree) + }) } |