45 lines · 1.5 KB · Go
RawDownload
//go:build linux || (darwin && amd64) package mount2 import (	"context"	"os"	"testing") // TestDirStreamSeekdir checks that Seekdir repositions the snapshot directory// stream to an arbitrary offset. A kernel-NFS-exported mount needs this for// readdir continuation: the stateless server opens a fresh handle and seeks to// the last returned cookie on every batch. Offset 0 must still reset to the// start (the rewind / re-read case) and offsets at or past the end must clamp// to EOF.func TestDirStreamSeekdir(t *testing.T) {	ctx := context.Background()	// 3 real entries plus the synthesized "." and ".." => 5 entries total,	// occupying internal indices 0..4 (go-fuse offsets 1..5). HasNext is true	// while i < len(nodes)+2, i.e. i < 5.	ds := &dirStream{nodes: make([]os.FileInfo, 3)} 	for _, tc := range []struct {		off      uint64		wantI    int		wantNext bool	}{		{0, 0, true},    // rewind to start (the re-read case)		{2, 2, true},    // resume at the first real entry		{4, 4, true},    // last entry		{5, 5, false},   // exactly at end => EOF		{99, 99, false}, // past end => clamped to EOF via HasNext	} {		if errno := ds.Seekdir(ctx, tc.off); errno != 0 {			t.Fatalf("Seekdir(%d) returned errno %v, want 0", tc.off, errno)		}		if ds.i != tc.wantI {			t.Errorf("Seekdir(%d): i = %d, want %d", tc.off, ds.i, tc.wantI)		}		if got := ds.HasNext(); got != tc.wantNext {			t.Errorf("Seekdir(%d): HasNext() = %v, want %v", tc.off, got, tc.wantNext)		}	}}