mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
* Default missing CreateProcess startup attributes Assisted-by: Codex:GPT-6 * Use a single platform guard for winapi tests Assisted-by: Codex:GPT-6
90 lines
2.8 KiB
Python
90 lines
2.8 KiB
Python
"""Check Windows event-log conversions without invoking host operations."""
|
|
|
|
import sys
|
|
|
|
from testutils import assert_raises
|
|
|
|
if sys.platform != "win32":
|
|
sys.exit(0)
|
|
|
|
import _winapi
|
|
|
|
# Every call fails before a host operation. ReportEvent overflow cases
|
|
# also retain an embedded NUL as an independent safety barrier.
|
|
assert _winapi.EVENTLOG_SUCCESS == 0
|
|
assert _winapi.EVENTLOG_ERROR_TYPE == 1
|
|
assert _winapi.EVENTLOG_WARNING_TYPE == 2
|
|
assert _winapi.EVENTLOG_INFORMATION_TYPE == 4
|
|
assert _winapi.EVENTLOG_AUDIT_SUCCESS == 8
|
|
assert _winapi.EVENTLOG_AUDIT_FAILURE == 16
|
|
|
|
assert_raises(TypeError, _winapi.RegisterEventSource, 1, "source\0")
|
|
assert_raises(TypeError, _winapi.RegisterEventSource, None, 1)
|
|
assert_raises(TypeError, _winapi.RegisterEventSource, None, None)
|
|
assert_raises(ValueError, _winapi.RegisterEventSource, None, "source\0")
|
|
assert_raises(ValueError, _winapi.RegisterEventSource, "server\0", "source\0")
|
|
assert_raises(ValueError, _winapi.RegisterEventSource, "", "source\0")
|
|
assert_raises(TypeError, _winapi.DeregisterEventSource, "invalid handle")
|
|
assert_raises(TypeError, _winapi.DeregisterEventSource, None)
|
|
assert_raises(TypeError, _winapi.ReportEvent, "invalid handle", 0, 0, 0, "message\0")
|
|
assert_raises(ValueError, _winapi.ReportEvent, 0, 0, 0, 0, "message\0")
|
|
assert_raises(TypeError, _winapi.ReportEvent, 0, 0, 0, 0, None)
|
|
for index, bits in ((1, 16), (2, 16), (3, 32)):
|
|
for invalid, exception in ((-1, ValueError), (1 << bits, OverflowError)):
|
|
arguments = [0, 0, 0, 0, "message\0"]
|
|
arguments[index] = invalid
|
|
assert_raises(exception, _winapi.ReportEvent, *arguments)
|
|
arguments = [0, 0, 0, 0, "message\0"]
|
|
arguments[index] = "invalid integer"
|
|
assert_raises(TypeError, _winapi.ReportEvent, *arguments)
|
|
|
|
|
|
import subprocess
|
|
|
|
|
|
class PartialStartupInfo:
|
|
dwFlags = 0
|
|
|
|
def __getattr__(self, name):
|
|
raise ValueError(name)
|
|
|
|
|
|
for startup in (None, PartialStartupInfo()):
|
|
process, thread, _, _ = _winapi.CreateProcess(
|
|
sys.executable,
|
|
subprocess.list2cmdline([sys.executable, "-c", "pass"]),
|
|
None,
|
|
None,
|
|
False,
|
|
_winapi.CREATE_NO_WINDOW,
|
|
None,
|
|
None,
|
|
startup,
|
|
)
|
|
try:
|
|
status = _winapi.WaitForSingleObject(process, 10000)
|
|
if status != _winapi.WAIT_OBJECT_0:
|
|
_winapi.TerminateProcess(process, 1)
|
|
_winapi.WaitForSingleObject(process, 10000)
|
|
assert status == _winapi.WAIT_OBJECT_0
|
|
assert _winapi.GetExitCodeProcess(process) == 0
|
|
finally:
|
|
_winapi.CloseHandle(thread)
|
|
_winapi.CloseHandle(process)
|
|
|
|
startup = subprocess.STARTUPINFO()
|
|
startup.dwFlags = "invalid"
|
|
assert_raises(
|
|
TypeError,
|
|
_winapi.CreateProcess,
|
|
None,
|
|
"invalid\0",
|
|
None,
|
|
None,
|
|
False,
|
|
0,
|
|
None,
|
|
None,
|
|
startup,
|
|
)
|