from salt.utils.validate import net
from tests.support.unit import TestCase


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",
            "2a03:4000:c:10aa:1017:f00d:aaaa:a:4506",
            "2a03::1::2",
        ]

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

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