UDPStatusGetter socket bind fix for ipv6

Change-Id: I8b34d2212e46c9e4f2ceef040c5eeb03d29172b8
Co-Authored-By: Dustin Lundquist <dustin@null-ptr.net>
This commit is contained in:
Adam Harwell 2016-10-26 17:06:29 +02:00
parent ae0ca96e8a
commit 7e4ac5ba72
2 changed files with 15 additions and 10 deletions

View File

@ -65,7 +65,7 @@ class UDPStatusGetter(object):
if self.sock is not None:
self.sock.close()
self.sock = socket.socket(ai_family, socket.SOCK_DGRAM)
self.sock.bind((ip, port))
self.sock.bind(self.sockaddr)
if cfg.CONF.health_manager.sock_rlimit > 0:
rlimit = cfg.CONF.health_manager.sock_rlimit
LOG.info(_LI("setting sock rlimit to %s"), rlimit)

View File

@ -31,6 +31,13 @@ KEY = 'TEST'
IP = '192.0.2.10'
PORT = random.randrange(1, 9000)
RLIMIT = random.randrange(1, 100)
FAKE_ADDRINFO = (
socket.AF_INET,
socket.SOCK_DGRAM,
socket.IPPROTO_UDP,
'',
(IP, PORT)
)
class TestHeartbeatUDP(base.TestCase):
@ -51,20 +58,19 @@ class TestHeartbeatUDP(base.TestCase):
def test_update(self, mock_socket, mock_getaddrinfo):
socket_mock = mock.MagicMock()
mock_socket.return_value = socket_mock
mock_getaddrinfo.return_value = [range(1, 6)]
mock_getaddrinfo.return_value = [FAKE_ADDRINFO]
bind_mock = mock.MagicMock()
socket_mock.bind = bind_mock
getter = heartbeat_udp.UDPStatusGetter(
None, None)
getter = heartbeat_udp.UDPStatusGetter(None, None)
mock_getaddrinfo.assert_called_with(IP, PORT, 0, 2)
self.assertEqual(5, getter.sockaddr)
mock_socket.assert_called_with(1, socket.SOCK_DGRAM)
mock_getaddrinfo.assert_called_with(IP, PORT, 0, socket.SOCK_DGRAM)
self.assertEqual((IP, PORT), getter.sockaddr)
mock_socket.assert_called_with(socket.AF_INET, socket.SOCK_DGRAM)
bind_mock.assert_called_once_with((IP, PORT))
self.conf.config(group="health_manager", sock_rlimit=RLIMIT)
mock_getaddrinfo.return_value = [range(1, 6), range(1, 6)]
mock_getaddrinfo.return_value = [FAKE_ADDRINFO, FAKE_ADDRINFO]
getter.update(KEY, IP, PORT)
@mock.patch('socket.getaddrinfo')
@ -76,8 +82,7 @@ class TestHeartbeatUDP(base.TestCase):
recvfrom = mock.MagicMock()
socket_mock.recvfrom = recvfrom
getter = heartbeat_udp.UDPStatusGetter(
None, None)
getter = heartbeat_udp.UDPStatusGetter(None, None)
# key = 'TEST' msg = {"testkey": "TEST"}
sample_msg = ('78daab562a492d2ec94ead54b252500a710d0e5'