80 lines
1.9 KiB
Python
80 lines
1.9 KiB
Python
#!/usr/bin/env python
|
|
|
|
import sys
|
|
import os
|
|
import argparse
|
|
import random
|
|
import tempfile
|
|
import json
|
|
import time
|
|
|
|
|
|
def parse_params(param_string):
|
|
test_marker = 'test '
|
|
assert param_string.startswith(test_marker)
|
|
param_string = param_string[len(test_marker):]
|
|
result = dict()
|
|
kv_pairs = param_string.split(',')
|
|
for p in kv_pairs:
|
|
if p.find(':') == -1:
|
|
continue
|
|
key, value = p.split(':')
|
|
result[key] = value
|
|
return result
|
|
|
|
|
|
class MockException(RuntimeError):
|
|
pass
|
|
|
|
|
|
def main():
|
|
param_string = sys.argv[1]
|
|
params = parse_params(param_string)
|
|
output = ' '.join(sys.argv)
|
|
tmp_dir = tempfile.gettempdir()
|
|
tmp_file = os.path.join(tmp_dir, 'rnd_mock.{}.txt'.format(random.randint(0, 1000 * 1000 * 1000)))
|
|
with open(tmp_file, 'w') as f:
|
|
for i in range(10):
|
|
f.write(param_string + '\n')
|
|
report = {'result_path': tmp_file}
|
|
|
|
|
|
if 'sleep' in params:
|
|
sleep_time = float(params['sleep'])
|
|
time.sleep(sleep_time)
|
|
|
|
if 'error_type' in params:
|
|
report['error_type'] = params['error_type']
|
|
|
|
if 'error_msg' in params:
|
|
report['error_msg'] = params['error_msg']
|
|
|
|
if 'warnings' in params:
|
|
report['warnings'] = params['warnings'].split(';')
|
|
|
|
if 'unhandled_exception' in params:
|
|
raise MockException('Unhandled Mock Exception')
|
|
|
|
if 'handled_exception' in params:
|
|
try:
|
|
raise MockException('Handled Mock Exception')
|
|
except Exception as e:
|
|
report['error_type'] = 'Exception'
|
|
report['error_msg'] = str(e)
|
|
|
|
if 'stderr' in params:
|
|
sys.stderr.write(params['stderr'])
|
|
|
|
if 'stdout' in params:
|
|
sys.stdout.write(params['stdout'])
|
|
else:
|
|
sys.stdout.write(json.dumps(report))
|
|
|
|
if 'return_code' in params:
|
|
return_code = int(params['return_code'])
|
|
sys.exit(return_code)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|