diff --git a/internal/tailer/logstream/logstream.go b/internal/tailer/logstream/logstream.go index 7dbd5314a..cf5b8be13 100644 --- a/internal/tailer/logstream/logstream.go +++ b/internal/tailer/logstream/logstream.go @@ -85,6 +85,9 @@ func New(ctx context.Context, wg *sync.WaitGroup, waker waker.Waker, pathname st return newDgramStream(ctx, wg, waker, u.Scheme, u.Host, oneShot) case "", "file": path = u.Path + if u.RawFragment != "" { + path += "#" + u.RawFragment + } } if IsStdinPattern(path) { fi, err := os.Stdin.Stat() diff --git a/internal/tailer/logstream/logstream_test.go b/internal/tailer/logstream/logstream_test.go index 3fceebe59..2a2cd152c 100644 --- a/internal/tailer/logstream/logstream_test.go +++ b/internal/tailer/logstream/logstream_test.go @@ -2,10 +2,12 @@ package logstream_test import ( "context" + "os" "sync" "testing" "github.com/google/mtail/internal/tailer/logstream" + "github.com/google/mtail/internal/waker" ) func TestNewErrors(t *testing.T) { @@ -20,3 +22,24 @@ func TestNewErrors(t *testing.T) { t.Error("New(ctg, wg, ..., path) expecting error, received nil") } } + +func TestPathNameWithHash(t *testing.T) { + ctx := context.Background() + var wg sync.WaitGroup + file, err := os.CreateTemp("", "4c9_1#1_2.3.4.a.b114514#1bcd.log") + if err != nil { + t.Fatal(err) + } + defer os.Remove(file.Name()) + defer file.Close() + wk := waker.NewTestAlways() + wk.Wake() + _, err = logstream.New(ctx, &wg, wk, file.Name(), logstream.OneShotDisabled) + if err != nil { + t.Errorf("New(ctx, nil) expecting nil, received error: %v", err) + } + _, err = logstream.New(ctx, &wg, wk, "file://"+file.Name(), logstream.OneShotDisabled) + if err != nil { + t.Errorf("New(ctx, nil) expecting nil, received error: %v", err) + } +}