Files
1ndahous3 bd85943b62 Default absent CreateProcess startup attributes (#9267)
* Default missing CreateProcess startup attributes

Assisted-by: Codex:GPT-6

* Use a single platform guard for winapi tests

Assisted-by: Codex:GPT-6
2026-10-21 19:57:55 +09:00

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,
)