aboutsummaryrefslogtreecommitdiffstats
path: root/tests (follow)
Commit message (Collapse)AuthorAgeLines
...
* chore: Add tests for py_args and ns_jail argsGravatar ToxicKidz2021-05-18-0/+31
|
* Match new unicode eval tests and output to the format and functions of othersGravatar Bast2021-04-08-12/+8
|
* Use PYTHONIOENCODING to enable utf-8 stdout for the nsjail pipe, and handle ↵Gravatar Bast2021-04-06-0/+21
| | | | | | | | | | the potential case where this is bypassable Since snekbox does not run with a tty, stdout is technically raw bytes, and thus incomplete surrogate pairs can be printed without the client application erroring, and instead fail within _consume_stdout when we attempt to decode it to a str. This commit sets the PYTHONIOENCODING environment variable to inform python to open the pipe in utf-8 mode. However, clever use of execl and os.unsetenv() can unset this environment variable, so we add a safety check to _consume_stdout to fail out of parsing output if it contains invalid unicode. This should only happen in deliberate cases, or significant bugs in python or a c library where output is printed to stdout ignoring the python stdout encoding.
* Update flooding test to expect code 143Gravatar Joe Banks2021-03-16-1/+1
| | | | Test was relying on 137 which is SIGKILL, when instead it would receive 143, or SIGTERM.
* Fix patch for DEBUG value during testingGravatar MarkKoz2021-02-04-1/+1
|
* Fix the memory limit test and the import errorGravatar MarkKoz2021-02-04-2/+2
|
* Close file descriptors when subprocess endsGravatar MarkKoz2021-02-04-1/+1
|
* Suppress NsJail info logs during testsGravatar MarkKoz2021-02-04-0/+1
| | | | The logs clutter up the test output way too much.
* Move exit code conversion to main functionGravatar Sebastiaan Zeeff2020-11-21-4/+2
|
* Add test for stdout output truncationGravatar Sebastiaan Zeeff2020-11-21-1/+19
| | | | | | I've added a test that checks if output exceeding the limit is correctly truncated. To make the test more robust, I've defined a constant for the read chunk size.
* Convert negative exit codes into standard formGravatar Sebastiaan Zeeff2020-11-20-1/+1
| | | | | | | When you send a signal `N` to a subprocess using Popen, it will return `-N` as its exit code. As the rest of the code returns signal exit codes as `128 + N`, we convert those negative exit codes into the standard form used by the rest of the code.
* Use SIGKILL instead of SIGTERM to terminate NsJailGravatar Sebastiaan Zeeff2020-11-20-1/+1
| | | | | | This new behavior matches how other limiters terminate the subprocess, resulting in a more consistency in the front-end for the end users as well.
* Limit STDOUT to prevent OOM events in containerGravatar Sebastiaan Zeeff2020-11-20-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Recently, we discovered that for some code inputs, snekbox would get into an OOM event on the container level, seemingly bypassing the memory restrictions laid on code execution by NSJail. After investigating the issue, we identified the culprit to be the STDOUT pipe we use to get output back from NSJail: As output is piped out of the jailed process, it will be gathered outside of the NSJail in the main container process instead. This meant that our initial attempts of limiting the allowed filesize within the NSJail failed, as the OOM happened outside of the jailed environment. To mitigate the issue, I've written a loop that consumes the STDOUT pipe in chunks of 100 characters. Once the size of the accrued output reaches a certain limit (currently set to 1 MB), we send a SIGTERM signal to NSJail to terminate itself. The output up to that point will be relayed back to the caller. A minimal code snippet to trigger the event and the mitigation: ```py while True: print(" ") ``` I've included a test for this vulnerability in `tests/test_nsjail.py`.
* Fix #56: stdout and stderr outputs in wrong orderGravatar MarkKoz2020-01-11-0/+16
|
* Add test for importing numpyGravatar MarkKoz2019-12-28-0/+6
| | | | | This is a test for #53, which fixed numpy failing to import due to using multiple threads by default.
* Test root and direct children are read-onlyGravatar MarkKoz2019-12-28-7/+10
|
* Test shared memory is disabledGravatar MarkKoz2019-12-28-0/+27
| | | | Co-authored-by: 0xf0f <[email protected]>
* Test that the file system is mounted as read onlyGravatar MarkKoz2019-06-27-0/+10
|
* Disable memory swapping and add a memory limit testGravatar MarkKoz2019-06-26-6/+13
| | | | | | | | | If memory swapping was enabled locally, the memory test would fail. Explicitly disabling swapping also removes reliance on the assumption that it'll be disabled in production. * Add a constant for the maximum memory * Simplify the timeout test; it'd otherwise first run out of memory now
* Add a NsJail log parser testGravatar MarkKoz2019-06-22-0/+30
| | | | | * Add support for debug level to log regex * Change type annotation of log_parse to Iterable
* Rewrite NsJail testsGravatar MarkKoz2019-06-22-56/+77
| | | | | | * Fix SIGSEGV test * Add embedded null byte test * Return None for stderr when there's a ValueError
* Merge stdout and stderrGravatar MarkKoz2019-06-15-1/+0
| | | | | | Removes the need for redirecting stderr using contextlib in the input. Furthermore, it captures errors which don't directly come from the input, such as SyntaxErrors.
* Respond to eval with stdout, stderr, and the return codeGravatar MarkKoz2019-06-05-3/+10
| | | | | | | | | The previous implementation limited the client's flexibility in presenting the results of the process. A process can write to both stdout and stderr and do so even when the return code is not 0 or 1. * Return a CompletedProcess from NsJail * Don't check the return code; this should be done client-side now
* Add logging for NsJailGravatar MarkKoz2019-06-05-1/+1
| | | | | | | | | | | NsJail's is configured to log to a temporary file rather than stderr. The contents of the file are parsed using regex after the process exits. When not debugging, some blacklisted messages and most info-level messages are skipped. * Add a snekbox logger * Log the Python code being executed if debugging * Use nested single quotes in a test to fix a linter error
* Merge remote-tracking branch 'origin/revitalisation' into refactor/nsjailGravatar MarkKoz2019-06-05-1/+66
|\
| * Move SnekAPI import back to top of moduleGravatar MarkKoz2019-05-29-1/+2
| |
| * Add API tests for eval resourceGravatar MarkKoz2019-05-29-1/+65
| |
* | Revert "Lint tests"Gravatar MarkKoz2019-05-30-15/+0
| | | | | | | | This reverts commit e75c764f693c3688a59af0d679e0d3e94f003503.
* | Lint testsGravatar MarkKoz2019-05-30-0/+15
| | | | | | | | | | Tests ignore all D1xx warnings because tests shouldn't require docstrings.
* | Add flake8 plugin to only allow double quotesGravatar MarkKoz2019-05-29-23/+23
|/
* Restructure project layoutGravatar MarkKoz2019-03-28-8/+8
| | | | | | | | | * Move all code into a "snekbox" package * Use logging code as __init__.py * Rename Snekbox class to NsJail * Create "site" sub-package * Move templates into this sub-package * Move Flask code into a new snekapp module
* Remove RMQ, Add API POST request method.Gravatar Scragly2019-01-20-12/+8
|
* upgrade alpine to 3.8 and python to 3.6.6, remove old tests also cache pipenvGravatar Christopher Baklid2018-07-29-15/+7
|
* update pipfile lock, handle value error, show error codes when unhandledGravatar Christopher Baklid2018-07-24-13/+16
|
* missing commaGravatar Christopher Baklid2018-07-05-6/+7
|
* I should have made an MR for thisGravatar Christopher Baklid2018-07-05-13/+13
|
* skip tests for now :(Gravatar Christopher Baklid2018-07-05-10/+9
|
* fix testsGravatar Christopher Baklid2018-07-05-6/+6
|
* adds rabbitmq service for testsGravatar Christopher Baklid2018-06-05-2/+1
|
* consistent naming conventions, update readme, hopefully fix travis testGravatar Christopher Baklid2018-06-03-1/+0
|
* nsjail workaround, fix forkbomb, add forkbomb unit testGravatar Christopher Baklid2018-06-03-2/+10
|
* set dependency on rmq publishGravatar Christopher Baklid2018-06-02-39/+41
|
* remove commented out code [ci skip]Gravatar Christopher Baklid2018-06-02-1/+0
|
* handle autodiscover better, find the python executable automatically, log ↵Gravatar Christopher Baklid2018-06-02-2/+2
| | | | errors not handled explicitly
* more testingGravatar Christopher Baklid2018-05-31-0/+17
|
* travis is annoyingGravatar Christopher Baklid2018-05-31-1/+4
|
* more testsGravatar Christopher Baklid2018-05-31-0/+25
|
* use the virtualenv python binary in travisGravatar Christopher Baklid2018-05-31-2/+2
|
* adds nsjail compiled for ubuntu to see if unit testing can work with thatGravatar Christopher Baklid2018-05-31-2/+8
|
* secure python executionGravatar Christopher Baklid2018-05-30-0/+8
make snekbox a class adds nsjail 2.5 (compiled on alpine 3.7) execute python code via nsjail