# -*- coding: utf-8 -*-

# Import python libs
from __future__ import absolute_import

# Import Salt Libs
from salt.utils.validate import net

# Import Salt Testing Libs
from salttesting import TestCase, skipIf
from salttesting.mock import NO_MOCK, NO_MOCK_REASON
from salttesting.helpers import ensure_in_syspath

ensure_in_syspath('../../')


@skipIf(NO_MOCK, NO_MOCK_REASON)
class ValidateNetTestCase(TestCase):
    '''
    TestCase for salt.utils.validate.net module
    '''

    def test_ipv4_addr(self):
        '''
        Test IPv4 address validation
        '''
        true_addrs = [
            '127.0.0.1',
            '127.0.0.1',
            '127.0.0.19',
            '1.1.1.1/28',
            '127.0.0.11/32',
        ]

        false_addrs = [
            '127.0.0.911',
            '127.0.0911',
            '127.0.011',
            '127.0.011/32',
            '::1',
            '::1/128',
            '::1/28',
        ]

        for addr in true_addrs:
            self.assertTrue(net.ipv4_addr(addr))

        for addr in false_addrs:
            self.assertFalse(net.ipv4_addr(addr))

    def test_ipv6_addr(self):
        '''
        Test IPv6 address validation
        '''
        true_addrs = [
            '::1',
            '::1/32',
            '::1/32',
            '::1/128',
            '2a03:4000:c:10aa:1017:f00d:aaaa:a',
        ]

        false_addrs = [
            '1.1.1.1',
            '::1/0',
            '::1/32d',
            '::1/129',
        ]

        for addr in true_addrs:
            self.assertTrue(net.ipv6_addr(addr))

        for addr in false_addrs:
            self.assertFalse(net.ipv6_addr(addr))


if __name__ == '__main__':
    from integration import run_tests
    run_tests(ValidateNetTestCase, needs_daemon=False)
