Skip to content

Commit 2de883d

Browse files
committed
pipeline: add missing closePipes() on validation error
1 parent 3d273c2 commit 2de883d

2 files changed

Lines changed: 35 additions & 0 deletions

File tree

pipe/pipeline.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,9 +289,11 @@ func (p *Pipeline) Start(ctx context.Context) error {
289289
// Make sure that the stage's requirements are well-formed:
290290
requirements := s.Requirements()
291291
if err := requirements.Stdin.Validate(); err != nil {
292+
closePipes()
292293
return fmt.Errorf("stdin: %w", err)
293294
}
294295
if err := requirements.Stdout.Validate(); err != nil {
296+
closePipes()
295297
return fmt.Errorf("stdout: %w", err)
296298
}
297299

pipe/pipeline_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,6 +1010,39 @@ func TestStreamForbiddenStdout(t *testing.T) {
10101010
})
10111011
}
10121012

1013+
func TestInvalidStreamRequirements(t *testing.T) {
1014+
t.Parallel()
1015+
ctx := context.Background()
1016+
1017+
t.Run("stdin", func(t *testing.T) {
1018+
t.Parallel()
1019+
stdout := &closeTrackingWriter{}
1020+
p := pipe.New(pipe.WithStdoutCloser(stdout))
1021+
p.Add(requirementStage{
1022+
name: "source",
1023+
requirement: pipe.StageRequirements{
1024+
Stdin: pipe.StreamRequirement(123),
1025+
},
1026+
})
1027+
require.ErrorContains(t, p.Run(ctx), `stdin: invalid stream requirement 123`)
1028+
assert.True(t, stdout.closed, "WithStdoutCloser destination should be closed")
1029+
})
1030+
1031+
t.Run("stdout", func(t *testing.T) {
1032+
t.Parallel()
1033+
stdout := &closeTrackingWriter{}
1034+
p := pipe.New(pipe.WithStdoutCloser(stdout))
1035+
p.Add(requirementStage{
1036+
name: "sink",
1037+
requirement: pipe.StageRequirements{
1038+
Stdout: pipe.StreamRequirement(123),
1039+
},
1040+
})
1041+
require.ErrorContains(t, p.Run(ctx), `stdout: invalid stream requirement 123`)
1042+
assert.True(t, stdout.closed, "WithStdoutCloser destination should be closed")
1043+
})
1044+
}
1045+
10131046
func TestStreamForbiddenMiddleStage(t *testing.T) {
10141047
t.Parallel()
10151048
ctx := context.Background()

0 commit comments

Comments
 (0)