Пример #1
0
    def create_domains(self):
        private = View(name="private")
        private.save()
        public = View(name="public")
        public.save()
        d0 = create_fake_zone("dc.mozilla.com", suffix="")
        s = d0.soa
        d = Domain(name='vlan.dc.mozilla.com')
        d.save()
        d.soa = s
        d.save()
        Domain(name='arpa').save()
        Domain(name='in-addr.arpa').save()

        # Create Reverse Domains
        d = create_fake_zone("10.in-addr.arpa", suffix="")

        d = create_fake_zone("66.in-addr.arpa", suffix="")

        vlan = Vlan(name='vlan', number=99)
        vlan.save()
        site = Site(name='dc')
        site.save()
        network = Network(network_str="10.0.0.0/8", ip_type='4')
        network2 = Network(network_str="66.66.66.0/24", ip_type='4')
        network2.update_network()
        network2.save()
        network.vlan = vlan
        network.site = site
        network.update_network()
        network.save()
        r = Range(
            start_str='10.99.99.1',
            end_str='10.99.99.254',
            network=network,)
        r.clean()
        r.save()
        r = Range(
            start_str='66.66.66.1',
            end_str='66.66.66.254',
            network=network2,)
        r.clean()
        r.save()
Пример #2
0
 def create_domains(self):
     private = View(name="private")
     private.save()
     public = View(name="public")
     public.save()
     Domain(name='com').save()
     Domain(name='mozilla.com').save()
     Domain(name='dc.mozilla.com').save()
     Domain(name='vlan.dc.mozilla.com').save()
     Domain(name='arpa').save()
     Domain(name='in-addr.arpa').save()
     Domain(name='10.in-addr.arpa').save()
     Domain(name='66.in-addr.arpa').save()
     vlan = Vlan(name='vlan', number=99)
     vlan.save()
     site = Site(name='dc')
     site.save()
     network = Network(network_str="10.0.0.0/8", ip_type='4')
     network2 = Network(network_str="66.66.66.0/24", ip_type='4')
     network2.update_network()
     network2.save()
     network.vlan = vlan
     network.site = site
     network.update_network()
     network.save()
     r = Range(
         start_str='10.99.99.1',
         end_str='10.99.99.254',
         network=network,)
     r.clean()
     r.save()
     r = Range(
         start_str='66.66.66.1',
         end_str='66.66.66.254',
         network=network2,)
     r.clean()
     r.save()
Пример #3
0
class V4RangeTests(TestCase):

    def setUp(self):
        self.d = Domain(name="com")
        self.d.save()
        Domain(name="arpa").save()
        Domain(name="in-addr.arpa").save()
        Domain(name="10.in-addr.arpa").save()
        self.s = Network(network_str="10.0.0.0/16", ip_type='4')
        self.s.update_network()
        self.s.save()

        self.s1 = Network(network_str="10.2.1.0/24", ip_type='4')
        self.s1.update_network()
        self.s1.save()

    def do_add(self, start_str, end_str, default_domain, network, rtype,
               ip_type):
        r = Range(start_str=start_str, end_str=end_str, network=network)
        r.__repr__()
        r.save()
        return r

    def test1_create(self):
        start_str = "10.0.0.1"
        end_str = "10.0.0.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

    def test2_create(self):
        start_str = "10.0.1.1"
        end_str = "10.0.1.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

    def test2_bad_create(self):
        # start > end
        start_str = "10.0.0.2"
        end_str = "10.0.0.1"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test3_bad_create(self):
        # outside of network
        start_str = "11.0.0.2"
        end_str = "10.0.0.88"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test4_bad_create(self):
        # outside of network
        start_str = "10.2.0.0"
        end_str = "10.2.1.88"
        default_domain = self.d
        network = self.s1
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test5_bad_create(self):
        # duplicate
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test6_bad_create(self):
        # Partial overlap
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}

        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.30"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}

        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test7_bad_create(self):
        # Partial overlap
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.56"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test8_bad_create(self):
        # Full overlap
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        start_str = "10.0.4.2"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test9_bad_create(self):
        # Full overlap
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        start_str = "10.0.4.2"
        end_str = "10.0.4.54"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test10_bad_create(self):
        # Duplicate add
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        start_str = "10.0.5.2"
        end_str = "10.0.5.56"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}

        self.do_add(**kwargs)
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test11_bad_create(self):
        # More overlap tests
        start_str = "10.0.4.5"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        start_str = "10.0.4.60"
        end_str = "10.0.4.63"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.4"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        start_str = "10.0.4.2"
        end_str = "10.0.4.54"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test12_bad_create(self):
        # Update range to something outside of the subnet.
        start_str = "10.0.4.5"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        start_str = "10.0.4.60"
        end_str = "10.0.4.63"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.4"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        r = self.do_add(**kwargs)
        r.end_str = "160.0.4.60"

        self.assertRaises(ValidationError, r.clean)

    def test13_bad_create(self):
        start_str = "10.0.4.5"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test1_freeip(self):
        start_str = "10.0.33.1"
        end_str = "10.0.33.3"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'
        system = create_fake_host(hostname="foo.mozilla.com")

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        r = self.do_add(**kwargs)
        self.assertEqual(str(r.get_next_ip()), "10.0.33.1")
        self.assertEqual(str(r.get_next_ip()), "10.0.33.1")
        StaticReg.objects.create(
            label="foo", domain=self.d, ip_type='4',
            ip_str=str(r.get_next_ip()), system=system
        )
        self.assertEqual(str(r.get_next_ip()), "10.0.33.2")
        StaticReg.objects.create(
            label="foo", domain=self.d, ip_type='4',
            ip_str=str(r.get_next_ip()), system=system
        )
        self.assertEqual(str(r.get_next_ip()), "10.0.33.3")
        StaticReg.objects.create(
            label="foo", domain=self.d, ip_type='4',
            ip_str=str(r.get_next_ip()), system=system
        )
        self.assertEqual(r.get_next_ip(), None)
Пример #4
0
class V6RangeTests(TestCase):

    def setUp(self):
        self.d = Domain(name="com")
        self.s = Network(network_str="1234:1234:1234::/16", ip_type='6')
        self.s.update_network()
        self.s.save()

        self.s1 = Network(network_str="1234:1134:1234::/32", ip_type='6')
        self.s1.update_network()
        self.s1.save()

        self.s2 = Network(network_str="fff::/4", ip_type='6')
        self.s2.update_network()
        self.s2.save()

        self.s3 = Network(network_str="ffff::/4", ip_type='6')
        self.s3.update_network()
        self.s3.save()

    def do_add(self, start_str, end_str, default_domain, network, rtype,
               ip_type):
        r = Range(start_str=start_str, end_str=end_str, network=network)
        r.__repr__()
        r.save()
        return r

    def test1_create(self):
        start_str = "1234:1234:1234:1::"
        end_str = "1234:1234:1234:1234:1234:1234::"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

    def test2_create(self):
        start_str = "1234:1234:1234:1234::"
        end_str = "1234:1234:1235:1234:1234:1234::"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

    def test3_create(self):
        start_str = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fff0"
        end_str = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe"
        default_domain = self.d
        network = self.s3
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        r = self.do_add(**kwargs)
        self.assertEqual(r.start_upper, 0xffffffffffffffff)
        self.assertEqual(r.start_lower, 0xfffffffffffffff0)
        self.assertEqual(r.end_upper, 0xffffffffffffffff)
        self.assertEqual(r.end_lower, 0xfffffffffffffffe)

    def test2_bad_create(self):
        # start > end
        start_str = "1234:1235:1234:1235::"
        end_str = "1234:1235:1234:1234::"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test3_bad_create(self):
        # outside of network
        start_str = "2235:1235:1234:1233::"
        end_str = "2235:1235:1234:1234::"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test4_bad_create(self):
        # outside of network
        start_str = "1234:1234:1234:1::"
        end_str = "1234:1234:1234:1234:1234:1234::"
        default_domain = self.d
        network = self.s1
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test5_bad_create(self):
        # duplicate
        start_str = "1234:123e:1234:1234::"
        end_str = "1234:123e:1235:1234:1234:1234::"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        start_str = "1234:123e:1234:1234::"
        end_str = "1234:123e:1235:1234:1234:1234::"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test6_bad_create(self):
        # Partial overlap
        # start_str = "10.0.4.1"
        # end_str = "10.0.4.55"
        start_str = "fe:1::"
        end_str = "fe:1:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}

        self.do_add(**kwargs)

        # start_str = "10.0.4.1"
        # end_str = "10.0.4.30"
        start_str = "fe:1::"
        end_str = "fe:1:3::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}

        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test7_bad_create(self):
        # Partial overlap
        # start_str = "10.0.4.1"
        # end_str = "10.0.4.55"
        start_str = "fe1:1::"
        end_str = "fe1:1:3::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        # start_str = "10.0.4.1"
        # end_str = "10.0.4.56"
        start_str = "fe1:1::"
        end_str = "fe1:1:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str, 'default_domain':
            default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test8_bad_create(self):
        # Full overlap
        # start_str = "10.0.4.1"
        # end_str = "10.0.4.55"
        start_str = "fe2:1::"
        end_str = "fe2:1:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        # start_str = "10.0.4.2"
        # end_str = "10.0.4.55"
        start_str = "fe2:1:2::"
        end_str = "fe2:1:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test9_bad_create(self):
        # Full overlap
        # start_str = "10.0.4.1"
        # end_str = "10.0.4.55"
        start_str = "fe3:1:1::"
        end_str = "fe3:1:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        # start_str = "10.0.4.2"
        # end_str = "10.0.4.54"
        start_str = "fe3:1:2::"
        end_str = "fe3:1:3::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test10_bad_create(self):
        # Duplicate add
        # start_str = "10.0.4.1"
        # end_str = "10.0.4.55"
        start_str = "fe5:1:1::"
        end_str = "fe5:1:55::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        # start_str = "10.0.5.2"
        # end_str = "10.0.5.56"
        start_str = "fe5:1:56::"
        end_str = "fe5:1:57::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}

        self.do_add(**kwargs)
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test11_bad_create(self):
        # More overlap tests
        # start_str = "10.0.4.5"
        # end_str = "10.0.4.55"
        start_str = "fe6:4:5::"
        end_str = "fe6:4:55::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        # start_str = "10.0.4.60"
        # end_str = "10.0.4.63"
        start_str = "fe6:4:60::"
        end_str = "fe6:4:63::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        # start_str = "10.0.4.1"
        # end_str = "10.0.4.4"
        start_str = "fe6:4:1::"
        end_str = "fe6:4:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        # start_str = "10.0.4.2"
        # end_str = "10.0.4.54"
        start_str = "fe6:4:2::"
        end_str = "fe6:4:54::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test12_bad_create(self):
        # Update range to something outside of the subnet.
        # start_str = "10.0.4.5"
        # end_str = "10.0.4.55"
        start_str = "fe7:4:5::"
        end_str = "fe7:4:55::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        # start_str = "10.0.4.60"
        # end_str = "10.0.4.63"
        start_str = "fe7:4:60::"
        end_str = "fe7:4:63::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)

        # start_str = "10.0.4.1"
        # end_str = "10.0.4.4"
        start_str = "fe7:4:1::"
        end_str = "fe7:4:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        r = self.do_add(**kwargs)
        r.end_str = "ffff:ffff:ffff::"

        self.assertRaises(ValidationError, r.clean)

    def test13_bad_create(self):
        # start_str = "10.0.4.5"
        # end_str = "10.0.4.55"
        start_str = "fe8:4:5::"
        end_str = "fe8:4:55::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str, 'end_str': end_str,
            'default_domain': default_domain,
            'network': network, 'rtype': rtype, 'ip_type': ip_type}
        self.do_add(**kwargs)
        self.assertRaises(ValidationError, self.do_add, **kwargs)
class V4RangeTests(TestCase):
    def setUp(self):
        self.d = Domain(name="com")
        self.d.save()
        Domain(name="arpa").save()
        Domain(name="in-addr.arpa").save()
        Domain(name="10.in-addr.arpa").save()
        self.s = Network(network_str="10.0.0.0/16", ip_type="4")
        self.s.update_network()
        self.s.save()

        self.s1 = Network(network_str="10.2.1.0/24", ip_type="4")
        self.s1.update_network()
        self.s1.save()

    def do_add(self, start_str, end_str, default_domain, network, rtype, ip_type):
        r = Range(start_str=start_str, end_str=end_str, network=network)
        r.__repr__()
        r.save()
        return r

    def test1_create(self):
        start_str = "10.0.0.1"
        end_str = "10.0.0.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)

    def test2_create(self):
        start_str = "10.0.1.1"
        end_str = "10.0.1.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)

    def test2_bad_create(self):
        # start > end
        start_str = "10.0.0.2"
        end_str = "10.0.0.1"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test3_bad_create(self):
        # outside of network
        start_str = "11.0.0.2"
        end_str = "10.0.0.88"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test4_bad_create(self):
        # outside of network
        start_str = "10.2.0.0"
        end_str = "10.2.1.88"
        default_domain = self.d
        network = self.s1
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test5_bad_create(self):
        # duplicate
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test6_bad_create(self):
        # Partial overlap
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }

        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.30"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }

        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test7_bad_create(self):
        # Partial overlap
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.56"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test8_bad_create(self):
        # Full overlap
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.2"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test9_bad_create(self):
        # Full overlap
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.2"
        end_str = "10.0.4.54"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test10_bad_create(self):
        # Duplicate add
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)

        start_str = "10.0.5.2"
        end_str = "10.0.5.56"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }

        self.do_add(**kwargs)
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test11_bad_create(self):
        # More overlap tests
        start_str = "10.0.4.5"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.60"
        end_str = "10.0.4.63"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.4"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.2"
        end_str = "10.0.4.54"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test12_bad_create(self):
        # Update range to something outside of the subnet.
        start_str = "10.0.4.5"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.60"
        end_str = "10.0.4.63"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.4"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        r = self.do_add(**kwargs)
        r.end_str = "160.0.4.60"

        self.assertRaises(ValidationError, r.clean)

    def test13_bad_create(self):
        start_str = "10.0.4.5"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        self.do_add(**kwargs)
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test1_freeip(self):
        start_str = "10.0.33.1"
        end_str = "10.0.33.3"
        default_domain = self.d
        network = self.s
        rtype = "s"
        ip_type = "4"
        system = System()

        kwargs = {
            "start_str": start_str,
            "end_str": end_str,
            "default_domain": default_domain,
            "network": network,
            "rtype": rtype,
            "ip_type": ip_type,
        }
        r = self.do_add(**kwargs)
        self.assertEqual(str(r.get_next_ip()), "10.0.33.1")
        self.assertEqual(str(r.get_next_ip()), "10.0.33.1")
        s = StaticInterface(
            label="foo", domain=self.d, ip_type="4", ip_str=str(r.get_next_ip()), system=system, mac="00:00:00:00:00:00"
        )
        s.clean()
        s.save()
        self.assertEqual(str(r.get_next_ip()), "10.0.33.2")
        s = StaticInterface(
            label="foo", domain=self.d, ip_type="4", ip_str=str(r.get_next_ip()), system=system, mac="00:00:00:00:00:00"
        )
        s.clean()
        s.save()
        self.assertEqual(str(r.get_next_ip()), "10.0.33.3")
        s = StaticInterface(
            label="foo", domain=self.d, ip_type="4", ip_str=str(r.get_next_ip()), system=system, mac="00:00:00:00:00:00"
        )
        s.clean()
        s.save()
        self.assertEqual(r.get_next_ip(), None)
Пример #6
0
class V6RangeTests(TestCase):
    def setUp(self):
        self.d = Domain(name="com")
        self.s = Network(network_str="1234:1234:1234::/16", ip_type='6')
        self.s.update_network()
        self.s.save()

        self.s1 = Network(network_str="1234:1134:1234::/32", ip_type='6')
        self.s1.update_network()
        self.s1.save()

        self.s2 = Network(network_str="fff::/4", ip_type='6')
        self.s2.update_network()
        self.s2.save()

        self.s3 = Network(network_str="ffff::/4", ip_type='6')
        self.s3.update_network()
        self.s3.save()

    def do_add(self, start_str, end_str, default_domain, network, rtype,
               ip_type):
        r = Range(start_str=start_str, end_str=end_str, network=network)
        r.__repr__()
        r.save()
        return r

    def test1_create(self):
        start_str = "1234:1234:1234:1::"
        end_str = "1234:1234:1234:1234:1234:1234::"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

    def test2_create(self):
        start_str = "1234:1234:1234:1234::"
        end_str = "1234:1234:1235:1234:1234:1234::"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

    def test3_create(self):
        start_str = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fff0"
        end_str = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe"
        default_domain = self.d
        network = self.s3
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        r = self.do_add(**kwargs)
        self.assertEqual(r.start_upper, 0xffffffffffffffff)
        self.assertEqual(r.start_lower, 0xfffffffffffffff0)
        self.assertEqual(r.end_upper, 0xffffffffffffffff)
        self.assertEqual(r.end_lower, 0xfffffffffffffffe)

    def test2_bad_create(self):
        # start > end
        start_str = "1234:1235:1234:1235::"
        end_str = "1234:1235:1234:1234::"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test3_bad_create(self):
        # outside of network
        start_str = "2235:1235:1234:1233::"
        end_str = "2235:1235:1234:1234::"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test4_bad_create(self):
        # outside of network
        start_str = "1234:1234:1234:1::"
        end_str = "1234:1234:1234:1234:1234:1234::"
        default_domain = self.d
        network = self.s1
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test5_bad_create(self):
        # duplicate
        start_str = "1234:123e:1234:1234::"
        end_str = "1234:123e:1235:1234:1234:1234::"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        start_str = "1234:123e:1234:1234::"
        end_str = "1234:123e:1235:1234:1234:1234::"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test6_bad_create(self):
        # Partial overlap
        # start_str = "10.0.4.1"
        # end_str = "10.0.4.55"
        start_str = "fe:1::"
        end_str = "fe:1:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }

        self.do_add(**kwargs)

        # start_str = "10.0.4.1"
        # end_str = "10.0.4.30"
        start_str = "fe:1::"
        end_str = "fe:1:3::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }

        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test7_bad_create(self):
        # Partial overlap
        # start_str = "10.0.4.1"
        # end_str = "10.0.4.55"
        start_str = "fe1:1::"
        end_str = "fe1:1:3::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        # start_str = "10.0.4.1"
        # end_str = "10.0.4.56"
        start_str = "fe1:1::"
        end_str = "fe1:1:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test8_bad_create(self):
        # Full overlap
        # start_str = "10.0.4.1"
        # end_str = "10.0.4.55"
        start_str = "fe2:1::"
        end_str = "fe2:1:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        # start_str = "10.0.4.2"
        # end_str = "10.0.4.55"
        start_str = "fe2:1:2::"
        end_str = "fe2:1:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test9_bad_create(self):
        # Full overlap
        # start_str = "10.0.4.1"
        # end_str = "10.0.4.55"
        start_str = "fe3:1:1::"
        end_str = "fe3:1:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        # start_str = "10.0.4.2"
        # end_str = "10.0.4.54"
        start_str = "fe3:1:2::"
        end_str = "fe3:1:3::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test10_bad_create(self):
        # Duplicate add
        # start_str = "10.0.4.1"
        # end_str = "10.0.4.55"
        start_str = "fe5:1:1::"
        end_str = "fe5:1:55::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        # start_str = "10.0.5.2"
        # end_str = "10.0.5.56"
        start_str = "fe5:1:56::"
        end_str = "fe5:1:57::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }

        self.do_add(**kwargs)
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test11_bad_create(self):
        # More overlap tests
        # start_str = "10.0.4.5"
        # end_str = "10.0.4.55"
        start_str = "fe6:4:5::"
        end_str = "fe6:4:55::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        # start_str = "10.0.4.60"
        # end_str = "10.0.4.63"
        start_str = "fe6:4:60::"
        end_str = "fe6:4:63::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        # start_str = "10.0.4.1"
        # end_str = "10.0.4.4"
        start_str = "fe6:4:1::"
        end_str = "fe6:4:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        # start_str = "10.0.4.2"
        # end_str = "10.0.4.54"
        start_str = "fe6:4:2::"
        end_str = "fe6:4:54::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test12_bad_create(self):
        # Update range to something outside of the subnet.
        # start_str = "10.0.4.5"
        # end_str = "10.0.4.55"
        start_str = "fe7:4:5::"
        end_str = "fe7:4:55::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        # start_str = "10.0.4.60"
        # end_str = "10.0.4.63"
        start_str = "fe7:4:60::"
        end_str = "fe7:4:63::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        # start_str = "10.0.4.1"
        # end_str = "10.0.4.4"
        start_str = "fe7:4:1::"
        end_str = "fe7:4:4::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        r = self.do_add(**kwargs)
        r.end_str = "ffff:ffff:ffff::"

        self.assertRaises(ValidationError, r.clean)

    def test13_bad_create(self):
        # start_str = "10.0.4.5"
        # end_str = "10.0.4.55"
        start_str = "fe8:4:5::"
        end_str = "fe8:4:55::"
        default_domain = self.d
        network = self.s2
        rtype = 's'
        ip_type = '6'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)
        self.assertRaises(ValidationError, self.do_add, **kwargs)
class V4RangeTests(TestCase):
    def setUp(self):
        self.d, _ = Domain.objects.get_or_create(name="com")
        Domain.objects.get_or_create(name="arpa")
        Domain.objects.get_or_create(name="in-addr.arpa")
        Domain.objects.get_or_create(name="10.in-addr.arpa")
        self.s = Network(network_str="10.0.0.0/16", ip_type='4')
        self.s.update_network()
        self.s.save()

        self.s1 = Network(network_str="10.2.1.0/24", ip_type='4')
        self.s1.update_network()
        self.s1.save()

    def do_add(self, start_str, end_str, default_domain, network, rtype,
               ip_type):
        r = Range(start_str=start_str, end_str=end_str, network=network)
        r.__repr__()
        r.save()
        return r

    def test1_create(self):
        start_str = "10.0.0.1"
        end_str = "10.0.0.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

    def test2_create(self):
        start_str = "10.0.1.1"
        end_str = "10.0.1.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

    def test2_bad_create(self):
        # start > end
        start_str = "10.0.0.2"
        end_str = "10.0.0.1"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test3_bad_create(self):
        # outside of network
        start_str = "11.0.0.2"
        end_str = "10.0.0.88"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test4_bad_create(self):
        # outside of network
        start_str = "10.2.0.0"
        end_str = "10.2.1.88"
        default_domain = self.d
        network = self.s1
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test5_bad_create(self):
        # duplicate
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test6_bad_create(self):
        # Partial overlap
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }

        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.30"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }

        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test7_bad_create(self):
        # Partial overlap
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.56"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test8_bad_create(self):
        # Full overlap
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.2"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test9_bad_create(self):
        # Full overlap
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.2"
        end_str = "10.0.4.54"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test10_bad_create(self):
        # Duplicate add
        start_str = "10.0.4.1"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        start_str = "10.0.5.2"
        end_str = "10.0.5.56"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }

        self.do_add(**kwargs)
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test11_bad_create(self):
        # More overlap tests
        start_str = "10.0.4.5"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.60"
        end_str = "10.0.4.63"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.4"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.2"
        end_str = "10.0.4.54"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test12_bad_create(self):
        # Update range to something outside of the subnet.
        start_str = "10.0.4.5"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.60"
        end_str = "10.0.4.63"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)

        start_str = "10.0.4.1"
        end_str = "10.0.4.4"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        r = self.do_add(**kwargs)
        r.end_str = "160.0.4.60"

        self.assertRaises(ValidationError, r.clean)

    def test13_bad_create(self):
        start_str = "10.0.4.5"
        end_str = "10.0.4.55"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        self.do_add(**kwargs)
        self.assertRaises(ValidationError, self.do_add, **kwargs)

    def test1_freeip(self):
        start_str = "10.0.33.1"
        end_str = "10.0.33.3"
        default_domain = self.d
        network = self.s
        rtype = 's'
        ip_type = '4'
        system = create_fake_host(hostname="fooasdf.mozilla.com")

        kwargs = {
            'start_str': start_str,
            'end_str': end_str,
            'default_domain': default_domain,
            'network': network,
            'rtype': rtype,
            'ip_type': ip_type
        }
        r = self.do_add(**kwargs)
        self.assertEqual(str(r.get_next_ip()), "10.0.33.1")
        self.assertEqual(str(r.get_next_ip()), "10.0.33.1")
        StaticReg.objects.create(label="foobar",
                                 domain=self.d,
                                 ip_type='4',
                                 ip_str=str(r.get_next_ip()),
                                 system=system)
        self.assertEqual(str(r.get_next_ip()), "10.0.33.2")
        StaticReg.objects.create(label="foobar",
                                 domain=self.d,
                                 ip_type='4',
                                 ip_str=str(r.get_next_ip()),
                                 system=system)
        self.assertEqual(str(r.get_next_ip()), "10.0.33.3")
        StaticReg.objects.create(label="foobar",
                                 domain=self.d,
                                 ip_type='4',
                                 ip_str=str(r.get_next_ip()),
                                 system=system)
        self.assertEqual(r.get_next_ip(), None)