diff --git a/designate/notification_handler/base.py b/designate/notification_handler/base.py index b3888fee3..3b28d783a 100644 --- a/designate/notification_handler/base.py +++ b/designate/notification_handler/base.py @@ -19,6 +19,8 @@ import abc from oslo_config import cfg from oslo_log import log as logging +import re + from designate import exceptions from designate.central import rpcapi as central_rpcapi from designate.context import DesignateContext @@ -100,12 +102,16 @@ class BaseAddressHandler(NotificationHandler): 'ip_version': version, } - # TODO(endre): Add v6 support if version == 4: data['ip_address'] = ip.replace('.', '-') ip_data = ip.split(".") for i in [0, 1, 2, 3]: data["octet%s" % i] = ip_data[i] + if version == 6: + data['ip_address'] = ip.replace(':', '-') + ip_data = re.split('::|:', ip) + for i in range(len(ip_data)): + data["octet%s" % i] = ip_data[i] return data def _get_formatv4(self): diff --git a/designate/tests/test_notification_handler/test_base.py b/designate/tests/test_notification_handler/test_base.py new file mode 100644 index 000000000..93bb11b6c --- /dev/null +++ b/designate/tests/test_notification_handler/test_base.py @@ -0,0 +1,45 @@ +# Copyright 2012 Managed I.T. +# +# Author: Kiall Mac Innes +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +from designate.tests import TestCase +from designate.notification_handler import base + + +class InheritFormBaseAddressHandler(base.BaseAddressHandler): + """Class to inherit from BaseAddressHandler to test its methods + + Because BaseAddressHandler is an abstract class, in order to test methods + we need to create something to inherit from it so we have something + instantiatable. + """ + def get_event_types(self): + pass + + def get_exchange_topics(self): + pass + + def process_notification(self): + pass + + +class BaseAddressHandlerTest(TestCase): + def test_get_ip_data_support_v6(self): + addr_dict = {'address': '1762::B03:1:AF18', 'version': 6} + baseaddresshandler = InheritFormBaseAddressHandler() + observe = baseaddresshandler._get_ip_data(addr_dict) + expect = {'octet1': 'B03', 'octet0': '1762', 'octet3': 'AF18', + 'octet2': '1', 'ip_version': 6, + 'ip_address': '1762--B03-1-AF18'} + self.assertEqual(observe, expect)