Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix test-driver output parsing crash on Ubuntu
When running tests on Ubuntu VMs, the `test-driver` can crash if the executed command calls `sudo` and writes to `stderr`. For example: ```python vm.execute("sudo bash -c \"echo 'Created foo → bar.\n' >&2 && echo 'foo' \"") ``` `sudo` spawns a new TTY for `stderr` on Ubuntu that gets read by the `test-driver`'s output parsing. However, the `test-driver` only expects base64-encoded `stdout` and fails when `stderr` data is read. - Normal command (note `stderr` usees `/dev/ttyS0`) ``` > bash -c 'echo $$; ls -l /proc/$$/fd' lr-x------ 1 root root 64 Feb 18 06:10 0 -> /dev/hvc0 l-wx------ 1 root root 64 Feb 18 06:10 1 -> pipe:[20942] l-wx------ 1 root root 64 Feb 18 06:10 2 -> /dev/ttyS0 lr-x------ 1 root root 64 Feb 18 06:10 3 -> /proc/664/fd ``` - Using `sudo` (note `stderr` uses `/dev/pts/0`) ``` > sudo bash -c 'echo $$; ls -l /proc/$$/fd lrwx------ 1 root root 64 Feb 18 06:10 0 -> /dev/pts/0 l-wx------ 1 root root 64 Feb 18 06:10 1 -> pipe:[20943] lrwx------ 1 root root 64 Feb 18 06:10 2 -> /dev/pts/0 lr-x------ 1 root root 64 Feb 18 06:10 3 -> /proc/670/fd ``` Because `stderr` is now read along with the `stdout`, the `test-driver`'s base64 decoding code crashes on unexpected data: - [encoding step](https://github.com/NixOS/nixpkgs/blob/8a24fbd0f3b4f47f01c897a95b1b65d6a5576c01/nixos/lib/test-driver/src/test_driver/machine.py#L578), - [receiving the data](https://github.com/NixOS/nixpkgs/blob/8a24fbd0f3b4f47f01c897a95b1b65d6a5576c01/nixos/lib/test-driver/src/test_driver/machine.py#L515), - [decoding step](https://github.com/NixOS/nixpkgs/blob/8a24fbd0f3b4f47f01c897a95b1b65d6a5576c01/nixos/lib/test-driver/src/test_driver/machine.py#L588). A minimal reproducible example is provided in [am-on/nix-test-driver-ubuntu-bug](https://github.com/am-on/nix-test-driver-ubuntu-bug). Related issues: - #84 - #5
- Loading branch information