goss icon indicating copy to clipboard operation
goss copied to clipboard

Expose actual command stdout / stderr on the goss test result

Open colearendt opened this issue 6 years ago • 12 comments

It would be nice to be able to opt into exposing the stdout that is compared to a regex / etc. in a command resource. This is a super trivial example, but suppose I wanted to test how many files are in a folder, and ensure that the number is greater than 3:

  "NUMAPP=$(expr $(ls -l /apps | wc -l) - 1); if [ $NUMAPP -ge 3 ]; then echo success: $NUMAPP; else echo fail: $NUMAPP; fi":
    title: apps_deployed_gt_3
    exit-status: 0
    stdout: [
      "/^success/"
    ]
    stderr: []

It would be nice if the stdout (i.e. success: 4) and/or stderr could be returned in the lengthy / verbose test output (i.e. JSON, documentation, etc.).

colearendt avatar Aug 29 '19 14:08 colearendt

I have a research item that may indirectly fix this, if my research is successful. I'll create a ticket for the actual implementation details and link this ticket to it.

Leaving this open for now, but not marking it as approved since the solution might be a consequence of another enhancement.

aelsabbahy avatar Dec 12 '19 05:12 aelsabbahy

May be https://github.com/aelsabbahy/goss/issues/559 request is also similar ?

shan100github avatar Mar 17 '20 12:03 shan100github

Yes, #559 is pretty much the same, I didn't realize that an FR as already placed when I asked @shan100github to create one. Ups 😞

At least we have more attention to this FR now.

I have a research item that may indirectly fix this, if my research is successful. I'll create a ticket for the actual implementation details and link this ticket to it.

Leaving this open for now, but not marking it as approved since the solution might be a consequence of another enhancement.

@aelsabbahy did you made any progress there? If not we could move this discussion forward.

pedroMMM avatar Mar 17 '20 15:03 pedroMMM

@pedroMMM I think this PR (when ready) will indirectly fix the issue: #576

With that, doing a string comparison will print out why the strings didn't match (expected vs result).

Only the io.reader I scan mode will not print out the contents.

On a side note, once that's implemented the test may be re-written as:

ls -l /apps | wc -l:
    title: apps_deployed_gt_3
    exit-status: 0
    stdout:
      ge: 3

aelsabbahy avatar Apr 29 '20 06:04 aelsabbahy

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

stale[bot] avatar Jul 09 '20 19:07 stale[bot]

Bump 😄

colearendt avatar Jul 09 '20 20:07 colearendt

@colearendt How does #576 Look to you?

Once that's merged in, the functionality will look as follows:

command:
  echo "hello world":
    exit-status: 0
    stdout:
    - goodbye world
$ goss v
.F

Failures/Skipped:

Command: echo "hello world": stdout:
Expected
    "object: *bytes.Reader"
to contain patterns
    ["goodbye world"]
the missing elements were
    ["goodbye world"]

Total Duration: 0.005s
Count: 2, Failed: 1, Skipped: 0

The PR is still not ready yet, but it's the main thing I'm working on for goss v0.4.0

aelsabbahy avatar Jul 09 '20 20:07 aelsabbahy

Oops, I realized I provided the wrong example in my last comment, lets try this again...

With goss v0.4.0 if you do a string match, the reader will be transformed into a string and compared. For example:

command:
  echo "hello world":
    exit-status: 0
    stdout: "goodbye world"
$ goss v
.F

Failures/Skipped:

Command: echo "hello world": stdout:
Expected
    "hello world\n"
to equal
    "goodbye world"

Total Duration: 0.004s
Count: 2, Failed: 1, Skipped: 0

Sorry for the confusion with the last comment.

aelsabbahy avatar Jul 11 '20 21:07 aelsabbahy

That looks great, thank you!! Very exciting! I have to admit, I was confused by the last one, but chalked it up to me not having read my request back into memory (hence my lack of response) 🙈 This looks great! The only feedback I have is that this line looks a little confusing:

Command: echo "hello world": stdout:

Lots of : and such. Not sure there is any way around that, or if that is the behavior today. Just initial thoughts - I am very excited about the expect vs. equal!!

colearendt avatar Jul 12 '20 00:07 colearendt

There's an exec attribute that can be used for clarity (this exists today in goss doc), I think this is easier on the eyes:

command:
  hello_test:
    exec: echo "hello world"
    exit-status: 0

aelsabbahy avatar Jul 12 '20 01:07 aelsabbahy

Any news here?

jkroepke avatar Mar 29 '21 16:03 jkroepke

:-(

Oloremo avatar Sep 25 '21 17:09 Oloremo