//go:build linux package artifact import ( "context" "errors" "path/filepath" "syscall" "testing" "time" "gitea.maximumdirect.net/eric/promptkit/internal/domain" ) func TestFileReaderRejectsFIFOBeforeOpen(t *testing.T) { path := filepath.Join(t.TempDir(), "artifact.fifo") if err := syscall.Mkfifo(path, 0o600); err != nil { t.Fatalf("create fifo: %v", err) } type result struct { artifact *domain.Artifact err error } done := make(chan result, 1) go func() { artifact, err := NewCompositeReader().Read(context.Background(), domain.ArtifactRef{ Type: domain.ArtifactRefFile, URI: path, }) done <- result{artifact: artifact, err: err} }() select { case got := <-done: if got.artifact != nil || !errors.Is(got.err, ErrUnsupportedFile) { t.Fatalf("artifact=%#v err=%v, want nil/ErrUnsupportedFile", got.artifact, got.err) } case <-time.After(time.Second): t.Fatal("FIFO read blocked instead of rejecting the non-regular file") } }