95 lines
2.7 KiB
Python
95 lines
2.7 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved.
|
||
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
# found in the LICENSE file.
|
||
|
|
||
|
"""
|
||
|
Run unit tests. This is invoked by:
|
||
|
|
||
|
$ python -m psutil.tests
|
||
|
"""
|
||
|
|
||
|
import contextlib
|
||
|
import optparse
|
||
|
import os
|
||
|
import sys
|
||
|
import tempfile
|
||
|
try:
|
||
|
from urllib.request import urlopen # py3
|
||
|
except ImportError:
|
||
|
from urllib2 import urlopen
|
||
|
|
||
|
from psutil.tests import PYTHON_EXE
|
||
|
from psutil.tests.runner import run
|
||
|
|
||
|
|
||
|
HERE = os.path.abspath(os.path.dirname(__file__))
|
||
|
GET_PIP_URL = "https://bootstrap.pypa.io/get-pip.py"
|
||
|
TEST_DEPS = []
|
||
|
if sys.version_info[:2] == (2, 6):
|
||
|
TEST_DEPS.extend(["ipaddress", "unittest2", "argparse", "mock==1.0.1"])
|
||
|
elif sys.version_info[:2] == (2, 7) or sys.version_info[:2] <= (3, 2):
|
||
|
TEST_DEPS.extend(["ipaddress", "mock"])
|
||
|
|
||
|
|
||
|
def install_pip():
|
||
|
try:
|
||
|
import pip # NOQA
|
||
|
except ImportError:
|
||
|
import ssl
|
||
|
f = tempfile.NamedTemporaryFile(suffix='.py')
|
||
|
with contextlib.closing(f):
|
||
|
print("downloading %s to %s" % (GET_PIP_URL, f.name))
|
||
|
if hasattr(ssl, '_create_unverified_context'):
|
||
|
ctx = ssl._create_unverified_context()
|
||
|
else:
|
||
|
ctx = None
|
||
|
kwargs = dict(context=ctx) if ctx else {}
|
||
|
req = urlopen(GET_PIP_URL, **kwargs)
|
||
|
data = req.read()
|
||
|
f.write(data)
|
||
|
f.flush()
|
||
|
|
||
|
print("installing pip")
|
||
|
code = os.system('%s %s --user' % (PYTHON_EXE, f.name))
|
||
|
return code
|
||
|
|
||
|
|
||
|
def install_test_deps(deps=None):
|
||
|
"""Install test dependencies via pip."""
|
||
|
if deps is None:
|
||
|
deps = TEST_DEPS
|
||
|
deps = set(deps)
|
||
|
if deps:
|
||
|
is_venv = hasattr(sys, 'real_prefix')
|
||
|
opts = "--user" if not is_venv else ""
|
||
|
install_pip()
|
||
|
code = os.system('%s -m pip install %s --upgrade %s' % (
|
||
|
PYTHON_EXE, opts, " ".join(deps)))
|
||
|
return code
|
||
|
|
||
|
|
||
|
def main():
|
||
|
usage = "%s -m psutil.tests [opts]" % PYTHON_EXE
|
||
|
parser = optparse.OptionParser(usage=usage, description="run unit tests")
|
||
|
parser.add_option("-i", "--install-deps",
|
||
|
action="store_true", default=False,
|
||
|
help="don't print status messages to stdout")
|
||
|
|
||
|
opts, args = parser.parse_args()
|
||
|
if opts.install_deps:
|
||
|
install_pip()
|
||
|
install_test_deps()
|
||
|
else:
|
||
|
for dep in TEST_DEPS:
|
||
|
try:
|
||
|
__import__(dep.split("==")[0])
|
||
|
except ImportError:
|
||
|
sys.exit("%r lib is not installed; run %s -m psutil.tests "
|
||
|
"--install-deps" % (dep, PYTHON_EXE))
|
||
|
run()
|
||
|
|
||
|
|
||
|
main()
|