Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added test_user_script_crash test (#709) #777

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions tests/functional/commands/black_box_fail.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""User script that exits with code given in argument."""
import argparse
import sys
from xmlrpc.client import boolean


def execute():
"""Execute a simple pipeline as an example."""
# 1. Get the wanted exit code
parser = argparse.ArgumentParser()
parser.add_argument(
"--exitcode", "-e", type=int, default=0, help="wanted exit code"
)
parser.add_argument(
"--crash", "-c", action="store_true", help="make a crash happen"
)
parser.add_argument("-x", type=float, required=True)
inputs = parser.parse_args()

# 2. if needed, crash !
if inputs.crash:
print("%b" % False) # black_box_fail.py : this line should crash

# 3. exit with the wanted code
sys.exit(inputs.exitcode)


if __name__ == "__main__":
execute()
23 changes: 23 additions & 0 deletions tests/functional/commands/test_hunt_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,3 +35,26 @@ def test_no_name(capsys):
captured = capsys.readouterr().err

assert captured == "Error: No name provided for the experiment.\n"


def test_user_script_crash(capfd):
"""Checks that the Traceback of a crashing user script is output to stderr"""

orion.core.cli.main(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The test if failing because the script is not found. Pytest is executed from the root so it cannot find this file at the root. You can use monkeypatch to change the working dir temporarily: https://github.com/Epistimio/orion/blob/develop/tests/functional/commands/conftest.py#L61

Note, the first test of this module is not crashing because it has the fixture one_experiment which does this change of working directory.

[
"--debug",
"hunt",
"-n",
"test",
"--exp-max-broken",
"1",
"./black_box_fail.py",
"-c",
"-x~uniform(-5,5)",
]
)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could test the exit-code at the same time. The main should return it.


out, err = capfd.readouterr()

assert "Traceback" in err
assert "# black_box_fail.py : this line should crash" in err