Skip to content

Asserts

You can assert what will be the behavior of executions:

AssertValueDescription
assertStdoutBooleanIs output produced?
assertStdoutEqualStringIs the output equal to the String?
assertStdoutNotEqualStringIs the output different than the String?
assertStdoutContainsStringDoes the output contain the String?
assertStdoutNotContainsStringDoes the output not contain the String?
assertStdoutSHA256SHA256ChecksumIs the output equal to this SHA256 hash?
assertStdoutRegexRegexDoes the output match your regular expression?
assertStdoutNotRegexRegexDoes the output not match your regular expression?
assertStderrBooleanAre errors produced?
assertStderrEqualStringIs the error equal to the String?
assertStderrNotEqualStringIs the error different than the String?
assertStderrContainsStringDoes the error contain the String?
assertStderrNotContainsStringDoes the error not contain the String?
assertStderrSHA256SHA256ChecksumIs the error equal to this SHA256 hash?
assertStderrRegexRegexDoes the error match your regular expression?
assertStderrNotRegexRegexDoes the error not match your regular expression?
assertReturnCodeIntegerIs the return code equal to a certain value?
assertReturnCodeNotIntegerIs the return code not equal to a certain value?
assertDifferentBooleanDoes the execution behave differently when using different inputs?
assertKilledBooleanDid the software time out?

General usage

Asserts are defined within tests:

yml
HelloWorld:
  assertStdoutContains: "Hello World"
  echo:
  - echo Hello World

And they can have a severity associated, especially useful when working with ticketing systems:

yml
HelloWorld:
  assertStdoutContains: "Hello World"
  setSeverity: 1
  echo:
  - echo Hello World

You can also define multiple strings that should much, such as the following case:

yml
install:
  - apt update
  - apt install -qy curl

test:
  assertStdoutContains: 
  - HTTP/2 200
  - Satori CI
  - info@satori-ci.com
  - nonexistentstring
  satori:
    - curl -si https://satori.ci

assertStdout

InputDescription
BooleanAsserts if an output has been produced
  • Example Pass Test: the program should deliver output, and it does:
yml
test:
    assertStdout: True
    run:
    - echo Hello World

assertStdout

  • Example Fail Test: the program should deliver output, but no output is produced:
yml
test:
    assertStdout: True
    run:
    - ./broken_executable

assertStdoutFail


assertStdoutEqual

InputDescription
StringAsserts that the output is equal to the String
  • Example Pass Test: the program should output "Hello World" and a newline, and it does:
yml
test:
    assertStdoutEqual: "Hello World\n"
    run:
    - echo Hello World

assertStdoutEqual

  • Example Fail Test: the program should output "Hello World" and a newline, but it doesn't:
yml
test:
    assertStdoutEqual: "Hello World\n"
    run:
    - echo hello world

assertStdoutEqualFail


assertStdoutNotEqual

InputDescription
StringIs the output different than String?
  • Example Pass Test: the program output should not be equal to "Hello World", and is not:
yml
test:
    assertStdoutNotEqual: "Hello World\n"
    input:
    - - value: "Hello World"
        mutate: radamsa
        mutate_qty: 1
    run:
    - echo ${{input}}

Mutations output different inputs than the one originally provided. Read more about it on the Inputs section for Playbooks.

assertStdoutNotEqual


assertStdoutContains

InputDescription
StringDoes the output contain the String?
  • Example Pass Test: the program output should contain the string "Hello World", and it does:
yml
test:
    assertStdoutContains: "Hello World"
    run:
    - echo Hello World 2023

assertStdoutContains


assertStdoutNotContains

InputDescription
StringDoes the output not contain the String?
  • Example Pass Test: the program output should not contain the string "Error", and it does not:
yml
test:
    assertStdoutNotContains: "Error"
    run:
    - echo Hello World

assertStdoutContains


assertStdoutSHA256

InputDescription
SHA256ChecksumIs the output equal to this SHA256 hash?
  • Example Pass Test: Google's root webpage hash has not changed:

If an output should be equal to a certain hash, to confirm that its original value has not changed, you can verify that with an assert. Consider for example how Google shows consistently the same SHA 256 hash:

sh
$ curl -s https://google.com | shasum -a 256
5b61b0c2032b4aa9519d65cc98c6416c12415e02c7fbbaa1be5121dc75162edb  -

At the time of writing this, the hash 5b61b0c2032b4aa9519d65cc98c6416c12415e02c7fbbaa1be5121dc75162edb can be asserted programmatically:

You could assert that the output is consistent with that hash:

yml
settings:
  image: curlimages/curl:7.83.1

test:
  assertStdoutSHA256: 5b61b0c2032b4aa9519d65cc98c6416c12415e02c7fbbaa1be5121dc75162edb
  google:
    - curl -s https://google.com

assertStdoutSHA256


assertStdoutRegex

InputDescription
RegexDoes the output match your regular expression?
  • Example Pass Test: the program output should contain the string "Hello " and additional characters, and it does:
yml
test:
    assertStdoutRegex: "Hello .*"
    run:
    - echo Hello World

assertStdoutContains


assertStdoutNotRegex

InputDescription
RegexDoes the output not match your regular expression?
  • Example Unknown Test: the program output should not contain the string "Hello World" anywhere on the output, but the input could be mutated to "somethingHello World" and the result depends on the mutation:
yml
test:
    assertStdoutNotRegex: ".*Hello World.*"
    input:
    - - value: "Hello World"
        mutate: radamsa
        mutate_qty: 1
    run:
    - echo Hello ${{input}}

assertStdoutNotRegex


assertStderr

InputDescription
BooleanAre errors produced?
  • Example Pass Test: the program output should not output errors, and it does not:
yml
test:
    assertStderr: False
    run:
    - echo Hello World

assertStderr


assertStderrEqual

InputDescription
String*Is the error equal to the String?
  • Example Pass Test: the programs should verify that the error is a certain string:
yml
settings:
  image: python

test:
  assertStderrEqual: Verify this error
  error:
  - python3 -c "import sys; sys.stderr.write('Verify this error')"

assertStderrEqual


assertStderrNotEqual

InputDescription
StringIs the error different than the String?
  • Example Fail Test: the programs should verify that the error is not a certain string:
yml
settings:
  image: python

test:
  assertStderrNotEqual: Verify this error
  error:
  - python3 -c "import sys; sys.stderr.write('Verify this error')"

assertStderrEqual


assertStderrContains

InputDescription
StringDoes the error contains the String?
  • Example Pass Test: the program's errors should contain the string Traceback, and it does:
yml
settings:
  image: python

install:
   - echo import nonexistent > test.py
test:
    assertStderrContains: "Traceback"
    run:
    - python3 test.py

assertStderrContains


assertStderrNotContains

InputDescription
StringDoes the error not contain the String?
  • Example Fail Test: the program's errors should not contain the string Traceback, but it does:
yml
settings:
  image: python

install:
   - echo import nonexistent > test.py
test:
    assertStderrNotContains: "Traceback"
    run:
    - python3 test.py

assertStderrNotContains


assertStderrSHA256

InputDescription
SHA256ChecksumIs the error equal to this SHA256 hash?
  • Example Fail Test: the program's errors should not contain the string Traceback, but it does:
yml
settings:
  image: python

install:
   - echo import nonexistent > test.py
test:
    assertStderrSHA256: "69827a4c85154b891cae9c35d99887375d815ec676bb7ce86e1f7601f6fec3ad"
    run:
    - python3 test.py

assertStderrSHA256


assertStderrRegex

InputDescription
RegexDoes the error match your regular expression?
  • Example Pass Test: the Python script referencing a non-existent object will throw a NameError:
yml
settings:
  image: python

test:
  assertStderrRegex: "(?i)error|warning|traceback|exception"
  python:
  - python3 -c "non-existent"

assertStderrRegex


assertStderrNotRegex

InputDescription
RegexDoes the error not match your regular expression?
  • Example Pass Test: the program's errors should not throw a Traceback, and it doesn't:
yml
settings:
  image: python

install:
   - echo import os > test.py
test:
    assertStderrNotRegex: ".*Traceback.*"
    run:
    - python3 test.py

assertStderrNotRegex


assertReturnCode

InputDescription
IntegerIs the return code equal to the Integer?
  • Example Pass Test: the program should return the code 0, and it does:
yml
test:
    assertReturnCode: 0
    run:
    - echo This program is executed correctly

assertReturnCode


assertReturnCodeNot

InputDescription
IntegerIs the return code not equal to the Integer?
  • Example Positive Pass Test: the program should not return the code 0, and it doesn't:
yml
test:
    assertReturnCodeNot: 0
    run:
    - return 2

assertReturnCodeNot

  • Example Negative Fail Test: the program should return a code because it can be executed:
test:
  assertReturnCodeNot: null
  run:
  - non_existing_software

TBC


assertDifferent

InputDescription
BooleanDoes the execution behave differently when using different inputs?
  • Example Fail Test: the production and staging environment should look the same, and it does not:
yml
API:
- - "www.example.com"
  - "staging.example.com"

test:
    assertDifferent: False
    run:
    - curl $API

assertDifferent


assertKilled

InputDescription
BooleanDid the software time out?
  • Example Fail Test: the software should finish execution within 10 seconds, and it does not:
yml
settings:
  timeout: 10

test:
  assertKilled: False
  run:
    - sleep 20

TBC


If you need any help, please reach out to us on Discord or via Email