44 lines
986 B
Go
44 lines
986 B
Go
//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")
|
|
}
|
|
}
|