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
from django.urls import reverse
from netaddr import IPNetwork
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 utilities.testing import TestCase
from utilities.testing import StandardTestCases, TestCase
class VRFTestCase(TestCase):
user_permissions = (
'ipam.view_vrf',
)
class VRFTestCase(StandardTestCases.Views):
model = VRF
@classmethod
def setUpTestData(cls):
@ -23,42 +22,29 @@ class VRFTestCase(TestCase):
VRF(name='VRF 3', rd='65000:3'),
])
def test_vrf_list(self):
url = reverse('ipam:vrf_list')
params = {
"q": "65000",
cls.form_data = {
'name': 'VRF X',
'rd': '65000:999',
'tenant': None,
'enforce_unique': True,
'description': 'A new VRF',
'tags': 'Alpha,Bravo,Charlie',
}
response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params)))
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 = (
cls.csv_data = (
"name",
"VRF 4",
"VRF 5",
"VRF 6",
)
response = self.client.post(reverse('ipam:vrf_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200)
self.assertEqual(VRF.objects.count(), 6)
class RIRTestCase(StandardTestCases.Views):
model = RIR
class RIRTestCase(TestCase):
user_permissions = (
'ipam.view_rir',
)
# Disable inapplicable tests
test_get_object = None
test_delete_object = None
@classmethod
def setUpTestData(cls):
@ -69,39 +55,27 @@ class RIRTestCase(TestCase):
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')
response = self.client.get(url)
self.assertHttpStatus(response, 200)
def test_rir_import(self):
self.add_permissions('ipam.add_rir')
csv_data = (
cls.csv_data = (
"name,slug",
"RIR 4,rir-4",
"RIR 5,rir-5",
"RIR 6,rir-6",
)
response = self.client.post(reverse('ipam:rir_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200)
self.assertEqual(RIR.objects.count(), 6)
class AggregateTestCase(TestCase):
user_permissions = (
'ipam.view_aggregate',
)
class AggregateTestCase(StandardTestCases.Views):
model = Aggregate
@classmethod
def setUpTestData(cls):
rir = RIR(name='RIR 1', slug='rir-1')
rir.save()
rir = RIR.objects.create(name='RIR 1', slug='rir-1')
Aggregate.objects.bulk_create([
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),
])
def test_aggregate_list(self):
url = reverse('ipam:aggregate_list')
params = {
"rir": RIR.objects.first().slug,
cls.form_data = {
'family': 4,
'prefix': IPNetwork('10.99.0.0/16'),
'rir': rir.pk,
'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)))
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 = (
cls.csv_data = (
"prefix,rir",
"10.4.0.0/16,RIR 1",
"10.5.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)
self.assertEqual(Aggregate.objects.count(), 6)
class RoleTestCase(StandardTestCases.Views):
model = Role
class RoleTestCase(TestCase):
user_permissions = (
'ipam.view_role',
)
# Disable inapplicable tests
test_get_object = None
test_delete_object = None
@classmethod
def setUpTestData(cls):
@ -155,39 +116,31 @@ class RoleTestCase(TestCase):
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')
response = self.client.get(url)
self.assertHttpStatus(response, 200)
def test_role_import(self):
self.add_permissions('ipam.add_role')
csv_data = (
cls.csv_data = (
"name,slug,weight",
"Role 4,role-4,1000",
"Role 5,role-5,1000",
"Role 6,role-6,1000",
)
response = self.client.post(reverse('ipam:role_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200)
self.assertEqual(Role.objects.count(), 6)
class PrefixTestCase(TestCase):
user_permissions = (
'ipam.view_prefix',
)
class PrefixTestCase(StandardTestCases.Views):
model = Prefix
@classmethod
def setUpTestData(cls):
site = Site(name='Site 1', slug='site-1')
site.save()
site = Site.objects.create(name='Site 1', slug='site-1')
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(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),
])
def test_prefix_list(self):
url = reverse('ipam:prefix_list')
params = {
"site": Site.objects.first().slug,
cls.form_data = {
'prefix': IPNetwork('192.0.2.0/24'),
'site': site.pk,
'vrf': vrf.pk,
'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)))
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 = (
cls.csv_data = (
"prefix,status",
"10.4.0.0/16,Active",
"10.5.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)
self.assertEqual(Prefix.objects.count(), 6)
class IPAddressTestCase(TestCase):
user_permissions = (
'ipam.view_ipaddress',
)
class IPAddressTestCase(StandardTestCases.Views):
model = IPAddress
@classmethod
def setUpTestData(cls):
vrf = VRF(name='VRF 1', rd='65000:1')
vrf.save()
vrf = VRF.objects.create(name='VRF 1', rd='65000:1')
IPAddress.objects.bulk_create([
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),
])
def test_ipaddress_list(self):
url = reverse('ipam:ipaddress_list')
params = {
"vrf": VRF.objects.first().rd,
cls.form_data = {
'vrf': vrf.pk,
'address': IPNetwork('192.0.2.99/24'),
'tenant': None,
'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)))
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 = (
cls.csv_data = (
"address,status",
"192.0.2.4/24,Active",
"192.0.2.5/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)
self.assertEqual(IPAddress.objects.count(), 6)
class VLANGroupTestCase(StandardTestCases.Views):
model = VLANGroup
class VLANGroupTestCase(TestCase):
user_permissions = (
'ipam.view_vlangroup',
)
# Disable inapplicable tests
test_get_object = None
test_delete_object = None
@classmethod
def setUpTestData(cls):
site = Site(name='Site 1', slug='site-1')
site.save()
site = Site.objects.create(name='Site 1', slug='site-1')
VLANGroup.objects.bulk_create([
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),
])
def test_vlangroup_list(self):
url = reverse('ipam:vlangroup_list')
params = {
"site": Site.objects.first().slug,
cls.form_data = {
'name': 'VLAN Group X',
'slug': 'vlan-group-x',
'site': site.pk,
}
response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params)))
self.assertHttpStatus(response, 200)
def test_vlangroup_import(self):
self.add_permissions('ipam.add_vlangroup')
csv_data = (
cls.csv_data = (
"name,slug",
"VLAN Group 4,vlan-group-4",
"VLAN Group 5,vlan-group-5",
"VLAN Group 6,vlan-group-6",
)
response = self.client.post(reverse('ipam:vlangroup_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200)
self.assertEqual(VLANGroup.objects.count(), 6)
class VLANTestCase(TestCase):
user_permissions = (
'ipam.view_vlan',
)
class VLANTestCase(StandardTestCases.Views):
model = VLAN
@classmethod
def setUpTestData(cls):
vlangroup = VLANGroup(name='VLAN Group 1', slug='vlan-group-1')
vlangroup.save()
site = Site.objects.create(name='Site 1', slug='site-1')
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(group=vlangroup, vid=101, name='VLAN101'),
@ -336,60 +252,43 @@ class VLANTestCase(TestCase):
VLAN(group=vlangroup, vid=103, name='VLAN103'),
])
def test_vlan_list(self):
url = reverse('ipam:vlan_list')
params = {
"group": VLANGroup.objects.first().slug,
cls.form_data = {
'site': site.pk,
'group': vlangroup.pk,
'vid': 999,
'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)))
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 = (
cls.csv_data = (
"vid,name,status",
"104,VLAN104,Active",
"105,VLAN105,Active",
"106,VLAN106,Active",
)
response = self.client.post(reverse('ipam:vlan_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200)
self.assertEqual(VLAN.objects.count(), 6)
class ServiceTestCase(StandardTestCases.Views):
model = Service
# Disable inapplicable tests
test_import_objects = None
class ServiceTestCase(TestCase):
user_permissions = (
'ipam.view_service',
)
# TODO: Resolve URL for Service creation
test_create_object = None
@classmethod
def setUpTestData(cls):
site = Site(name='Site 1', slug='site-1')
site.save()
manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
manufacturer.save()
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()
site = Site.objects.create(name='Site 1', slug='site-1')
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1')
devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
device = Device.objects.create(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
Service.objects.bulk_create([
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),
])
def test_service_list(self):
url = reverse('ipam:service_list')
params = {
"device_id": Device.objects.first(),
cls.form_data = {
'device': device.pk,
'virtual_machine': None,
'name': 'Service X',
'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)