Michael Felt <[email protected]> added the comment:
from below:
In case of 3.7 first call to _ensure_resolved returns
('fe80::1', 12345, 0, 1)
then second call returns
('fe80::1', 12345, 0, 0)
Notice that scope is now completely lost and is set to 0, thus actual call to
socket.connect is wrong
In case of 3.6 both first and second call to _ensure_resolved return
('fe80::1%lo', 12345, 0, 1)
because in 3.6 case scope info is preserved in address and second call can
derive correct address tuple
I'll have to locate the PR I made to resolve the test issue AIX was having -
but it seems the address format ::1%lo is not supported everywhere. FYI: I do
not believe the PR was backported into 3.6.
** Found it:
commit 413118ebf3162418639a5c4af14b02d26571a02c
Author: Michael Felt <[email protected]>
Date: Fri Sep 14 01:35:56 2018 +0200
Fix test_asyncio for AIX - do not call transport.get_extra_info('sockname')
(#8907)
and
[3.7] bpo-34490: Fix test_asyncio for AIX - do not call
transport.get_extra_info('sockname') (GH-8907) #9286
Since in the first call - a scope of 1 is being returned - the initial "open"
seems to be working as expected.
Some "help" to be sure I do exactly the same tests.
**** Reading through the bpo text, my change was only to skip the test because
quote: On AIX with AF_UNIX family sockets getsockname() does not provide
'sockname'
and, from memory, the information being looked for is the bit after the '%' -
aka scope.
On the one hand - the test is working - the information being returned does not
match:
======================================================================
FAIL: test_create_connection_ipv6_scope
(test.test_asyncio.test_base_events.BaseEventLoopWithSelectorTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File
"/home/buildbot/buildarea/3.x.aixtools-aix-power6/build/Lib/unittest/mock.py",
line 1226, in patched
return func(*args, **keywargs)
File
"/home/buildbot/buildarea/3.x.aixtools-aix-power6/build/Lib/test/test_asyncio/test_base_events.py",
line 1316, in test_create_connection_ipv6_scope
sock.connect.assert_called_with(('fe80::1', 80, 0, 1))
File
"/home/buildbot/buildarea/3.x.aixtools-aix-power6/build/Lib/unittest/mock.py",
line 838, in assert_called_with
raise AssertionError(_error_message()) from cause
AssertionError: expected call not found.
Expected: connect(('fe80::1', 80, 0, 1))
Actual: connect(('fe80::1', 80, 0, 0))
----------------------------------------------------------------------
What is not clear from the test is that what "expected" says, is not the same
as the first address in the code:
coro = self.loop.create_connection(asyncio.Protocol, 'fe80::1%1', 80)
t, p = self.loop.run_until_complete(coro)
try:
sock.connect.assert_called_with(('fe80::1', 80, 0, 1))
_, kwargs = m_socket.socket.call_args
self.assertEqual(kwargs['family'], m_socket.AF_INET6)
self.assertEqual(kwargs['type'], m_socket.SOCK_STREAM)
finally:
t.close()
test_utils.run_briefly(self.loop) # allow transport to close
'fe80::1%1' <> 'fe80::1' - and maybe, on AIX - the initial connection failed.
(or maybe it has to have succeeded, or the failure message would look
different). I am not 'experienced' with IPv6 and scope.
----------
nosy: +Michael.Felt
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue35545>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com