FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

gh-80931: Skip some socket tests while hunting for refleaks on macOS by ronaldoussoren · Pull Request #114057 · python/cpython · GitHub

Repository navigation

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension .py  (3) All 1 file type selected
Viewed files
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Unified
Split
Hide whitespace
Diff view
Unified
Split
Hide whitespace
8 changes: 7 additions & 1 deletion Lib/test/libregrtest/refleak.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

from test import support
from test.support import os_helper
from test.support import refleak_helper

from .runtests import HuntRefleak
from .utils import clear_caches
Expand Down Expand Up @@ -96,7 +97,12 @@ def get_pooled_int(value):
support.gc_collect()

for i in rep_range:
results = test_func()
current = refleak_helper._hunting_for_refleaks
refleak_helper._hunting_for_refleaks = True
try:
results = test_func()
finally:
refleak_helper._hunting_for_refleaks = current

dash_R_cleanup(fs, ps, pic, zdc, abcs)
support.gc_collect()
Expand Down
8 changes: 8 additions & 0 deletions Lib/test/support/refleak_helper.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
"""
Utilities for changing test behaviour while hunting
for refleaks
"""

_hunting_for_refleaks = False
def hunting_for_refleaks():
return _hunting_for_refleaks
49 changes: 49 additions & 0 deletions Lib/test/test_socket.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from test.support import os_helper
from test.support import socket_helper
from test.support import threading_helper
from test.support import refleak_helper

import _thread as thread
import array
Expand Down Expand Up @@ -52,6 +53,35 @@
except ImportError:
_socket = None

def skipForRefleakHuntinIf(condition, issueref):

Eclips4 Jan 20, 2024 •
edited
Loading

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

Maybe it's make sense to store it in test.support.refleak_helper (as you said above)? It's can be useful in future in other situations like this

if not condition:
def decorator(f):
f.client_skip = lambda f: f
return f

else:
def decorator(f):
@contextlib.wraps(f)
def wrapper(*args, **kwds):
if refleak_helper.hunting_for_refleaks():
raise unittest.SkipTest(f"ignore while hunting for refleaks, see {issueref}")

return f(*args, **kwds)

def client_skip(f):
@contextlib.wraps(f)
def wrapper(*args, **kwds):
if refleak_helper.hunting_for_refleaks():
return

return f(*args, **kwds)

return wrapper
wrapper.client_skip = client_skip
return wrapper

return decorator

def get_cid():
if fcntl is None:
return None
Expand Down Expand Up @@ -3814,6 +3844,7 @@ def checkTruncatedHeader(self, result, ignoreflags=0):
self.checkFlags(flags, eor=True, checkset=socket.MSG_CTRUNC,
ignore=ignoreflags)

@skipForRefleakHuntinIf(sys.platform == "darwin", "#80931")
def testCmsgTruncNoBufSize(self):
# Check that no ancillary data is received when no buffer size
# is specified.
Expand All @@ -3823,40 +3854,49 @@ def testCmsgTruncNoBufSize(self):
# received.
ignoreflags=socket.MSG_CTRUNC)

@testCmsgTruncNoBufSize.client_skip
def _testCmsgTruncNoBufSize(self):
self.createAndSendFDs(1)

@skipForRefleakHuntinIf(sys.platform == "darwin", "#80931")
def testCmsgTrunc0(self):
# Check that no ancillary data is received when buffer size is 0.
self.checkTruncatedHeader(self.doRecvmsg(self.serv_sock, len(MSG), 0),
ignoreflags=socket.MSG_CTRUNC)

@testCmsgTrunc0.client_skip
def _testCmsgTrunc0(self):
self.createAndSendFDs(1)

# Check that no ancillary data is returned for various non-zero
# (but still too small) buffer sizes.

@skipForRefleakHuntinIf(sys.platform == "darwin", "#80931")
def testCmsgTrunc1(self):
self.checkTruncatedHeader(self.doRecvmsg(self.serv_sock, len(MSG), 1))

@testCmsgTrunc1.client_skip
def _testCmsgTrunc1(self):
self.createAndSendFDs(1)

@skipForRefleakHuntinIf(sys.platform == "darwin", "#80931")
def testCmsgTrunc2Int(self):
# The cmsghdr structure has at least three members, two of
# which are ints, so we still shouldn't see any ancillary
# data.
self.checkTruncatedHeader(self.doRecvmsg(self.serv_sock, len(MSG),
SIZEOF_INT * 2))

@testCmsgTrunc2Int.client_skip
def _testCmsgTrunc2Int(self):
self.createAndSendFDs(1)

@skipForRefleakHuntinIf(sys.platform == "darwin", "#80931")
def testCmsgTruncLen0Minus1(self):
self.checkTruncatedHeader(self.doRecvmsg(self.serv_sock, len(MSG),
socket.CMSG_LEN(0) - 1))

@testCmsgTruncLen0Minus1.client_skip
def _testCmsgTruncLen0Minus1(self):
self.createAndSendFDs(1)

Expand Down Expand Up @@ -3887,29 +3927,38 @@ def checkTruncatedArray(self, ancbuf, maxdata, mindata=0):
len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
self.checkFDs(fds)

@skipForRefleakHuntinIf(sys.platform == "darwin", "#80931")
def testCmsgTruncLen0(self):
self.checkTruncatedArray(ancbuf=socket.CMSG_LEN(0), maxdata=0)

@testCmsgTruncLen0.client_skip
def _testCmsgTruncLen0(self):
self.createAndSendFDs(1)

@skipForRefleakHuntinIf(sys.platform == "darwin", "#80931")
def testCmsgTruncLen0Plus1(self):
self.checkTruncatedArray(ancbuf=socket.CMSG_LEN(0) + 1, maxdata=1)

@testCmsgTruncLen0Plus1.client_skip
def _testCmsgTruncLen0Plus1(self):
self.createAndSendFDs(2)

Comment thread
ronaldoussoren marked this conversation as resolved.
@skipForRefleakHuntinIf(sys.platform == "darwin", "#80931")
def testCmsgTruncLen1(self):
self.checkTruncatedArray(ancbuf=socket.CMSG_LEN(SIZEOF_INT),
maxdata=SIZEOF_INT)

@testCmsgTruncLen1.client_skip
def _testCmsgTruncLen1(self):
self.createAndSendFDs(2)


@skipForRefleakHuntinIf(sys.platform == "darwin", "#80931")
def testCmsgTruncLen2Minus1(self):
self.checkTruncatedArray(ancbuf=socket.CMSG_LEN(2 * SIZEOF_INT) - 1,
maxdata=(2 * SIZEOF_INT) - 1)

@testCmsgTruncLen2Minus1.client_skip
def _testCmsgTruncLen2Minus1(self):
self.createAndSendFDs(2)

Expand Down

Back | FazBrowse Home | New Git URL