collector: enable the service to listen on IPv6.

It makes udp_address=::0 work.

Change-Id: Ib77dce329d8782a7079581a371efd3530c2f2942
Closes-Bug: 1435897
This commit is contained in:
Sofer Athlan-Guyot 2015-03-23 15:17:08 -04:00
parent b0ba685268
commit b6486bedab
2 changed files with 19 additions and 2 deletions

View File

@ -16,6 +16,7 @@
import socket
import msgpack
import netaddr
import oslo.messaging
from oslo_config import cfg
from oslo_utils import timeutils
@ -107,7 +108,10 @@ class CollectorService(os_service.Service):
self.tg.add_timer(604800, lambda: None)
def start_udp(self):
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
address_family = socket.AF_INET
if netaddr.valid_ipv6(cfg.CONF.collector.udp_address):
address_family = socket.AF_INET6
udp = socket.socket(address_family, socket.SOCK_DGRAM)
udp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
udp.bind((cfg.CONF.collector.udp_address,
cfg.CONF.collector.udp_port))

View File

@ -141,14 +141,27 @@ class TestCollector(tests_base.BaseTestCase):
udp_socket = self._make_fake_socket(self.counter)
with mock.patch('socket.socket', return_value=udp_socket):
with mock.patch('socket.socket') as mock_socket:
mock_socket.return_value = udp_socket
self.srv.start()
mock_socket.assert_called_with(socket.AF_INET, socket.SOCK_DGRAM)
self._verify_udp_socket(udp_socket)
mock_dispatcher.record_metering_data.assert_called_once_with(
self.counter)
def test_udp_socket_ipv6(self):
self._setup_messaging(False)
self.CONF.set_override('udp_address', '::1', group='collector')
self._setup_fake_dispatcher()
sock = self._make_fake_socket('data')
with mock.patch.object(socket, 'socket') as mock_socket:
mock_socket.return_value = sock
self.srv.start()
mock_socket.assert_called_with(socket.AF_INET6, socket.SOCK_DGRAM)
def test_udp_receive_storage_error(self):
self._setup_messaging(False)
mock_dispatcher = self._setup_fake_dispatcher()