1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
import pytest
try:
import nt as posix
_WIN32 = True
except ImportError:
import posix
_WIN32 = False
os = posix
if hasattr(os, "fork"):
def test_register_at_fork():
with pytest.raises(TypeError): # no args
os.register_at_fork()
with pytest.raises(TypeError): # positional args not supported
os.register_at_fork(lambda : 1)
with pytest.raises(TypeError): # not callable
os.register_at_fork(before=1)
with pytest.raises(TypeError): # wrong keyword
os.register_at_fork(a=1)
# XXX this is unfortunately a small leak! all further tests that fork
# will call these callbacks and append four ints to l
l = [1]
os.register_at_fork(before=lambda: l.append(2))
os.register_at_fork(after_in_parent=lambda: l.append(5))
os.register_at_fork(after_in_child=lambda: l.append(3))
def double_last():
l[-1] *= 2
os.register_at_fork(
before=lambda: l.append(4),
after_in_parent=lambda: l.append(-1),
after_in_child=double_last)
pid = os.fork()
if pid == 0: # child
# l == [1, 4, 2, 6]
os._exit(sum(l))
assert l == [1, 4, 2, 5, -1]
pid1, status1 = os.waitpid(pid, 0)
assert pid1 == pid
assert os.WIFEXITED(status1)
res = os.WEXITSTATUS(status1)
assert res == 13
def test_cpu_count():
cc = posix.cpu_count()
assert cc is None or (isinstance(cc, int) and cc > 0)
def test_putenv_invalid_name():
with pytest.raises(ValueError):
posix.putenv("foo=bar", "xxx")
if not _WIN32:
def test_all_pathconf_defined():
import sys
import posix
try:
fd = sys.stdin.fileno()
except ValueError:
# translated test run with a fake sys.stdin with no fileno
fd = 1
for name in posix.pathconf_names:
posix.fpathconf(fd, name) # does not crash
if _WIN32:
def test__supports_virtual_terminal():
import sys
isatty = os.isatty(sys.stderr.fileno())
assert os._supports_virtual_terminal() == isatty
|