3 # Copyright (C) 2014 Ipsilon project Contributors, for license see COPYING
7 from ipsilon.util import plugin
13 from helpers.common import WRAP_HOSTNAME # pylint: disable=relative-import
23 (pathname, dummy) = os.path.split(inspect.getfile(Tests))
24 self.plugins = p.get_plugins(pathname, 'IpsilonTest')
28 parser = argparse.ArgumentParser(description='Ipsilon Tests Environment')
29 parser.add_argument('--path', default='%s/testdir' % os.getcwd(),
30 help="Directory in which tests are run")
31 parser.add_argument('--test', default='test1',
32 help="The test to run")
33 parser.add_argument('--wrappers', default='auto',
34 choices=['yes', 'no', 'auto'],
35 help="Run the tests with socket wrappers")
37 return vars(parser.parse_args())
40 def try_wrappers(base, wrappers):
44 pkgcfg = subprocess.Popen(['pkg-config', '--exists', 'socket_wrapper'])
46 if pkgcfg.returncode != 0:
47 if wrappers == 'auto':
50 raise ValueError('Socket Wrappers not available')
52 pkgcfg = subprocess.Popen(['pkg-config', '--exists', 'nss_wrapper'])
54 if pkgcfg.returncode != 0:
55 if wrappers == 'auto':
58 raise ValueError('Nss Wrappers not available')
60 wrapdir = os.path.join(base, 'wrapdir')
63 hosts_file = os.path.join(base, 'hosts')
64 with open(hosts_file, 'w+') as f:
65 f.write('127.0.0.9 %s\n' % WRAP_HOSTNAME)
67 wenv = {'LD_PRELOAD': 'libsocket_wrapper.so libnss_wrapper.so',
68 'SOCKET_WRAPPER_DIR': wrapdir,
69 'SOCKET_WRAPPER_DEFAULT_IFACE': '9',
70 'SOCKET_WRAPPER_DEBUGLEVEL': '1',
71 'NSS_WRAPPER_HOSTNAME': WRAP_HOSTNAME,
72 'NSS_WRAPPER_HOSTS': hosts_file}
77 if __name__ == '__main__':
82 if args['test'] not in tests.plugins:
83 print >> sys.stderr, "Unknown test [%s]" % args['test']
85 test = tests.plugins[args['test']]
87 if not os.path.exists(args['path']):
88 os.makedirs(args['path'])
90 test.setup_base(args['path'], test)
92 env = try_wrappers(test.testdir, args['wrappers'])
93 env['PYTHONPATH'] = test.rootdir
94 env['TESTDIR'] = test.testdir
97 test.setup_servers(env)
102 except Exception, e: # pylint: disable=broad-except
103 print >> sys.stderr, "Error: %s" % repr(e)
104 traceback.print_exc(None, sys.stderr)
109 # Wait until all of the sockets are closed by the OS