3
runbot-job is a small script intended to perform tasks on OpenERP projects,
7
from contextlib import contextmanager
16
javascript_tests = True
17
install_base_log_path = 'install-base.log'
18
install_all_log_path = 'install-all.log'
19
server_log_path = 'server.log'
20
javascript_tests_log_path = 'javascript_tests.log'
22
ORIGINAL_PATH = os.environ.get('PATH','').split(':')
24
def oe(env, log_path, command):
28
log_file = open(log_path, 'w')
29
p = subprocess.Popen(['oe'] + command.split(), stdout=log_file, stderr=log_file, close_fds=True, env=env)
32
def wait_until_server_is_ready():
34
with open(server_log_path, 'r') as f:
36
if re.search('HTTP service (.*) running on', line):
40
def check_install_success(log_path):
41
with open(log_path, 'r') as f:
43
if re.search('openerp.modules.loading: Modules loaded.', line):
49
env = env_from_args(args, 'base')
50
log_file = open(server_log_path, 'w')
51
cmd = 'python2 %s/openerp-server --addons-path %s --pidfile server-pid.txt' % \
52
(args.server_path, env['OPENERP_ADDONS'].replace(':', ','))
53
p = subprocess.Popen(cmd.split(), stdout=log_file, stderr=log_file, close_fds=True)
55
wait_until_server_is_ready() # TODO will blow if the server failed to start
58
os.kill(server_pid, 9)
62
def env_from_args(args, database_suffix):
63
paths = [args.server_path, args.command_path]
64
addons = [args.addons_path, os.path.join(args.web_path, 'addons'), os.path.join(args.server_path, 'openerp/tests/addons')]
66
'PYTHONPATH': ':'.join(paths),
67
'PATH': ':'.join(paths + ORIGINAL_PATH),
68
'OPENERP_DATABASE': '%s_%s' % (args.prefix, database_suffix),
69
'OPENERP_ADDONS': ':'.join(addons),
70
'OPENERP_HOST': '127.0.0.1',
71
'OPENERP_PORT': args.test_port,
79
env = env_from_args(args, 'base')
80
oe(env, os.path.join(args.prefix, install_base_log_path), 'initialize --tests')
81
r = check_install_success(os.path.join(args.prefix, install_base_log_path))
82
results['install_base'] = 0 if r else 1
85
env = env_from_args(args, 'all')
86
oe(env, os.path.join(args.prefix, install_all_log_path), 'initialize --all-modules --exclude auth_ldap --tests')
87
r = check_install_success(os.path.join(args.prefix, install_all_log_path))
88
results['install_all'] = 0 if r else 1
91
env = env_from_args(args, 'all')
92
with server(args) as p:
93
r = oe(env, os.path.join(args.prefix, javascript_tests_log_path), 'run-tests -d %s -m web.test_js' % env['OPENERP_DATABASE'])
94
results['javascript_tests'] = r
96
print json.dumps(results)
98
if __name__ == '__main__':
100
parser = argparse.ArgumentParser(
103
parser.add_argument('--prefix', metavar='PREFIX',
105
help='the prefix is used to create a working directory and to name databases')
106
parser.add_argument('--server-path', metavar='PATH',
108
help='path to the server library and executable')
109
parser.add_argument('--addons-path', metavar='PATH',
111
help='path to the addons')
112
parser.add_argument('--web-path', metavar='PATH',
114
help='path to the web addons')
115
parser.add_argument('--command-path', metavar='PATH',
117
help='path to the command library and executable')
118
parser.add_argument('--test-port', metavar='PORT',
120
help='port used to run the javascript tests')
122
parser.set_defaults(run=run)
123
args = parser.parse_args()