core-agent-linux/qubesagent/test_vmexec.py

53 lines
1.9 KiB
Python
Raw Permalink Normal View History

from unittest import TestCase
from unittest.mock import patch, call
from qubesagent.vmexec import main, decode, DecodeError
class TestVmExec(TestCase):
def test_00_decode_simple(self):
self.assertEqual(decode('echo+Hello'), [b'echo', b'Hello'])
def test_01_decode_empty(self):
self.assertEqual(decode('echo+'), [b'echo', b''])
def test_02_decode_escaping(self):
self.assertEqual(decode('echo+Hello-20world'),
[b'echo', b'Hello world'])
self.assertEqual(decode('-0A-0D'),
[b'\n\r'])
self.assertEqual(decode('-2Fbin-2Fls'),
[b'/bin/ls'])
self.assertEqual(decode('ls+--la'),
[b'ls', b'-la'])
self.assertEqual(decode('ls+---61'),
[b'ls', b'-a'])
self.assertEqual(decode('ls+----help'),
[b'ls', b'--help'])
def test_03_decode_errors(self):
with self.assertRaises(DecodeError):
decode('illegal/slash')
with self.assertRaises(DecodeError):
decode('illegal-singledash')
with self.assertRaises(DecodeError):
decode('smalletters-0a-0d')
with self.assertRaises(DecodeError):
decode('incompletebyte-A')
with self.assertRaises(DecodeError):
decode('incomplete-Abyte')
with self.assertRaises(DecodeError):
decode('ls+---threeslashes')
def test_10_main_exec(self):
with patch('os.execvp') as mock_execvp:
main(['vmexec', 'ls+--la'])
self.assertEqual(mock_execvp.call_args_list, [
call(b'ls', [b'ls', b'-la'])])
def test_11_main_fail(self):
with self.assertRaises(SystemExit):
main(['vmexec'])
with self.assertRaises(SystemExit):
main(['vmexec', 'illegal/slash'])