Convert IPAM view tests to use StandardTestCases

This commit is contained in:
Jeremy Stretch 2020-01-31 15:19:10 -05:00
parent 3668aa21fe
commit b361cb00f2

View File

@ -1,18 +1,17 @@
from netaddr import IPNetwork import datetime
import urllib.parse import urllib.parse
from django.urls import reverse from django.urls import reverse
from netaddr import IPNetwork
from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
from ipam.choices import ServiceProtocolChoices from ipam.choices import *
from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
from utilities.testing import TestCase from utilities.testing import StandardTestCases, TestCase
class VRFTestCase(TestCase): class VRFTestCase(StandardTestCases.Views):
user_permissions = ( model = VRF
'ipam.view_vrf',
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
@ -23,42 +22,29 @@ class VRFTestCase(TestCase):
VRF(name='VRF 3', rd='65000:3'), VRF(name='VRF 3', rd='65000:3'),
]) ])
def test_vrf_list(self): cls.form_data = {
'name': 'VRF X',
url = reverse('ipam:vrf_list') 'rd': '65000:999',
params = { 'tenant': None,
"q": "65000", 'enforce_unique': True,
'description': 'A new VRF',
'tags': 'Alpha,Bravo,Charlie',
} }
response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params))) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_vrf(self):
vrf = VRF.objects.first()
response = self.client.get(vrf.get_absolute_url())
self.assertHttpStatus(response, 200)
def test_vrf_import(self):
self.add_permissions('ipam.add_vrf')
csv_data = (
"name", "name",
"VRF 4", "VRF 4",
"VRF 5", "VRF 5",
"VRF 6", "VRF 6",
) )
response = self.client.post(reverse('ipam:vrf_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class RIRTestCase(StandardTestCases.Views):
self.assertEqual(VRF.objects.count(), 6) model = RIR
# Disable inapplicable tests
class RIRTestCase(TestCase): test_get_object = None
user_permissions = ( test_delete_object = None
'ipam.view_rir',
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
@ -69,39 +55,27 @@ class RIRTestCase(TestCase):
RIR(name='RIR 3', slug='rir-3'), RIR(name='RIR 3', slug='rir-3'),
]) ])
def test_rir_list(self): cls.form_data = {
'name': 'RIR X',
'slug': 'rir-x',
'is_private': True,
}
url = reverse('ipam:rir_list') cls.csv_data = (
response = self.client.get(url)
self.assertHttpStatus(response, 200)
def test_rir_import(self):
self.add_permissions('ipam.add_rir')
csv_data = (
"name,slug", "name,slug",
"RIR 4,rir-4", "RIR 4,rir-4",
"RIR 5,rir-5", "RIR 5,rir-5",
"RIR 6,rir-6", "RIR 6,rir-6",
) )
response = self.client.post(reverse('ipam:rir_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class AggregateTestCase(StandardTestCases.Views):
self.assertEqual(RIR.objects.count(), 6) model = Aggregate
class AggregateTestCase(TestCase):
user_permissions = (
'ipam.view_aggregate',
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
rir = RIR(name='RIR 1', slug='rir-1') rir = RIR.objects.create(name='RIR 1', slug='rir-1')
rir.save()
Aggregate.objects.bulk_create([ Aggregate.objects.bulk_create([
Aggregate(family=4, prefix=IPNetwork('10.1.0.0/16'), rir=rir), Aggregate(family=4, prefix=IPNetwork('10.1.0.0/16'), rir=rir),
@ -109,42 +83,29 @@ class AggregateTestCase(TestCase):
Aggregate(family=4, prefix=IPNetwork('10.3.0.0/16'), rir=rir), Aggregate(family=4, prefix=IPNetwork('10.3.0.0/16'), rir=rir),
]) ])
def test_aggregate_list(self): cls.form_data = {
'family': 4,
url = reverse('ipam:aggregate_list') 'prefix': IPNetwork('10.99.0.0/16'),
params = { 'rir': rir.pk,
"rir": RIR.objects.first().slug, 'date_added': datetime.date(2020, 1, 1),
'description': 'A new aggregate',
'tags': 'Alpha,Bravo,Charlie',
} }
response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params))) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_aggregate(self):
aggregate = Aggregate.objects.first()
response = self.client.get(aggregate.get_absolute_url())
self.assertHttpStatus(response, 200)
def test_aggregate_import(self):
self.add_permissions('ipam.add_aggregate')
csv_data = (
"prefix,rir", "prefix,rir",
"10.4.0.0/16,RIR 1", "10.4.0.0/16,RIR 1",
"10.5.0.0/16,RIR 1", "10.5.0.0/16,RIR 1",
"10.6.0.0/16,RIR 1", "10.6.0.0/16,RIR 1",
) )
response = self.client.post(reverse('ipam:aggregate_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class RoleTestCase(StandardTestCases.Views):
self.assertEqual(Aggregate.objects.count(), 6) model = Role
# Disable inapplicable tests
class RoleTestCase(TestCase): test_get_object = None
user_permissions = ( test_delete_object = None
'ipam.view_role',
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
@ -155,39 +116,31 @@ class RoleTestCase(TestCase):
Role(name='Role 3', slug='role-3'), Role(name='Role 3', slug='role-3'),
]) ])
def test_role_list(self): cls.form_data = {
'name': 'Role X',
'slug': 'role-x',
'weight': 200,
'description': 'A new role',
}
url = reverse('ipam:role_list') cls.csv_data = (
response = self.client.get(url)
self.assertHttpStatus(response, 200)
def test_role_import(self):
self.add_permissions('ipam.add_role')
csv_data = (
"name,slug,weight", "name,slug,weight",
"Role 4,role-4,1000", "Role 4,role-4,1000",
"Role 5,role-5,1000", "Role 5,role-5,1000",
"Role 6,role-6,1000", "Role 6,role-6,1000",
) )
response = self.client.post(reverse('ipam:role_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class PrefixTestCase(StandardTestCases.Views):
self.assertEqual(Role.objects.count(), 6) model = Prefix
class PrefixTestCase(TestCase):
user_permissions = (
'ipam.view_prefix',
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
site = Site(name='Site 1', slug='site-1') site = Site.objects.create(name='Site 1', slug='site-1')
site.save() vrf = VRF.objects.create(name='VRF 1', rd='65000:1')
role = Role.objects.create(name='Role 1', slug='role-1')
# vlan = VLAN.objects.create(vid=123, name='VLAN 123')
Prefix.objects.bulk_create([ Prefix.objects.bulk_create([
Prefix(family=4, prefix=IPNetwork('10.1.0.0/16'), site=site), Prefix(family=4, prefix=IPNetwork('10.1.0.0/16'), site=site),
@ -195,48 +148,34 @@ class PrefixTestCase(TestCase):
Prefix(family=4, prefix=IPNetwork('10.3.0.0/16'), site=site), Prefix(family=4, prefix=IPNetwork('10.3.0.0/16'), site=site),
]) ])
def test_prefix_list(self): cls.form_data = {
'prefix': IPNetwork('192.0.2.0/24'),
url = reverse('ipam:prefix_list') 'site': site.pk,
params = { 'vrf': vrf.pk,
"site": Site.objects.first().slug, 'tenant': None,
'vlan': None,
'status': PrefixStatusChoices.STATUS_RESERVED,
'role': role.pk,
'is_pool': True,
'description': 'A new prefix',
'tags': 'Alpha,Bravo,Charlie',
} }
response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params))) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_prefix(self):
prefix = Prefix.objects.first()
response = self.client.get(prefix.get_absolute_url())
self.assertHttpStatus(response, 200)
def test_prefix_import(self):
self.add_permissions('ipam.add_prefix')
csv_data = (
"prefix,status", "prefix,status",
"10.4.0.0/16,Active", "10.4.0.0/16,Active",
"10.5.0.0/16,Active", "10.5.0.0/16,Active",
"10.6.0.0/16,Active", "10.6.0.0/16,Active",
) )
response = self.client.post(reverse('ipam:prefix_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class IPAddressTestCase(StandardTestCases.Views):
self.assertEqual(Prefix.objects.count(), 6) model = IPAddress
class IPAddressTestCase(TestCase):
user_permissions = (
'ipam.view_ipaddress',
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
vrf = VRF(name='VRF 1', rd='65000:1') vrf = VRF.objects.create(name='VRF 1', rd='65000:1')
vrf.save()
IPAddress.objects.bulk_create([ IPAddress.objects.bulk_create([
IPAddress(family=4, address=IPNetwork('192.0.2.1/24'), vrf=vrf), IPAddress(family=4, address=IPNetwork('192.0.2.1/24'), vrf=vrf),
@ -244,48 +183,38 @@ class IPAddressTestCase(TestCase):
IPAddress(family=4, address=IPNetwork('192.0.2.3/24'), vrf=vrf), IPAddress(family=4, address=IPNetwork('192.0.2.3/24'), vrf=vrf),
]) ])
def test_ipaddress_list(self): cls.form_data = {
'vrf': vrf.pk,
url = reverse('ipam:ipaddress_list') 'address': IPNetwork('192.0.2.99/24'),
params = { 'tenant': None,
"vrf": VRF.objects.first().rd, 'status': IPAddressStatusChoices.STATUS_RESERVED,
'role': IPAddressRoleChoices.ROLE_ANYCAST,
'interface': None,
'nat_inside': None,
'dns_name': 'example',
'description': 'A new IP address',
'tags': 'Alpha,Bravo,Charlie',
} }
response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params))) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_ipaddress(self):
ipaddress = IPAddress.objects.first()
response = self.client.get(ipaddress.get_absolute_url())
self.assertHttpStatus(response, 200)
def test_ipaddress_import(self):
self.add_permissions('ipam.add_ipaddress')
csv_data = (
"address,status", "address,status",
"192.0.2.4/24,Active", "192.0.2.4/24,Active",
"192.0.2.5/24,Active", "192.0.2.5/24,Active",
"192.0.2.6/24,Active", "192.0.2.6/24,Active",
) )
response = self.client.post(reverse('ipam:ipaddress_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class VLANGroupTestCase(StandardTestCases.Views):
self.assertEqual(IPAddress.objects.count(), 6) model = VLANGroup
# Disable inapplicable tests
class VLANGroupTestCase(TestCase): test_get_object = None
user_permissions = ( test_delete_object = None
'ipam.view_vlangroup',
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
site = Site(name='Site 1', slug='site-1') site = Site.objects.create(name='Site 1', slug='site-1')
site.save()
VLANGroup.objects.bulk_create([ VLANGroup.objects.bulk_create([
VLANGroup(name='VLAN Group 1', slug='vlan-group-1', site=site), VLANGroup(name='VLAN Group 1', slug='vlan-group-1', site=site),
@ -293,42 +222,29 @@ class VLANGroupTestCase(TestCase):
VLANGroup(name='VLAN Group 3', slug='vlan-group-3', site=site), VLANGroup(name='VLAN Group 3', slug='vlan-group-3', site=site),
]) ])
def test_vlangroup_list(self): cls.form_data = {
'name': 'VLAN Group X',
url = reverse('ipam:vlangroup_list') 'slug': 'vlan-group-x',
params = { 'site': site.pk,
"site": Site.objects.first().slug,
} }
response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params))) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_vlangroup_import(self):
self.add_permissions('ipam.add_vlangroup')
csv_data = (
"name,slug", "name,slug",
"VLAN Group 4,vlan-group-4", "VLAN Group 4,vlan-group-4",
"VLAN Group 5,vlan-group-5", "VLAN Group 5,vlan-group-5",
"VLAN Group 6,vlan-group-6", "VLAN Group 6,vlan-group-6",
) )
response = self.client.post(reverse('ipam:vlangroup_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class VLANTestCase(StandardTestCases.Views):
self.assertEqual(VLANGroup.objects.count(), 6) model = VLAN
class VLANTestCase(TestCase):
user_permissions = (
'ipam.view_vlan',
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
vlangroup = VLANGroup(name='VLAN Group 1', slug='vlan-group-1') site = Site.objects.create(name='Site 1', slug='site-1')
vlangroup.save() vlangroup = VLANGroup.objects.create(name='VLAN Group 1', slug='vlan-group-1', site=site)
role = Role.objects.create(name='Role 1', slug='role-1')
VLAN.objects.bulk_create([ VLAN.objects.bulk_create([
VLAN(group=vlangroup, vid=101, name='VLAN101'), VLAN(group=vlangroup, vid=101, name='VLAN101'),
@ -336,60 +252,43 @@ class VLANTestCase(TestCase):
VLAN(group=vlangroup, vid=103, name='VLAN103'), VLAN(group=vlangroup, vid=103, name='VLAN103'),
]) ])
def test_vlan_list(self): cls.form_data = {
'site': site.pk,
url = reverse('ipam:vlan_list') 'group': vlangroup.pk,
params = { 'vid': 999,
"group": VLANGroup.objects.first().slug, 'name': 'VLAN999',
'tenant': None,
'status': VLANStatusChoices.STATUS_RESERVED,
'role': role.pk,
'description': 'A new VLAN',
'tags': 'Alpha,Bravo,Charlie',
} }
response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params))) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_vlan(self):
vlan = VLAN.objects.first()
response = self.client.get(vlan.get_absolute_url())
self.assertHttpStatus(response, 200)
def test_vlan_import(self):
self.add_permissions('ipam.add_vlan')
csv_data = (
"vid,name,status", "vid,name,status",
"104,VLAN104,Active", "104,VLAN104,Active",
"105,VLAN105,Active", "105,VLAN105,Active",
"106,VLAN106,Active", "106,VLAN106,Active",
) )
response = self.client.post(reverse('ipam:vlan_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class ServiceTestCase(StandardTestCases.Views):
self.assertEqual(VLAN.objects.count(), 6) model = Service
# Disable inapplicable tests
test_import_objects = None
class ServiceTestCase(TestCase): # TODO: Resolve URL for Service creation
user_permissions = ( test_create_object = None
'ipam.view_service',
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
site = Site(name='Site 1', slug='site-1') site = Site.objects.create(name='Site 1', slug='site-1')
site.save() manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1')
manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1') devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
manufacturer.save() device = Device.objects.create(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
devicetype = DeviceType(manufacturer=manufacturer, model='Device Type 1')
devicetype.save()
devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
devicerole.save()
device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
device.save()
Service.objects.bulk_create([ Service.objects.bulk_create([
Service(device=device, name='Service 1', protocol=ServiceProtocolChoices.PROTOCOL_TCP, port=101), Service(device=device, name='Service 1', protocol=ServiceProtocolChoices.PROTOCOL_TCP, port=101),
@ -397,18 +296,13 @@ class ServiceTestCase(TestCase):
Service(device=device, name='Service 3', protocol=ServiceProtocolChoices.PROTOCOL_TCP, port=103), Service(device=device, name='Service 3', protocol=ServiceProtocolChoices.PROTOCOL_TCP, port=103),
]) ])
def test_service_list(self): cls.form_data = {
'device': device.pk,
url = reverse('ipam:service_list') 'virtual_machine': None,
params = { 'name': 'Service X',
"device_id": Device.objects.first(), 'protocol': ServiceProtocolChoices.PROTOCOL_TCP,
'port': 999,
'ipaddresses': [],
'description': 'A new service',
'tags': 'Alpha,Bravo,Charlie',
} }
response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params)))
self.assertHttpStatus(response, 200)
def test_service(self):
service = Service.objects.first()
response = self.client.get(service.get_absolute_url())
self.assertHttpStatus(response, 200)