Comments (4)
Thank you for filing this. There seem to be two parts:
- A bug
- A feature request
bug
The bug has to do with "/^$/"
, you're right that is odd behavior. I know why it's happening, and it's not intuitive for the end user. The workaround suggested in the linked issue will solve it, but it isn't evident:
command:
# the sleep command produces no stdout or stderr
sleep_test:
exec: |
>&2 echo "hi"
exit-status: 0
stderr: [ "!/./" ]
timeout: 10000
See my comment here for more info: #145 (comment)
Essentially, the check is if any line is empty.. but there are no lines, so it fails to find an empty line. You can test this behavior with echo ""
vs echo -n ""
, the former will pass [ "/^$/" ]
the latter won't.
My memory is a bit hazy, but I feel like I explored making a special case for empty output, but it caused a breaking change somewhere.. but I could be wrong. I'll re-evaluate this with fresh eyes and see if it makes sense to special case empty string.
feature request
For the feature request, the upcoming goss v4 #814 provides a way to handle this easier:
command:
sleep_test:
exec: |
>&2 echo hi
exit-status: 0
stderr: ""
$ goss v
.F
Failures/Skipped:
Command: sleep_test: stderr:
Expected
"hi\n"
to equal
""
Total Duration: 0.001s
Count: 2, Failed: 1, Skipped: 0
It will also handle newlines correctly, for example:
$ cat goss.yaml
command:
sleep_test:
exec: |
>&2 echo ""
exit-status: 0
stderr: ""
$ goss v
.F
Failures/Skipped:
Command: sleep_test: stderr:
Expected
"\n"
to equal
""
Total Duration: 0.002s
Count: 2, Failed: 1, Skipped: 0
The only way the above will pass is with echo -n ""
I'll have to reflect a bit about defaults when doing a goss add
. It probably won't be in the initial v4 release.. but might be added in a future release.
feedback
Would love your thoughts on the above..
from goss.
Thanks a lot @aelsabbahy for your prompt and detailed answer !
Bug
The workaround suggested in the linked issue will solve it
Thanks for the workaround which properly detects empty strings, with the following known limitations
- the current stdout/stderr isn't displayed
command:
"echo my_stdout > /dev/stdout; echo my_stderr > /dev/stderr":
exit-status: 0
stdout: [ "!/./" ]
stderr: [ "!/./" ]
timeout: 10000
$ goss validate
.FF
Failures/Skipped:
Command: echo stdout > /dev/stdout; echo stderr > /dev/stderr: stdout: patterns not found: [!/./]
Command: echo stdout > /dev/stdout; echo stderr > /dev/stderr: stderr: patterns not found: [!/./]
Total Duration: 0.002s
Count: 3, Failed: 2, Skipped: 0
feature request
For the feature request, the upcoming goss v4 #814 provides a way to handle this easier
This looks great to me, fully satisfying my needs !
I'll have to reflect a bit about defaults when doing a goss add. It probably won't be in the initial v4 release.. but might be added in a future release.
With the v4 behavior for "" matcher, the current default behavior (i.e. adding "" matchers in goss add command
when observing empty strings) seems a good sensible default to me.
I'm looking forward to using goss v4 !
from goss.
Forgot to mention, I released a release candidate v0.4.0-rc1 a few days (weeks?) ago.
Would love your feedback on it to make sure it correctly covers this need.
from goss.
v0.4.2 is released with empty strings when there's no output.
Feel free to re-open an issue if this is still a problem. Thank you for reporting!
from goss.
Related Issues (20)
- Write test report artifacts directly HOT 5
- install.sh: Install latest release HOT 1
- Remove Molecule from Community Contributions section in readme
- Set a custom user agent string for http checks HOT 4
- Unable to read the documentation HOT 6
- Use goss as a go package outside of the CLI HOT 2
- goss validate command does not print command output HOT 2
- Alternatives to Goss? HOT 2
- dgoss: Copy multiple files with `GOSS_FILES_PATH`
- How can we get goss working on AIX server HOT 1
- High severity CVE related with go stdlib version HOT 13
- goss.rocks/install redirects to "old" URL HOT 2
- Improve CI pipeline and integration tests HOT 16
- Is there a way to pass in a list as a variable? HOT 4
- yaml escaping seen as string and not boolean HOT 3
- Missing dgoss sha256 asset for release v0.4.7 HOT 3
- Can we add ansible galaxy goss install to README? HOT 2
- Semver package check did not work with alpine packages HOT 6
- Dgoss Error when Running tests /goss/goss: no such file or directory. HOT 2
- Final steps to new documentation HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from goss.