package lease import ( "context" "errors" "testing" "github.com/superfly/ltx" ) type fakeLister struct { levels map[int][]*ltx.FileInfo err error asked []int } func (f *fakeLister) LTXFiles(_ context.Context, level int, _ ltx.TXID, _ bool) (ltx.FileIterator, error) { f.asked = append(f.asked, level) if f.err != nil { return nil, f.err } return ltx.NewFileInfoSliceIterator(f.levels[level]), nil } func TestHasReplicaIn(t *testing.T) { ctx := context.Background() empty := &fakeLister{} if has, err := hasReplicaIn(ctx, empty); has || err != nil { t.Fatalf("empty = %v, %v", has, err) } if len(empty.asked) != 10 { t.Fatalf("levels asked = %v, want 0 to 9", empty.asked) } snap := &fakeLister{levels: map[int][]*ltx.FileInfo{9: {{Level: 9, MinTXID: 1, MaxTXID: 7, Size: 4096}}}} if has, err := hasReplicaIn(ctx, snap); !has || err != nil { t.Fatalf("a snapshot at level 9 = %v, %v", has, err) } broken := &fakeLister{err: errors.New("listing failed")} if has, err := hasReplicaIn(ctx, broken); has || err == nil { t.Fatalf("a failed listing = %v, %v; want an error, never false", has, err) } }