setup.py + test runner