mirror of
https://github.com/python/cpython.git
synced 2025-07-23 03:05:38 +00:00
gh-119690: Adds Unicode support for named pipes in _winapi (GH-119717)
(cherry picked from commit 78d697b7d5
)
Co-authored-by: Steve Dower <steve.dower@python.org>
This commit is contained in:
parent
ea48de4f4f
commit
8e0777df1f
6 changed files with 92 additions and 29 deletions
|
@ -7,7 +7,7 @@ import re
|
|||
import threading
|
||||
import time
|
||||
import unittest
|
||||
from test.support import import_helper
|
||||
from test.support import import_helper, os_helper
|
||||
|
||||
_winapi = import_helper.import_module('_winapi', required_on=['win'])
|
||||
|
||||
|
@ -127,3 +127,35 @@ class WinAPITests(unittest.TestCase):
|
|||
|
||||
# Should contain "PROGRA~" but we can't predict the number
|
||||
self.assertIsNotNone(re.match(r".\:\\PROGRA~\d", actual.upper()), actual)
|
||||
|
||||
def test_namedpipe(self):
|
||||
pipe_name = rf"\\.\pipe\LOCAL\{os_helper.TESTFN}"
|
||||
|
||||
# Pipe does not exist, so this raises
|
||||
with self.assertRaises(FileNotFoundError):
|
||||
_winapi.WaitNamedPipe(pipe_name, 0)
|
||||
|
||||
pipe = _winapi.CreateNamedPipe(
|
||||
pipe_name,
|
||||
_winapi.PIPE_ACCESS_DUPLEX,
|
||||
8, # 8=PIPE_REJECT_REMOTE_CLIENTS
|
||||
2, # two instances available
|
||||
32, 32, 0, 0)
|
||||
self.addCleanup(_winapi.CloseHandle, pipe)
|
||||
|
||||
# Pipe instance is available, so this passes
|
||||
_winapi.WaitNamedPipe(pipe_name, 0)
|
||||
|
||||
with open(pipe_name, 'w+b') as pipe2:
|
||||
# No instances available, so this times out
|
||||
# (WinError 121 does not get mapped to TimeoutError)
|
||||
with self.assertRaises(OSError):
|
||||
_winapi.WaitNamedPipe(pipe_name, 0)
|
||||
|
||||
_winapi.WriteFile(pipe, b'testdata')
|
||||
self.assertEqual(b'testdata', pipe2.read(8))
|
||||
|
||||
self.assertEqual((b'', 0), _winapi.PeekNamedPipe(pipe, 8)[:2])
|
||||
pipe2.write(b'testdata')
|
||||
pipe2.flush()
|
||||
self.assertEqual((b'testdata', 8), _winapi.PeekNamedPipe(pipe, 8)[:2])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue