Skip to content

Commit 754a377

Browse files
authored
Merge pull request #50 from jaypipes/exec-err
correct exit code assertion in exec plugin
2 parents 64ace5b + df4c3d6 commit 754a377

File tree

6 files changed

+63
-5
lines changed

6 files changed

+63
-5
lines changed

.github/workflows/fmtcheck.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
runs-on: ubuntu-latest
1515
steps:
1616
- name: harden runner
17-
uses: step-security/harden-runner@55d479fb1c5bcad5a4f9099a5d9f37c8857b2845 # v2.4.1
17+
uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
1818
with:
1919
egress-policy: block
2020
disable-sudo: true
@@ -26,8 +26,9 @@ jobs:
2626
raw.githubusercontent.com:443
2727
objects.githubusercontent.com:443
2828
proxy.golang.org:443
29+
blob.core.windows.net:443
2930
- name: checkout code
30-
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
31+
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
3132
- name: setup go
3233
uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1
3334
with:

.github/workflows/lint.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ jobs:
2727
raw.githubusercontent.com:443
2828
objects.githubusercontent.com:443
2929
proxy.golang.org:443
30+
blob.core.windows.net:443
3031
- name: checkout code
3132
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
3233
- name: setup go

.github/workflows/test.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
runs-on: ${{ matrix.os }}
1919
steps:
2020
- name: harden runner
21-
uses: step-security/harden-runner@55d479fb1c5bcad5a4f9099a5d9f37c8857b2845 # v2.4.1
21+
uses: step-security/harden-runner@17d0e2bd7d51742c71671bd19fa12bdc9d40a3d6 # v2.8.1
2222
with:
2323
egress-policy: block
2424
disable-sudo: true
@@ -29,8 +29,9 @@ jobs:
2929
raw.githubusercontent.com:443
3030
objects.githubusercontent.com:443
3131
proxy.golang.org:443
32+
blob.core.windows.net:443
3233
- name: checkout code
33-
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
34+
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
3435
- name: setup go
3536
uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1
3637
with:

plugin/exec/assertions.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,13 @@ func newAssertions(
166166
outPipe *bytes.Buffer,
167167
errPipe *bytes.Buffer,
168168
) api.Assertions {
169+
expExitCode := 0
170+
if e != nil {
171+
expExitCode = e.ExitCode
172+
}
169173
a := &assertions{
170174
failures: []error{},
171-
expExitCode: exitCode,
175+
expExitCode: expExitCode,
172176
exitCode: exitCode,
173177
}
174178
if e != nil {

plugin/exec/eval_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"bytes"
1010
"context"
1111
"flag"
12+
"fmt"
1213
"os"
1314
"os/exec"
1415
"path/filepath"
@@ -71,6 +72,52 @@ func TestExitCode(t *testing.T) {
7172
require.Nil(err)
7273
}
7374

75+
func TestFailExecExitCodeNotSpecified(t *testing.T) {
76+
if !*failFlag {
77+
t.Skip("skipping without -fail flag")
78+
}
79+
require := require.New(t)
80+
81+
fp := filepath.Join("testdata", "ls-fail-no-exit-code.yaml")
82+
f, err := os.Open(fp)
83+
require.Nil(err)
84+
85+
s, err := scenario.FromReader(
86+
f,
87+
scenario.WithPath(fp),
88+
)
89+
require.Nil(err)
90+
require.NotNil(s)
91+
92+
ctx := gdtcontext.New(gdtcontext.WithDebug())
93+
err = s.Run(ctx, t)
94+
require.Nil(err)
95+
}
96+
97+
func TestExecFailExitCodeNotSpecified(t *testing.T) {
98+
require := require.New(t)
99+
target := os.Args[0]
100+
failArgs := []string{
101+
"-test.v",
102+
"-test.run=FailExecExitCodeNotSpecified",
103+
"-fail",
104+
}
105+
outerr, err := exec.Command(target, failArgs...).CombinedOutput()
106+
107+
// The test should have failed...
108+
require.NotNil(err)
109+
debugout := string(outerr)
110+
ec := 2
111+
// Yay, different exit codes for the same not found error...
112+
if runtime.GOOS == "darwin" {
113+
ec = 1
114+
}
115+
msg := fmt.Sprintf(
116+
"assertion failed: not equal: expected 0 but got %d", ec,
117+
)
118+
require.Contains(debugout, msg)
119+
}
120+
74121
func TestShellList(t *testing.T) {
75122
require := require.New(t)
76123

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
name: ls-fail-no-exit-code
2+
description: a scenario that runs the `ls` command with a non-0 exit code and no assertion on exit code
3+
tests:
4+
- exec: ls /this/dir/does/not/exist

0 commit comments

Comments
 (0)