53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
|
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'])
|