Convert circuits app tests to use model_bakery for fixture creation (#22087)

Replace manual object creation in all circuits test files with
model_bakery's baker.make() calls. This reduces test setup boilerplate
by ~500 lines while maintaining identical test coverage (708 tests).

Add MPTT_ALLOW_TESTING_GENERATORS setting to allow model_bakery to
create objects with MPTT foreign key chains in the test environment.
This commit is contained in:
Jason Novinger 2026-05-18 16:34:07 -05:00
parent fdb5eb142b
commit 7117026492
7 changed files with 413 additions and 899 deletions

View File

@ -1,10 +1,10 @@
from django.urls import reverse
from model_bakery import baker
from circuits.choices import *
from circuits.models import *
from dcim.choices import InterfaceTypeChoices
from dcim.models import Device, DeviceRole, DeviceType, Interface, Manufacturer, Site
from ipam.models import ASN, RIR
from dcim.models import Interface
from utilities.testing import APITestCase, APIViewTestCases
@ -27,18 +27,10 @@ class ProviderTestCase(APIViewTestCases.APIViewTestCase):
@classmethod
def setUpTestData(cls):
rir = RIR.objects.create(name='RFC 6996', is_private=True)
asns = [
ASN(asn=65000 + i, rir=rir) for i in range(8)
]
ASN.objects.bulk_create(asns)
rir = baker.make('ipam.RIR', is_private=True)
asns = [baker.make('ipam.ASN', asn=65000 + i, rir=rir) for i in range(8)]
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
Provider(name='Provider 3', slug='provider-3'),
)
Provider.objects.bulk_create(providers)
baker.make('circuits.Provider', _quantity=3)
cls.create_data = [
{
@ -82,13 +74,7 @@ class CircuitTypeTestCase(APIViewTestCases.APIViewTestCase):
@classmethod
def setUpTestData(cls):
circuit_types = (
CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
CircuitType(name='Circuit Type 2', slug='circuit-type-2'),
CircuitType(name='Circuit Type 3', slug='circuit-type-3'),
)
CircuitType.objects.bulk_create(circuit_types)
baker.make('circuits.CircuitType', _quantity=3)
class CircuitTestCase(APIViewTestCases.APIViewTestCase):
@ -102,36 +88,22 @@ class CircuitTestCase(APIViewTestCases.APIViewTestCase):
@classmethod
def setUpTestData(cls):
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
)
Provider.objects.bulk_create(providers)
providers = baker.make('circuits.Provider', _quantity=2)
provider_accounts = (
ProviderAccount(name='Provider Account 1', provider=providers[0], account='1234'),
ProviderAccount(name='Provider Account 2', provider=providers[1], account='2345'),
)
ProviderAccount.objects.bulk_create(provider_accounts)
provider_accounts = [
baker.make('circuits.ProviderAccount', provider=providers[0]),
baker.make('circuits.ProviderAccount', provider=providers[1]),
]
circuit_types = (
CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
CircuitType(name='Circuit Type 2', slug='circuit-type-2'),
)
CircuitType.objects.bulk_create(circuit_types)
circuit_types = baker.make('circuits.CircuitType', _quantity=2)
circuits = (
Circuit(
cid='Circuit 1', provider=providers[0], provider_account=provider_accounts[0], type=circuit_types[0]
),
Circuit(
cid='Circuit 2', provider=providers[0], provider_account=provider_accounts[0], type=circuit_types[0]
),
Circuit(
cid='Circuit 3', provider=providers[0], provider_account=provider_accounts[0], type=circuit_types[0]
),
baker.make(
'circuits.Circuit',
provider=providers[0],
provider_account=provider_accounts[0],
type=circuit_types[0],
_quantity=3,
)
Circuit.objects.bulk_create(circuits)
cls.create_data = [
{
@ -165,27 +137,14 @@ class CircuitTerminationTestCase(APIViewTestCases.APIViewTestCase):
SIDE_A = CircuitTerminationSideChoices.SIDE_A
SIDE_Z = CircuitTerminationSideChoices.SIDE_Z
provider = Provider.objects.create(name='Provider 1', slug='provider-1')
circuit_type = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
provider = baker.make('circuits.Provider')
circuit_type = baker.make('circuits.CircuitType')
sites = (
Site(name='Site 1', slug='site-1'),
Site(name='Site 2', slug='site-2'),
)
Site.objects.bulk_create(sites)
sites = baker.make('dcim.Site', _quantity=2)
provider_networks = (
ProviderNetwork(provider=provider, name='Provider Network 1'),
ProviderNetwork(provider=provider, name='Provider Network 2'),
)
ProviderNetwork.objects.bulk_create(provider_networks)
provider_networks = baker.make('circuits.ProviderNetwork', provider=provider, _quantity=2)
circuits = (
Circuit(cid='Circuit 1', provider=provider, type=circuit_type),
Circuit(cid='Circuit 2', provider=provider, type=circuit_type),
Circuit(cid='Circuit 3', provider=provider, type=circuit_type),
)
Circuit.objects.bulk_create(circuits)
circuits = baker.make('circuits.Circuit', provider=provider, type=circuit_type, _quantity=3)
circuit_terminations = (
CircuitTermination(circuit=circuits[0], term_side=SIDE_A, termination=sites[0]),
@ -226,12 +185,7 @@ class CircuitGroupTestCase(APIViewTestCases.APIViewTestCase):
@classmethod
def setUpTestData(cls):
circuit_groups = (
CircuitGroup(name="Circuit Group 1", slug='circuit-group-1'),
CircuitGroup(name="Circuit Group 2", slug='circuit-group-2'),
CircuitGroup(name="Circuit Group 3", slug='circuit-group-3'),
)
CircuitGroup.objects.bulk_create(circuit_groups)
baker.make('circuits.CircuitGroup', _quantity=3)
cls.create_data = [
{
@ -256,18 +210,9 @@ class ProviderAccountTestCase(APIViewTestCases.APIViewTestCase):
@classmethod
def setUpTestData(cls):
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
)
Provider.objects.bulk_create(providers)
providers = baker.make('circuits.Provider', _quantity=2)
provider_accounts = (
ProviderAccount(name='Provider Account 1', provider=providers[0], account='1234'),
ProviderAccount(name='Provider Account 2', provider=providers[0], account='2345'),
ProviderAccount(name='Provider Account 3', provider=providers[0], account='3456'),
)
ProviderAccount.objects.bulk_create(provider_accounts)
baker.make('circuits.ProviderAccount', provider=providers[0], _quantity=3)
cls.create_data = [
{
@ -304,28 +249,12 @@ class CircuitGroupAssignmentTestCase(APIViewTestCases.APIViewTestCase):
@classmethod
def setUpTestData(cls):
circuit_groups = (
CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'),
CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'),
CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'),
CircuitGroup(name='Circuit Group 4', slug='circuit-group-4'),
CircuitGroup(name='Circuit Group 5', slug='circuit-group-5'),
CircuitGroup(name='Circuit Group 6', slug='circuit-group-6'),
)
CircuitGroup.objects.bulk_create(circuit_groups)
circuit_groups = baker.make('circuits.CircuitGroup', _quantity=6)
provider = Provider.objects.create(name='Provider 1', slug='provider-1')
circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
provider = baker.make('circuits.Provider')
circuittype = baker.make('circuits.CircuitType')
circuits = (
Circuit(cid='Circuit 1', provider=provider, type=circuittype),
Circuit(cid='Circuit 2', provider=provider, type=circuittype),
Circuit(cid='Circuit 3', provider=provider, type=circuittype),
Circuit(cid='Circuit 4', provider=provider, type=circuittype),
Circuit(cid='Circuit 5', provider=provider, type=circuittype),
Circuit(cid='Circuit 6', provider=provider, type=circuittype),
)
Circuit.objects.bulk_create(circuits)
circuits = baker.make('circuits.Circuit', provider=provider, type=circuittype, _quantity=6)
assignments = (
CircuitGroupAssignment(
@ -375,18 +304,9 @@ class ProviderNetworkTestCase(APIViewTestCases.APIViewTestCase):
@classmethod
def setUpTestData(cls):
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
)
Provider.objects.bulk_create(providers)
providers = baker.make('circuits.Provider', _quantity=2)
provider_networks = (
ProviderNetwork(name='Provider Network 1', provider=providers[0]),
ProviderNetwork(name='Provider Network 2', provider=providers[0]),
ProviderNetwork(name='Provider Network 3', provider=providers[0]),
)
ProviderNetwork.objects.bulk_create(provider_networks)
baker.make('circuits.ProviderNetwork', provider=providers[0], _quantity=3)
cls.create_data = [
{
@ -432,13 +352,7 @@ class VirtualCircuitTypeTestCase(APIViewTestCases.APIViewTestCase):
@classmethod
def setUpTestData(cls):
virtual_circuit_types = (
VirtualCircuitType(name='Virtual Circuit Type 1', slug='virtual-circuit-type-1'),
VirtualCircuitType(name='Virtual Circuit Type 2', slug='virtual-circuit-type-2'),
VirtualCircuitType(name='Virtual Circuit Type 3', slug='virtual-circuit-type-3'),
)
VirtualCircuitType.objects.bulk_create(virtual_circuit_types)
baker.make('circuits.VirtualCircuitType', _quantity=3)
class VirtualCircuitTestCase(APIViewTestCases.APIViewTestCase):
@ -450,35 +364,18 @@ class VirtualCircuitTestCase(APIViewTestCases.APIViewTestCase):
@classmethod
def setUpTestData(cls):
provider = Provider.objects.create(name='Provider 1', slug='provider-1')
provider_network = ProviderNetwork.objects.create(provider=provider, name='Provider Network 1')
provider_account = ProviderAccount.objects.create(provider=provider, account='Provider Account 1')
virtual_circuit_type = VirtualCircuitType.objects.create(
name='Virtual Circuit Type 1',
slug='virtual-circuit-type-1'
)
provider = baker.make('circuits.Provider')
provider_network = baker.make('circuits.ProviderNetwork', provider=provider)
provider_account = baker.make('circuits.ProviderAccount', provider=provider)
virtual_circuit_type = baker.make('circuits.VirtualCircuitType')
virtual_circuits = (
VirtualCircuit(
provider_network=provider_network,
provider_account=provider_account,
type=virtual_circuit_type,
cid='Virtual Circuit 1'
),
VirtualCircuit(
provider_network=provider_network,
provider_account=provider_account,
type=virtual_circuit_type,
cid='Virtual Circuit 2'
),
VirtualCircuit(
provider_network=provider_network,
provider_account=provider_account,
type=virtual_circuit_type,
cid='Virtual Circuit 3'
),
baker.make(
'circuits.VirtualCircuit',
provider_network=provider_network,
provider_account=provider_account,
type=virtual_circuit_type,
_quantity=3,
)
VirtualCircuit.objects.bulk_create(virtual_circuits)
cls.create_data = [
{
@ -514,129 +411,58 @@ class VirtualCircuitTerminationTestCase(APIViewTestCases.APIViewTestCase):
@classmethod
def setUpTestData(cls):
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1')
device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
site = Site.objects.create(name='Site 1', slug='site-1')
site = baker.make('dcim.Site')
device_type = baker.make('dcim.DeviceType')
device_role = baker.make('dcim.DeviceRole')
devices = (
Device(site=site, name='hub', device_type=device_type, role=device_role),
Device(site=site, name='spoke1', device_type=device_type, role=device_role),
Device(site=site, name='spoke2', device_type=device_type, role=device_role),
Device(site=site, name='spoke3', device_type=device_type, role=device_role),
devices = [
baker.make('dcim.Device', site=site, device_type=device_type, role=device_role, name=name)
for name in ('hub', 'spoke1', 'spoke2', 'spoke3')
]
physical_interfaces = []
for device in devices:
physical_interfaces.append(
Interface.objects.create(device=device, name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED)
)
virtual_interfaces = []
# Point-to-point VCs
for i, (device, parent) in enumerate(zip(devices, physical_interfaces)):
count = 3 if i == 0 else 1
for j in range(count):
virtual_interfaces.append(
Interface.objects.create(
device=device,
name=f'eth0.{j + 1}',
parent=parent,
type=InterfaceTypeChoices.TYPE_VIRTUAL,
)
)
# Hub and spoke VCs
for device in devices:
virtual_interfaces.append(
Interface.objects.create(
device=device,
name='eth0.9',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL,
)
)
provider = baker.make('circuits.Provider')
provider_network = baker.make('circuits.ProviderNetwork', provider=provider)
provider_account = baker.make('circuits.ProviderAccount', provider=provider)
virtual_circuit_type = baker.make('circuits.VirtualCircuitType')
virtual_circuits = baker.make(
'circuits.VirtualCircuit',
provider_network=provider_network,
provider_account=provider_account,
type=virtual_circuit_type,
_quantity=4,
)
Device.objects.bulk_create(devices)
physical_interfaces = (
Interface(device=devices[0], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
Interface(device=devices[1], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
Interface(device=devices[2], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
Interface(device=devices[3], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
)
Interface.objects.bulk_create(physical_interfaces)
virtual_interfaces = (
# Point-to-point VCs
Interface(
device=devices[0],
name='eth0.1',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[0],
name='eth0.2',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[0],
name='eth0.3',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[1],
name='eth0.1',
parent=physical_interfaces[1],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[2],
name='eth0.1',
parent=physical_interfaces[2],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[3],
name='eth0.1',
parent=physical_interfaces[3],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
# Hub and spoke VCs
Interface(
device=devices[0],
name='eth0.9',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[1],
name='eth0.9',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[2],
name='eth0.9',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[3],
name='eth0.9',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
)
Interface.objects.bulk_create(virtual_interfaces)
provider = Provider.objects.create(name='Provider 1', slug='provider-1')
provider_network = ProviderNetwork.objects.create(provider=provider, name='Provider Network 1')
provider_account = ProviderAccount.objects.create(provider=provider, account='Provider Account 1')
virtual_circuit_type = VirtualCircuitType.objects.create(
name='Virtual Circuit Type 1',
slug='virtual-circuit-type-1'
)
virtual_circuits = (
VirtualCircuit(
provider_network=provider_network,
provider_account=provider_account,
cid='Virtual Circuit 1',
type=virtual_circuit_type
),
VirtualCircuit(
provider_network=provider_network,
provider_account=provider_account,
cid='Virtual Circuit 2',
type=virtual_circuit_type
),
VirtualCircuit(
provider_network=provider_network,
provider_account=provider_account,
cid='Virtual Circuit 3',
type=virtual_circuit_type
),
VirtualCircuit(
provider_network=provider_network,
provider_account=provider_account,
cid='Virtual Circuit 4',
type=virtual_circuit_type
),
)
VirtualCircuit.objects.bulk_create(virtual_circuits)
virtual_circuit_terminations = (
VirtualCircuitTermination(

View File

@ -1,4 +1,5 @@
from django.test import TestCase
from model_bakery import baker
from circuits.choices import *
from circuits.filtersets import *
@ -6,17 +7,13 @@ from circuits.models import *
from dcim.choices import InterfaceTypeChoices, LocationStatusChoices
from dcim.models import (
Cable,
Device,
DeviceRole,
DeviceType,
Interface,
Location,
Manufacturer,
Region,
Site,
SiteGroup,
)
from ipam.models import ASN, RIR
from ipam.models import ASN
from netbox.choices import DistanceUnitChoices
from tenancy.models import Tenant, TenantGroup
from utilities.testing import ChangeLoggedFilterSetTests
@ -29,26 +26,24 @@ class ProviderTestCase(TestCase, ChangeLoggedFilterSetTests):
@classmethod
def setUpTestData(cls):
rir = RIR.objects.create(name='RFC 6996', is_private=True)
asns = (
ASN(asn=64512, rir=rir),
ASN(asn=64513, rir=rir),
ASN(asn=64514, rir=rir),
)
ASN.objects.bulk_create(asns)
rir = baker.make('ipam.RIR', is_private=True)
asns = [
baker.make('ipam.ASN', asn=64512 + i, rir=rir)
for i in range(3)
]
providers = (
Provider(name='Provider 1', slug='provider-1', description='foobar1'),
Provider(name='Provider 2', slug='provider-2', description='foobar2'),
Provider(name='Provider 3', slug='provider-3'),
Provider(name='Provider 4', slug='provider-4'),
Provider(name='Provider 5', slug='provider-5'),
baker.make('circuits.Provider', name='Provider 1', slug='provider-1', description='foobar1'),
baker.make('circuits.Provider', name='Provider 2', slug='provider-2', description='foobar2'),
baker.make('circuits.Provider', name='Provider 3', slug='provider-3'),
baker.make('circuits.Provider', name='Provider 4', slug='provider-4'),
baker.make('circuits.Provider', name='Provider 5', slug='provider-5'),
)
Provider.objects.bulk_create(providers)
providers[0].asns.set([asns[0]])
providers[1].asns.set([asns[1]])
providers[2].asns.set([asns[2]])
# MPTT models: use .save() directly
regions = (
Region(name='Test Region 1', slug='test-region-1'),
Region(name='Test Region 2', slug='test-region-2'),
@ -65,22 +60,16 @@ class ProviderTestCase(TestCase, ChangeLoggedFilterSetTests):
site_group.save()
sites = (
Site(name='Test Site 1', slug='test-site-1', region=regions[0], group=site_groups[0]),
Site(name='Test Site 2', slug='test-site-2', region=regions[1], group=site_groups[1]),
baker.make('dcim.Site', name='Test Site 1', slug='test-site-1', region=regions[0], group=site_groups[0]),
baker.make('dcim.Site', name='Test Site 2', slug='test-site-2', region=regions[1], group=site_groups[1]),
)
Site.objects.bulk_create(sites)
circuit_types = (
CircuitType(name='Test Circuit Type 1', slug='test-circuit-type-1'),
CircuitType(name='Test Circuit Type 2', slug='test-circuit-type-2'),
)
CircuitType.objects.bulk_create(circuit_types)
circuit_types = baker.make('circuits.CircuitType', _quantity=2)
circuits = (
Circuit(provider=providers[0], type=circuit_types[0], cid='Circuit 1'),
Circuit(provider=providers[1], type=circuit_types[1], cid='Circuit 2'),
baker.make('circuits.Circuit', provider=providers[0], type=circuit_types[0], cid='Circuit 1'),
baker.make('circuits.Circuit', provider=providers[1], type=circuit_types[1], cid='Circuit 2'),
)
Circuit.objects.bulk_create(circuits)
circuit_terminations = (
CircuitTermination(circuit=circuits[0], termination=sites[0], term_side='A'),
@ -141,11 +130,9 @@ class CircuitTypeTestCase(TestCase, ChangeLoggedFilterSetTests):
@classmethod
def setUpTestData(cls):
CircuitType.objects.bulk_create((
CircuitType(name='Circuit Type 1', slug='circuit-type-1', description='foobar1'),
CircuitType(name='Circuit Type 2', slug='circuit-type-2', description='foobar2'),
CircuitType(name='Circuit Type 3', slug='circuit-type-3'),
))
baker.make('circuits.CircuitType', name='Circuit Type 1', slug='circuit-type-1', description='foobar1')
baker.make('circuits.CircuitType', name='Circuit Type 2', slug='circuit-type-2', description='foobar2')
baker.make('circuits.CircuitType', name='Circuit Type 3', slug='circuit-type-3')
def test_q(self):
params = {'q': 'foobar1'}
@ -171,6 +158,7 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
@classmethod
def setUpTestData(cls):
# MPTT models: use .save() directly
regions = (
Region(name='Test Region 1', slug='test-region-1'),
Region(name='Test Region 2', slug='test-region-2'),
@ -188,12 +176,12 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
site_group.save()
sites = (
Site(name='Test Site 1', slug='test-site-1', region=regions[0], group=site_groups[0]),
Site(name='Test Site 2', slug='test-site-2', region=regions[1], group=site_groups[1]),
Site(name='Test Site 3', slug='test-site-3', region=regions[2], group=site_groups[2]),
baker.make('dcim.Site', name='Test Site 1', slug='test-site-1', region=regions[0], group=site_groups[0]),
baker.make('dcim.Site', name='Test Site 2', slug='test-site-2', region=regions[1], group=site_groups[1]),
baker.make('dcim.Site', name='Test Site 3', slug='test-site-3', region=regions[2], group=site_groups[2]),
)
Site.objects.bulk_create(sites)
# MPTT models: use .save() directly
tenant_groups = (
TenantGroup(name='Tenant group 1', slug='tenant-group-1'),
TenantGroup(name='Tenant group 2', slug='tenant-group-2'),
@ -203,38 +191,22 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
tenantgroup.save()
tenants = (
Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
baker.make('tenancy.Tenant', name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
baker.make('tenancy.Tenant', name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
baker.make('tenancy.Tenant', name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
)
Tenant.objects.bulk_create(tenants)
circuit_types = (
CircuitType(name='Test Circuit Type 1', slug='test-circuit-type-1'),
CircuitType(name='Test Circuit Type 2', slug='test-circuit-type-2'),
)
CircuitType.objects.bulk_create(circuit_types)
circuit_types = baker.make('circuits.CircuitType', _quantity=2)
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
Provider(name='Provider 3', slug='provider-3'),
)
Provider.objects.bulk_create(providers)
providers = baker.make('circuits.Provider', _quantity=3)
provider_accounts = (
ProviderAccount(name='Provider Account 1', provider=providers[0], account='A'),
ProviderAccount(name='Provider Account 2', provider=providers[1], account='B'),
ProviderAccount(name='Provider Account 3', provider=providers[2], account='C'),
)
ProviderAccount.objects.bulk_create(provider_accounts)
provider_accounts = [
baker.make('circuits.ProviderAccount', provider=providers[0]),
baker.make('circuits.ProviderAccount', provider=providers[1]),
baker.make('circuits.ProviderAccount', provider=providers[2]),
]
provider_networks = (
ProviderNetwork(name='Provider Network 1', provider=providers[1]),
ProviderNetwork(name='Provider Network 2', provider=providers[1]),
ProviderNetwork(name='Provider Network 3', provider=providers[1]),
)
ProviderNetwork.objects.bulk_create(provider_networks)
provider_networks = baker.make('circuits.ProviderNetwork', provider=providers[1], _quantity=3)
locations = (
Location.objects.create(
@ -447,42 +419,31 @@ class CircuitTerminationTestCase(TestCase, ChangeLoggedFilterSetTests):
@classmethod
def setUpTestData(cls):
sites = (
Site(name='Site 1', slug='site-1'),
Site(name='Site 2', slug='site-2'),
Site(name='Site 3', slug='site-3'),
)
Site.objects.bulk_create(sites)
sites = baker.make('dcim.Site', _quantity=3)
circuit_types = (
CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
)
CircuitType.objects.bulk_create(circuit_types)
circuit_type = baker.make('circuits.CircuitType')
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
Provider(name='Provider 3', slug='provider-3'),
baker.make('circuits.Provider', name='Provider 1', slug='provider-1'),
baker.make('circuits.Provider', name='Provider 2', slug='provider-2'),
baker.make('circuits.Provider', name='Provider 3', slug='provider-3'),
)
Provider.objects.bulk_create(providers)
provider_networks = (
ProviderNetwork(name='Provider Network 1', provider=providers[0]),
ProviderNetwork(name='Provider Network 2', provider=providers[1]),
ProviderNetwork(name='Provider Network 3', provider=providers[2]),
baker.make('circuits.ProviderNetwork', name='Provider Network 1', provider=providers[0]),
baker.make('circuits.ProviderNetwork', name='Provider Network 2', provider=providers[1]),
baker.make('circuits.ProviderNetwork', name='Provider Network 3', provider=providers[2]),
)
ProviderNetwork.objects.bulk_create(provider_networks)
circuits = (
Circuit(provider=providers[0], type=circuit_types[0], cid='Circuit 1'),
Circuit(provider=providers[1], type=circuit_types[0], cid='Circuit 2'),
Circuit(provider=providers[2], type=circuit_types[0], cid='Circuit 3'),
Circuit(provider=providers[0], type=circuit_types[0], cid='Circuit 4'),
Circuit(provider=providers[1], type=circuit_types[0], cid='Circuit 5'),
Circuit(provider=providers[2], type=circuit_types[0], cid='Circuit 6'),
Circuit(provider=providers[2], type=circuit_types[0], cid='Circuit 7'),
)
Circuit.objects.bulk_create(circuits)
circuits = [
baker.make('circuits.Circuit', provider=providers[0], type=circuit_type, cid='Circuit 1'),
baker.make('circuits.Circuit', provider=providers[1], type=circuit_type, cid='Circuit 2'),
baker.make('circuits.Circuit', provider=providers[2], type=circuit_type, cid='Circuit 3'),
baker.make('circuits.Circuit', provider=providers[0], type=circuit_type, cid='Circuit 4'),
baker.make('circuits.Circuit', provider=providers[1], type=circuit_type, cid='Circuit 5'),
baker.make('circuits.Circuit', provider=providers[2], type=circuit_type, cid='Circuit 6'),
baker.make('circuits.Circuit', provider=providers[2], type=circuit_type, cid='Circuit 7'),
]
circuit_terminations = (
CircuitTermination(
@ -614,6 +575,7 @@ class CircuitGroupTestCase(TestCase, ChangeLoggedFilterSetTests):
@classmethod
def setUpTestData(cls):
# MPTT models: use .save() directly
tenant_groups = (
TenantGroup(name='Tenant group 1', slug='tenant-group-1'),
TenantGroup(name='Tenant group 2', slug='tenant-group-2'),
@ -623,17 +585,23 @@ class CircuitGroupTestCase(TestCase, ChangeLoggedFilterSetTests):
tenantgroup.save()
tenants = (
Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
baker.make('tenancy.Tenant', name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
baker.make('tenancy.Tenant', name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
baker.make('tenancy.Tenant', name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
)
Tenant.objects.bulk_create(tenants)
CircuitGroup.objects.bulk_create((
CircuitGroup(name='Circuit Group 1', slug='circuit-group-1', description='foobar1', tenant=tenants[0]),
CircuitGroup(name='Circuit Group 2', slug='circuit-group-2', description='foobar2', tenant=tenants[1]),
CircuitGroup(name='Circuit Group 3', slug='circuit-group-3', tenant=tenants[1]),
))
baker.make(
'circuits.CircuitGroup',
name='Circuit Group 1', slug='circuit-group-1', description='foobar1', tenant=tenants[0],
)
baker.make(
'circuits.CircuitGroup',
name='Circuit Group 2', slug='circuit-group-2', description='foobar2', tenant=tenants[1],
)
baker.make(
'circuits.CircuitGroup',
name='Circuit Group 3', slug='circuit-group-3', tenant=tenants[1],
)
def test_q(self):
params = {'q': 'foobar1'}
@ -673,56 +641,31 @@ class CircuitGroupAssignmentTestCase(TestCase, ChangeLoggedFilterSetTests):
@classmethod
def setUpTestData(cls):
circuit_groups = (
CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'),
CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'),
CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'),
)
CircuitGroup.objects.bulk_create(circuit_groups)
circuit_groups = baker.make('circuits.CircuitGroup', _quantity=3)
providers = Provider.objects.bulk_create((
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
Provider(name='Provider 3', slug='provider-3'),
))
circuit_type = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
providers = baker.make('circuits.Provider', _quantity=3)
circuit_type = baker.make('circuits.CircuitType')
circuits = (
Circuit(cid='Circuit 1', provider=providers[0], type=circuit_type),
Circuit(cid='Circuit 2', provider=providers[1], type=circuit_type),
Circuit(cid='Circuit 3', provider=providers[2], type=circuit_type),
)
Circuit.objects.bulk_create(circuits)
circuits = [
baker.make('circuits.Circuit', cid=f'Circuit {i + 1}', provider=providers[i], type=circuit_type)
for i in range(3)
]
provider_networks = (
ProviderNetwork(name='Provider Network 1', provider=providers[0]),
ProviderNetwork(name='Provider Network 2', provider=providers[1]),
ProviderNetwork(name='Provider Network 3', provider=providers[2]),
)
ProviderNetwork.objects.bulk_create(provider_networks)
provider_networks = [
baker.make('circuits.ProviderNetwork', provider=providers[i])
for i in range(3)
]
virtual_circuit_type = VirtualCircuitType.objects.create(
name='Virtual Circuit Type 1',
slug='virtual-circuit-type-1'
)
virtual_circuits = (
VirtualCircuit(
provider_network=provider_networks[0],
cid='Virtual Circuit 1',
type=virtual_circuit_type
),
VirtualCircuit(
provider_network=provider_networks[1],
cid='Virtual Circuit 2',
type=virtual_circuit_type
),
VirtualCircuit(
provider_network=provider_networks[2],
cid='Virtual Circuit 3',
type=virtual_circuit_type
),
)
VirtualCircuit.objects.bulk_create(virtual_circuits)
virtual_circuit_type = baker.make('circuits.VirtualCircuitType')
virtual_circuits = [
baker.make(
'circuits.VirtualCircuit',
provider_network=provider_networks[i],
cid=f'Virtual Circuit {i + 1}',
type=virtual_circuit_type,
)
for i in range(3)
]
assignments = (
CircuitGroupAssignment(
@ -794,19 +737,11 @@ class ProviderNetworkTestCase(TestCase, ChangeLoggedFilterSetTests):
@classmethod
def setUpTestData(cls):
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
Provider(name='Provider 3', slug='provider-3'),
)
Provider.objects.bulk_create(providers)
providers = baker.make('circuits.Provider', _quantity=3)
provider_networks = (
ProviderNetwork(name='Provider Network 1', provider=providers[0], description='foobar1'),
ProviderNetwork(name='Provider Network 2', provider=providers[1], description='foobar2'),
ProviderNetwork(name='Provider Network 3', provider=providers[2]),
)
ProviderNetwork.objects.bulk_create(provider_networks)
baker.make('circuits.ProviderNetwork', name='Provider Network 1', provider=providers[0], description='foobar1')
baker.make('circuits.ProviderNetwork', name='Provider Network 2', provider=providers[1], description='foobar2')
baker.make('circuits.ProviderNetwork', name='Provider Network 3', provider=providers[2])
def test_q(self):
params = {'q': 'foobar1'}
@ -835,19 +770,20 @@ class ProviderAccountTestCase(TestCase, ChangeLoggedFilterSetTests):
@classmethod
def setUpTestData(cls):
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
Provider(name='Provider 3', slug='provider-3'),
)
Provider.objects.bulk_create(providers)
providers = baker.make('circuits.Provider', _quantity=3)
provider_accounts = (
ProviderAccount(name='Provider Account 1', provider=providers[0], description='foobar1', account='1234'),
ProviderAccount(name='Provider Account 2', provider=providers[1], description='foobar2', account='2345'),
ProviderAccount(name='Provider Account 3', provider=providers[2], account='3456'),
baker.make(
'circuits.ProviderAccount',
name='Provider Account 1', provider=providers[0], description='foobar1', account='1234',
)
baker.make(
'circuits.ProviderAccount',
name='Provider Account 2', provider=providers[1], description='foobar2', account='2345',
)
baker.make(
'circuits.ProviderAccount',
name='Provider Account 3', provider=providers[2], account='3456',
)
ProviderAccount.objects.bulk_create(provider_accounts)
def test_q(self):
params = {'q': 'foobar1'}
@ -880,11 +816,18 @@ class VirtualCircuitTypeTestCase(TestCase, ChangeLoggedFilterSetTests):
@classmethod
def setUpTestData(cls):
VirtualCircuitType.objects.bulk_create((
VirtualCircuitType(name='Virtual Circuit Type 1', slug='virtual-circuit-type-1', description='foobar1'),
VirtualCircuitType(name='Virtual Circuit Type 2', slug='virtual-circuit-type-2', description='foobar2'),
VirtualCircuitType(name='Virtual Circuit Type 3', slug='virtual-circuit-type-3'),
))
baker.make(
'circuits.VirtualCircuitType',
name='Virtual Circuit Type 1', slug='virtual-circuit-type-1', description='foobar1',
)
baker.make(
'circuits.VirtualCircuitType',
name='Virtual Circuit Type 2', slug='virtual-circuit-type-2', description='foobar2',
)
baker.make(
'circuits.VirtualCircuitType',
name='Virtual Circuit Type 3', slug='virtual-circuit-type-3',
)
def test_q(self):
params = {'q': 'foobar1'}
@ -910,6 +853,7 @@ class VirtualCircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
@classmethod
def setUpTestData(cls):
# MPTT models: use .save() directly
tenant_groups = (
TenantGroup(name='Tenant group 1', slug='tenant-group-1'),
TenantGroup(name='Tenant group 2', slug='tenant-group-2'),
@ -919,41 +863,26 @@ class VirtualCircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
tenantgroup.save()
tenants = (
Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
baker.make('tenancy.Tenant', name='Tenant 1', slug='tenant-1', group=tenant_groups[0]),
baker.make('tenancy.Tenant', name='Tenant 2', slug='tenant-2', group=tenant_groups[1]),
baker.make('tenancy.Tenant', name='Tenant 3', slug='tenant-3', group=tenant_groups[2]),
)
Tenant.objects.bulk_create(tenants)
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
Provider(name='Provider 3', slug='provider-3'),
)
Provider.objects.bulk_create(providers)
providers = baker.make('circuits.Provider', _quantity=3)
provider_accounts = (
ProviderAccount(name='Provider Account 1', provider=providers[0], account='A'),
ProviderAccount(name='Provider Account 2', provider=providers[1], account='B'),
ProviderAccount(name='Provider Account 3', provider=providers[2], account='C'),
)
ProviderAccount.objects.bulk_create(provider_accounts)
provider_accounts = [
baker.make('circuits.ProviderAccount', provider=providers[i])
for i in range(3)
]
provider_networks = (
ProviderNetwork(name='Provider Network 1', provider=providers[0]),
ProviderNetwork(name='Provider Network 2', provider=providers[1]),
ProviderNetwork(name='Provider Network 3', provider=providers[2]),
)
ProviderNetwork.objects.bulk_create(provider_networks)
provider_networks = [
baker.make('circuits.ProviderNetwork', provider=providers[i])
for i in range(3)
]
virtual_circuit_types = (
VirtualCircuitType(name='Virtual Circuit Type 1', slug='virtual-circuit-type-1'),
VirtualCircuitType(name='Virtual Circuit Type 2', slug='virtual-circuit-type-2'),
VirtualCircuitType(name='Virtual Circuit Type 3', slug='virtual-circuit-type-3'),
)
VirtualCircuitType.objects.bulk_create(virtual_circuit_types)
virtual_circuit_types = baker.make('circuits.VirtualCircuitType', _quantity=3)
virutal_circuits = (
VirtualCircuit.objects.bulk_create((
VirtualCircuit(
provider_network=provider_networks[0],
provider_account=provider_accounts[0],
@ -981,8 +910,7 @@ class VirtualCircuitTestCase(TestCase, ChangeLoggedFilterSetTests):
status=CircuitStatusChoices.STATUS_DEPROVISIONING,
description='virtualcircuit3',
),
)
VirtualCircuit.objects.bulk_create(virutal_circuits)
))
def test_q(self):
params = {'q': 'virtualcircuit1'}
@ -1045,99 +973,46 @@ class VirtualCircuitTerminationTestCase(TestCase, ChangeLoggedFilterSetTests):
@classmethod
def setUpTestData(cls):
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1')
device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
site = Site.objects.create(name='Site 1', slug='site-1')
site = baker.make('dcim.Site')
device_type = baker.make('dcim.DeviceType')
device_role = baker.make('dcim.DeviceRole')
devices = (
Device(site=site, name='Device 1', device_type=device_type, role=device_role),
Device(site=site, name='Device 2', device_type=device_type, role=device_role),
Device(site=site, name='Device 3', device_type=device_type, role=device_role),
)
Device.objects.bulk_create(devices)
devices = [
baker.make('dcim.Device', site=site, device_type=device_type, role=device_role, name=f'Device {i + 1}')
for i in range(3)
]
virtual_interfaces = (
# Device 1
Interface(
device=devices[0],
name='eth0.1',
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[0],
name='eth0.2',
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
# Device 2
Interface(
device=devices[1],
name='eth0.1',
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[1],
name='eth0.2',
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
# Device 3
Interface(
device=devices[2],
name='eth0.1',
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[2],
name='eth0.2',
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
)
Interface.objects.bulk_create(virtual_interfaces)
virtual_interfaces = []
for device in devices:
for j in range(2):
virtual_interfaces.append(
Interface.objects.create(
device=device,
name=f'eth0.{j + 1}',
type=InterfaceTypeChoices.TYPE_VIRTUAL,
)
)
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
Provider(name='Provider 3', slug='provider-3'),
)
Provider.objects.bulk_create(providers)
provider_networks = (
ProviderNetwork(provider=providers[0], name='Provider Network 1'),
ProviderNetwork(provider=providers[1], name='Provider Network 2'),
ProviderNetwork(provider=providers[2], name='Provider Network 3'),
)
ProviderNetwork.objects.bulk_create(provider_networks)
provider_accounts = (
ProviderAccount(provider=providers[0], account='Provider Account 1'),
ProviderAccount(provider=providers[1], account='Provider Account 2'),
ProviderAccount(provider=providers[2], account='Provider Account 3'),
)
ProviderAccount.objects.bulk_create(provider_accounts)
virtual_circuit_type = VirtualCircuitType.objects.create(
name='Virtual Circuit Type 1',
slug='virtual-circuit-type-1'
)
providers = baker.make('circuits.Provider', _quantity=3)
provider_networks = [
baker.make('circuits.ProviderNetwork', provider=providers[i])
for i in range(3)
]
provider_accounts = [
baker.make('circuits.ProviderAccount', provider=providers[i])
for i in range(3)
]
virtual_circuit_type = baker.make('circuits.VirtualCircuitType')
virtual_circuits = (
VirtualCircuit(
provider_network=provider_networks[0],
provider_account=provider_accounts[0],
cid='Virtual Circuit 1',
type=virtual_circuit_type
),
VirtualCircuit(
provider_network=provider_networks[1],
provider_account=provider_accounts[1],
cid='Virtual Circuit 2',
type=virtual_circuit_type
),
VirtualCircuit(
provider_network=provider_networks[2],
provider_account=provider_accounts[2],
cid='Virtual Circuit 3',
type=virtual_circuit_type
),
)
VirtualCircuit.objects.bulk_create(virtual_circuits)
virtual_circuits = [
baker.make(
'circuits.VirtualCircuit',
provider_network=provider_networks[i],
provider_account=provider_accounts[i],
type=virtual_circuit_type,
)
for i in range(3)
]
virtual_circuit_terminations = (
VirtualCircuitTermination(

View File

@ -1,29 +1,22 @@
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
from django.test import TestCase
from model_bakery import baker
from circuits.models import Circuit, CircuitTermination, CircuitType, Provider, ProviderNetwork
from dcim.models import Site
from circuits.models import CircuitTermination
class CircuitTerminationTestCase(TestCase):
@classmethod
def setUpTestData(cls):
provider = Provider.objects.create(name='Provider 1', slug='provider-1')
circuit_type = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
provider = baker.make('circuits.Provider')
cls.sites = (
Site.objects.create(name='Site 1', slug='site-1'),
Site.objects.create(name='Site 2', slug='site-2'),
)
cls.sites = baker.make('dcim.Site', _quantity=2)
cls.circuits = (
Circuit.objects.create(cid='Circuit 1', provider=provider, type=circuit_type),
Circuit.objects.create(cid='Circuit 2', provider=provider, type=circuit_type),
)
cls.circuits = baker.make('circuits.Circuit', provider=provider, _quantity=2)
cls.provider_network = ProviderNetwork.objects.create(name='Provider Network 1', provider=provider)
cls.provider_network = baker.make('circuits.ProviderNetwork', provider=provider)
def test_circuit_termination_creation_populates_circuit_cache(self):
"""

View File

@ -2,18 +2,14 @@ from types import SimpleNamespace
from unittest.mock import MagicMock, patch
from django.test import SimpleTestCase, TestCase
from model_bakery import baker
from circuits import signals
from circuits.models import Circuit, CircuitTermination, CircuitType, Provider
from circuits.models import CircuitTermination
from dcim.models import (
Cable,
CablePath,
Device,
DeviceRole,
DeviceType,
Interface,
Manufacturer,
Site,
)
@ -25,18 +21,13 @@ class RebuildCablepathsSignalTestCase(TestCase):
@classmethod
def setUpTestData(cls):
cls.site = Site.objects.create(name='Site', slug='site')
manufacturer = Manufacturer.objects.create(name='Manufacturer', slug='manufacturer')
device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type')
device_role = DeviceRole.objects.create(name='Device Role', slug='device-role')
cls.device = Device.objects.create(site=cls.site, device_type=device_type, role=device_role, name='Device 1')
provider = Provider.objects.create(name='Provider', slug='provider')
circuit_type = CircuitType.objects.create(name='Circuit Type', slug='circuit-type')
cls.circuit = Circuit.objects.create(provider=provider, type=circuit_type, cid='Circuit 1')
cls.site = baker.make('dcim.Site')
cls.device = baker.make('dcim.Device', site=cls.site)
cls.circuit = baker.make('circuits.Circuit')
def test_saving_termination_rebuilds_peer_path(self):
interface = Interface.objects.create(device=self.device, name='Interface 1')
site_z = Site.objects.create(name='Site Z', slug='site-z')
site_z = baker.make('dcim.Site')
termination_a = CircuitTermination.objects.create(circuit=self.circuit, termination=self.site, term_side='A')
termination_z = CircuitTermination.objects.create(circuit=self.circuit, termination=site_z, term_side='Z')
Cable(a_terminations=[interface], b_terminations=[termination_a]).save()
@ -56,7 +47,7 @@ class RebuildCablepathsSignalTestCase(TestCase):
self.assertNotEqual(CablePath.objects.get().pk, original_path.pk)
def test_deleting_termination_rebuilds_peer_path(self):
site_z = Site.objects.create(name='Site Z', slug='site-z')
site_z = baker.make('dcim.Site')
termination_a = CircuitTermination.objects.create(circuit=self.circuit, termination=self.site, term_side='A')
termination_z = CircuitTermination.objects.create(circuit=self.circuit, termination=site_z, term_side='Z')

View File

@ -2,13 +2,13 @@ import datetime
from django.contrib.contenttypes.models import ContentType
from django.urls import reverse
from model_bakery import baker
from circuits.choices import *
from circuits.models import *
from core.models import ObjectType
from dcim.choices import InterfaceTypeChoices
from dcim.models import Cable, Device, DeviceRole, DeviceType, Interface, Manufacturer, Site
from ipam.models import ASN, RIR
from dcim.models import Cable, Interface, Site
from netbox.choices import ImportFormatChoices
from users.models import ObjectPermission
from utilities.testing import ViewTestCases, create_tags, create_test_device
@ -20,18 +20,10 @@ class ProviderTestCase(ViewTestCases.PrimaryObjectViewTestCase):
@classmethod
def setUpTestData(cls):
rir = RIR.objects.create(name='RFC 6996', is_private=True)
asns = [
ASN(asn=65000 + i, rir=rir) for i in range(8)
]
ASN.objects.bulk_create(asns)
rir = baker.make('ipam.RIR', is_private=True)
asns = [baker.make('ipam.ASN', asn=65000 + i, rir=rir) for i in range(8)]
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
Provider(name='Provider 3', slug='provider-3'),
)
Provider.objects.bulk_create(providers)
providers = baker.make('circuits.Provider', _quantity=3)
providers[0].asns.set([asns[0], asns[1]])
providers[1].asns.set([asns[2], asns[3]])
providers[2].asns.set([asns[4], asns[5]])
@ -71,13 +63,7 @@ class CircuitTypeTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
@classmethod
def setUpTestData(cls):
circuit_types = (
CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
CircuitType(name='Circuit Type 2', slug='circuit-type-2'),
CircuitType(name='Circuit Type 3', slug='circuit-type-3'),
)
CircuitType.objects.bulk_create(circuit_types)
circuit_types = baker.make('circuits.CircuitType', _quantity=3)
tags = create_tags('Alpha', 'Bravo', 'Charlie')
@ -119,39 +105,24 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
@classmethod
def setUpTestData(cls):
Site.objects.create(name='Site 1', slug='site-1')
baker.make('dcim.Site', name='Site 1', slug='site-1')
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
providers = baker.make('circuits.Provider', _quantity=2)
provider_accounts = [
baker.make('circuits.ProviderAccount', provider=providers[0]),
baker.make('circuits.ProviderAccount', provider=providers[1]),
]
circuittypes = baker.make('circuits.CircuitType', _quantity=2)
circuits = baker.make(
'circuits.Circuit',
provider=providers[0],
provider_account=provider_accounts[0],
type=circuittypes[0],
_quantity=3,
)
Provider.objects.bulk_create(providers)
provider_accounts = (
ProviderAccount(name='Provider Account 1', provider=providers[0], account='1234'),
ProviderAccount(name='Provider Account 2', provider=providers[1], account='2345'),
)
ProviderAccount.objects.bulk_create(provider_accounts)
circuittypes = (
CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
CircuitType(name='Circuit Type 2', slug='circuit-type-2'),
)
CircuitType.objects.bulk_create(circuittypes)
circuits = (
Circuit(
cid='Circuit 1', provider=providers[0], provider_account=provider_accounts[0], type=circuittypes[0]
),
Circuit(
cid='Circuit 2', provider=providers[0], provider_account=provider_accounts[0], type=circuittypes[0]
),
Circuit(
cid='Circuit 3', provider=providers[0], provider_account=provider_accounts[0], type=circuittypes[0]
),
)
Circuit.objects.bulk_create(circuits)
tags = create_tags('Alpha', 'Bravo', 'Charlie')
@ -172,9 +143,9 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
cls.csv_data = (
"cid,provider,provider_account,type,status",
"Circuit 4,Provider 1,Provider Account 1,Circuit Type 1,active",
"Circuit 5,Provider 1,Provider Account 1,Circuit Type 1,active",
"Circuit 6,Provider 1,Provider Account 1,Circuit Type 1,active",
f"Circuit 4,{providers[0].name},{provider_accounts[0].name},{circuittypes[0].name},active",
f"Circuit 5,{providers[0].name},{provider_accounts[0].name},{circuittypes[0].name},active",
f"Circuit 6,{providers[0].name},{provider_accounts[0].name},{circuittypes[0].name},active",
)
cls.csv_update_data = (
@ -196,12 +167,11 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
}
def test_circuit_type_display_colored(self):
circuit_type = CircuitType.objects.first()
circuit = Circuit.objects.first()
circuit_type = circuit.type
circuit_type.color = '12ab34'
circuit_type.save()
circuit = Circuit.objects.first()
self.add_permissions('circuits.view_circuit')
response = self.client.get(circuit.get_absolute_url())
@ -221,8 +191,8 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
[
{{
"cid": "Circuit 7",
"provider": "Provider 1",
"type": "Circuit Type 1",
"provider": "{Provider.objects.first().name}",
"type": "{CircuitType.objects.first().name}",
"status": "active",
"description": "Testing Import",
"terminations": [
@ -270,18 +240,9 @@ class ProviderAccountTestCase(ViewTestCases.PrimaryObjectViewTestCase):
@classmethod
def setUpTestData(cls):
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
)
Provider.objects.bulk_create(providers)
providers = baker.make('circuits.Provider', _quantity=2)
provider_accounts = (
ProviderAccount(name='Provider Account 1', provider=providers[0], account='1234'),
ProviderAccount(name='Provider Account 2', provider=providers[0], account='2345'),
ProviderAccount(name='Provider Account 3', provider=providers[0], account='3456'),
)
ProviderAccount.objects.bulk_create(provider_accounts)
provider_accounts = baker.make('circuits.ProviderAccount', provider=providers[0], _quantity=3)
tags = create_tags('Alpha', 'Bravo', 'Charlie')
@ -296,9 +257,9 @@ class ProviderAccountTestCase(ViewTestCases.PrimaryObjectViewTestCase):
cls.csv_data = (
"name,provider,account,description",
"Provider Account 4,Provider 1,4567,Foo",
"Provider Account 5,Provider 1,5678,Bar",
"Provider Account 6,Provider 1,6789,Baz",
f"Provider Account 4,{providers[0].name},4567,Foo",
f"Provider Account 5,{providers[0].name},5678,Bar",
f"Provider Account 6,{providers[0].name},6789,Baz",
)
cls.csv_update_data = (
@ -321,19 +282,9 @@ class ProviderNetworkTestCase(ViewTestCases.PrimaryObjectViewTestCase):
@classmethod
def setUpTestData(cls):
providers = (
Provider(name='Provider 1', slug='provider-1'),
Provider(name='Provider 2', slug='provider-2'),
)
Provider.objects.bulk_create(providers)
providers = baker.make('circuits.Provider', _quantity=2)
provider_networks = (
ProviderNetwork(name='Provider Network 1', provider=providers[0]),
ProviderNetwork(name='Provider Network 2', provider=providers[0]),
ProviderNetwork(name='Provider Network 3', provider=providers[0]),
)
ProviderNetwork.objects.bulk_create(provider_networks)
provider_networks = baker.make('circuits.ProviderNetwork', provider=providers[0], _quantity=3)
tags = create_tags('Alpha', 'Bravo', 'Charlie')
@ -347,9 +298,9 @@ class ProviderNetworkTestCase(ViewTestCases.PrimaryObjectViewTestCase):
cls.csv_data = (
"name,provider,description",
"Provider Network 4,Provider 1,Foo",
"Provider Network 5,Provider 1,Bar",
"Provider Network 6,Provider 1,Baz",
f"Provider Network 4,{providers[0].name},Foo",
f"Provider Network 5,{providers[0].name},Bar",
f"Provider Network 6,{providers[0].name},Baz",
)
cls.csv_update_data = (
@ -372,21 +323,11 @@ class CircuitTerminationTestCase(ViewTestCases.PrimaryObjectViewTestCase):
@classmethod
def setUpTestData(cls):
sites = (
Site(name='Site 1', slug='site-1'),
Site(name='Site 2', slug='site-2'),
Site(name='Site 3', slug='site-3'),
)
Site.objects.bulk_create(sites)
provider = Provider.objects.create(name='Provider 1', slug='provider-1')
circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
sites = baker.make('dcim.Site', _quantity=3)
provider = baker.make('circuits.Provider')
circuittype = baker.make('circuits.CircuitType')
circuits = (
Circuit(cid='Circuit 1', provider=provider, type=circuittype),
Circuit(cid='Circuit 2', provider=provider, type=circuittype),
Circuit(cid='Circuit 3', provider=provider, type=circuittype),
)
Circuit.objects.bulk_create(circuits)
circuits = baker.make('circuits.Circuit', provider=provider, type=circuittype, _quantity=3)
circuit_terminations = (
CircuitTermination(circuit=circuits[0], term_side='A', termination=sites[0]),
@ -408,8 +349,8 @@ class CircuitTerminationTestCase(ViewTestCases.PrimaryObjectViewTestCase):
site = sites[0].pk
cls.csv_data = (
"circuit,term_side,termination_type,termination_id,description",
f"Circuit 3,A,dcim.site,{site},Foo",
f"Circuit 3,Z,dcim.site,{site},Bar",
f"{circuits[2].cid},A,dcim.site,{site},Foo",
f"{circuits[2].cid},Z,dcim.site,{site},Bar",
)
cls.csv_update_data = (
@ -450,12 +391,7 @@ class CircuitGroupTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
@classmethod
def setUpTestData(cls):
circuit_groups = (
CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'),
CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'),
CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'),
)
CircuitGroup.objects.bulk_create(circuit_groups)
circuit_groups = baker.make('circuits.CircuitGroup', _quantity=3)
tags = create_tags('Alpha', 'Bravo', 'Charlie')
@ -499,24 +435,12 @@ class CircuitGroupAssignmentTestCase(
@classmethod
def setUpTestData(cls):
circuit_groups = (
CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'),
CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'),
CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'),
CircuitGroup(name='Circuit Group 4', slug='circuit-group-4'),
)
CircuitGroup.objects.bulk_create(circuit_groups)
circuit_groups = baker.make('circuits.CircuitGroup', _quantity=4)
provider = Provider.objects.create(name='Provider 1', slug='provider-1')
circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1')
provider = baker.make('circuits.Provider')
circuittype = baker.make('circuits.CircuitType')
circuits = (
Circuit(cid='Circuit 1', provider=provider, type=circuittype),
Circuit(cid='Circuit 2', provider=provider, type=circuittype),
Circuit(cid='Circuit 3', provider=provider, type=circuittype),
Circuit(cid='Circuit 4', provider=provider, type=circuittype),
)
Circuit.objects.bulk_create(circuits)
circuits = baker.make('circuits.Circuit', provider=provider, type=circuittype, _quantity=4)
assignments = (
CircuitGroupAssignment(
@ -572,12 +496,7 @@ class VirtualCircuitTypeTestCase(ViewTestCases.OrganizationalObjectViewTestCase)
@classmethod
def setUpTestData(cls):
virtual_circuit_types = (
VirtualCircuitType(name='Virtual Circuit Type 1', slug='circuit-type-1'),
VirtualCircuitType(name='Virtual Circuit Type 2', slug='circuit-type-2'),
VirtualCircuitType(name='Virtual Circuit Type 3', slug='circuit-type-3'),
)
VirtualCircuitType.objects.bulk_create(virtual_circuit_types)
virtual_circuit_types = baker.make('circuits.VirtualCircuitType', _quantity=3)
tags = create_tags('Alpha', 'Bravo', 'Charlie')
@ -619,52 +538,27 @@ class VirtualCircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
@classmethod
def setUpTestData(cls):
provider = Provider.objects.create(name='Provider 1', slug='provider-1')
provider_networks = (
ProviderNetwork(provider=provider, name='Provider Network 1'),
ProviderNetwork(provider=provider, name='Provider Network 2'),
)
ProviderNetwork.objects.bulk_create(provider_networks)
provider_accounts = (
ProviderAccount(provider=provider, account='Provider Account 1'),
ProviderAccount(provider=provider, account='Provider Account 2'),
)
ProviderAccount.objects.bulk_create(provider_accounts)
virtual_circuit_types = (
VirtualCircuitType(name='Virtual Circuit Type 1', slug='virtual-circuit-type-1'),
VirtualCircuitType(name='Virtual Circuit Type 2', slug='virtual-circuit-type-2'),
)
VirtualCircuitType.objects.bulk_create(virtual_circuit_types)
provider = baker.make('circuits.Provider')
provider_networks = baker.make('circuits.ProviderNetwork', provider=provider, _quantity=2)
provider_accounts = baker.make('circuits.ProviderAccount', provider=provider, _quantity=2)
virtual_circuit_types = baker.make('circuits.VirtualCircuitType', _quantity=2)
virtual_circuits = (
VirtualCircuit(
provider_network=provider_networks[0],
provider_account=provider_accounts[0],
cid='Virtual Circuit 1',
type=virtual_circuit_types[0]
),
VirtualCircuit(
provider_network=provider_networks[0],
provider_account=provider_accounts[0],
cid='Virtual Circuit 2',
type=virtual_circuit_types[0]
),
VirtualCircuit(
provider_network=provider_networks[0],
provider_account=provider_accounts[0],
cid='Virtual Circuit 3',
type=virtual_circuit_types[0]
),
virtual_circuits = baker.make(
'circuits.VirtualCircuit',
provider_network=provider_networks[0],
provider_account=provider_accounts[0],
type=virtual_circuit_types[0],
_quantity=3,
)
VirtualCircuit.objects.bulk_create(virtual_circuits)
device = create_test_device('Device 1')
interfaces = (
Interface(device=device, name='Interface 1', type=InterfaceTypeChoices.TYPE_VIRTUAL),
Interface(device=device, name='Interface 2', type=InterfaceTypeChoices.TYPE_VIRTUAL),
Interface(device=device, name='Interface 3', type=InterfaceTypeChoices.TYPE_VIRTUAL),
)
Interface.objects.bulk_create(interfaces)
interfaces = []
for i in range(3):
interfaces.append(
Interface.objects.create(
device=device, name=f'Interface {i + 1}', type=InterfaceTypeChoices.TYPE_VIRTUAL
)
)
tags = create_tags('Alpha', 'Bravo', 'Charlie')
@ -682,16 +576,16 @@ class VirtualCircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
cls.csv_data = (
"cid,provider_network,provider_account,type,status",
(
f"Virtual Circuit 4,Provider Network 1,Provider Account 1,{virtual_circuit_types[0].name},"
f"{CircuitStatusChoices.STATUS_PLANNED}"
f"Virtual Circuit 4,{provider_networks[0].name},{provider_accounts[0].account},"
f"{virtual_circuit_types[0].name},{CircuitStatusChoices.STATUS_PLANNED}"
),
(
f"Virtual Circuit 5,Provider Network 1,Provider Account 1,{virtual_circuit_types[0].name},"
f"{CircuitStatusChoices.STATUS_PLANNED}"
f"Virtual Circuit 5,{provider_networks[0].name},{provider_accounts[0].account},"
f"{virtual_circuit_types[0].name},{CircuitStatusChoices.STATUS_PLANNED}"
),
(
f"Virtual Circuit 6,Provider Network 1,Provider Account 1,{virtual_circuit_types[0].name},"
f"{CircuitStatusChoices.STATUS_PLANNED}"
f"Virtual Circuit 6,{provider_networks[0].name},{provider_accounts[0].account},"
f"{virtual_circuit_types[0].name},{CircuitStatusChoices.STATUS_PLANNED}"
),
)
@ -732,8 +626,8 @@ class VirtualCircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase):
[
{{
"cid": "Virtual Circuit 7",
"provider_network": "Provider Network 1",
"type": "Virtual Circuit Type 1",
"provider_network": "{ProviderNetwork.objects.first().name}",
"type": "{VirtualCircuitType.objects.first().name}",
"status": "active",
"terminations": [
{{
@ -781,129 +675,58 @@ class VirtualCircuitTerminationTestCase(ViewTestCases.PrimaryObjectViewTestCase)
@classmethod
def setUpTestData(cls):
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1')
device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
site = Site.objects.create(name='Site 1', slug='site-1')
site = baker.make('dcim.Site')
device_type = baker.make('dcim.DeviceType')
device_role = baker.make('dcim.DeviceRole')
devices = (
Device(site=site, name='hub', device_type=device_type, role=device_role),
Device(site=site, name='spoke1', device_type=device_type, role=device_role),
Device(site=site, name='spoke2', device_type=device_type, role=device_role),
Device(site=site, name='spoke3', device_type=device_type, role=device_role),
devices = [
baker.make('dcim.Device', site=site, device_type=device_type, role=device_role, name=name)
for name in ('hub', 'spoke1', 'spoke2', 'spoke3')
]
physical_interfaces = []
for device in devices:
physical_interfaces.append(
Interface.objects.create(device=device, name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED)
)
virtual_interfaces = []
# Point-to-point VCs
for i, (device, parent) in enumerate(zip(devices, physical_interfaces)):
count = 3 if i == 0 else 1
for j in range(count):
virtual_interfaces.append(
Interface.objects.create(
device=device,
name=f'eth0.{j + 1}',
parent=parent,
type=InterfaceTypeChoices.TYPE_VIRTUAL,
)
)
# Hub and spoke VCs
for device in devices:
virtual_interfaces.append(
Interface.objects.create(
device=device,
name='eth0.9',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL,
)
)
provider = baker.make('circuits.Provider')
provider_network = baker.make('circuits.ProviderNetwork', provider=provider)
provider_account = baker.make('circuits.ProviderAccount', provider=provider)
virtual_circuit_type = baker.make('circuits.VirtualCircuitType')
virtual_circuits = baker.make(
'circuits.VirtualCircuit',
provider_network=provider_network,
provider_account=provider_account,
type=virtual_circuit_type,
_quantity=4,
)
Device.objects.bulk_create(devices)
physical_interfaces = (
Interface(device=devices[0], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
Interface(device=devices[1], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
Interface(device=devices[2], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
Interface(device=devices[3], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED),
)
Interface.objects.bulk_create(physical_interfaces)
virtual_interfaces = (
# Point-to-point VCs
Interface(
device=devices[0],
name='eth0.1',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[0],
name='eth0.2',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[0],
name='eth0.3',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[1],
name='eth0.1',
parent=physical_interfaces[1],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[2],
name='eth0.1',
parent=physical_interfaces[2],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[3],
name='eth0.1',
parent=physical_interfaces[3],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
# Hub and spoke VCs
Interface(
device=devices[0],
name='eth0.9',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[1],
name='eth0.9',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[2],
name='eth0.9',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
Interface(
device=devices[3],
name='eth0.9',
parent=physical_interfaces[0],
type=InterfaceTypeChoices.TYPE_VIRTUAL
),
)
Interface.objects.bulk_create(virtual_interfaces)
provider = Provider.objects.create(name='Provider 1', slug='provider-1')
provider_network = ProviderNetwork.objects.create(provider=provider, name='Provider Network 1')
provider_account = ProviderAccount.objects.create(provider=provider, account='Provider Account 1')
virtual_circuit_type = VirtualCircuitType.objects.create(
name='Virtual Circuit Type 1',
slug='virtual-circuit-type-1'
)
virtual_circuits = (
VirtualCircuit(
provider_network=provider_network,
provider_account=provider_account,
cid='Virtual Circuit 1',
type=virtual_circuit_type
),
VirtualCircuit(
provider_network=provider_network,
provider_account=provider_account,
cid='Virtual Circuit 2',
type=virtual_circuit_type
),
VirtualCircuit(
provider_network=provider_network,
provider_account=provider_account,
cid='Virtual Circuit 3',
type=virtual_circuit_type
),
VirtualCircuit(
provider_network=provider_network,
provider_account=provider_account,
cid='Virtual Circuit 4',
type=virtual_circuit_type
),
)
VirtualCircuit.objects.bulk_create(virtual_circuits)
virtual_circuit_terminations = (
VirtualCircuitTermination(
@ -945,12 +768,15 @@ class VirtualCircuitTerminationTestCase(ViewTestCases.PrimaryObjectViewTestCase)
'interface': virtual_interfaces[6].pk
}
vc_cid = virtual_circuits[3].cid
hub = VirtualCircuitTerminationRoleChoices.ROLE_HUB
spoke = VirtualCircuitTerminationRoleChoices.ROLE_SPOKE
cls.csv_data = (
"virtual_circuit,role,interface,description",
f"Virtual Circuit 4,{VirtualCircuitTerminationRoleChoices.ROLE_HUB},{virtual_interfaces[6].pk},Hub",
f"Virtual Circuit 4,{VirtualCircuitTerminationRoleChoices.ROLE_SPOKE},{virtual_interfaces[7].pk},Spoke 1",
f"Virtual Circuit 4,{VirtualCircuitTerminationRoleChoices.ROLE_SPOKE},{virtual_interfaces[8].pk},Spoke 2",
f"Virtual Circuit 4,{VirtualCircuitTerminationRoleChoices.ROLE_SPOKE},{virtual_interfaces[9].pk},Spoke 3",
f"{vc_cid},{hub},{virtual_interfaces[6].pk},Hub",
f"{vc_cid},{spoke},{virtual_interfaces[7].pk},Spoke 1",
f"{vc_cid},{spoke},{virtual_interfaces[8].pk},Spoke 2",
f"{vc_cid},{spoke},{virtual_interfaces[9].pk},Spoke 3",
)
cls.csv_update_data = (

View File

@ -47,6 +47,8 @@ SECRET_KEY = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
DEFAULT_PERMISSIONS = {}
MPTT_ALLOW_TESTING_GENERATORS = True
API_TOKEN_PEPPERS = {
1: 'TEST-VALUE-DO-NOT-USE-TEST-VALUE-DO-NOT-USE-TEST-VALUE-DO-NOT-USE',
}

View File

@ -144,6 +144,7 @@ JINJA2_FILTERS = getattr(configuration, 'JINJA2_FILTERS', {})
LANGUAGE_CODE = getattr(configuration, 'DEFAULT_LANGUAGE', 'en-us')
LANGUAGE_COOKIE_PATH = CSRF_COOKIE_PATH
LOGGING = getattr(configuration, 'LOGGING', {})
MPTT_ALLOW_TESTING_GENERATORS = getattr(configuration, 'MPTT_ALLOW_TESTING_GENERATORS', False)
LOGIN_PERSISTENCE = getattr(configuration, 'LOGIN_PERSISTENCE', False)
LOGIN_REQUIRED = getattr(configuration, 'LOGIN_REQUIRED', True)
LOGIN_TIMEOUT = getattr(configuration, 'LOGIN_TIMEOUT', None)