|
@@ -1,14 +1,18 @@
|
|
|
import datetime
|
|
import datetime
|
|
|
|
|
|
|
|
|
|
+from django.contrib.contenttypes.models import ContentType
|
|
|
from django.test import override_settings
|
|
from django.test import override_settings
|
|
|
from django.urls import reverse
|
|
from django.urls import reverse
|
|
|
from netaddr import IPNetwork
|
|
from netaddr import IPNetwork
|
|
|
|
|
|
|
|
-from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
|
|
|
|
|
|
|
+from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site, Interface
|
|
|
|
|
+from extras.choices import ObjectChangeActionChoices
|
|
|
|
|
+from extras.models import ObjectChange
|
|
|
from ipam.choices import *
|
|
from ipam.choices import *
|
|
|
from ipam.models import *
|
|
from ipam.models import *
|
|
|
from tenancy.models import Tenant
|
|
from tenancy.models import Tenant
|
|
|
-from utilities.testing import ViewTestCases, create_tags
|
|
|
|
|
|
|
+from users.models import ObjectPermission
|
|
|
|
|
+from utilities.testing import ViewTestCases, create_tags, post_data
|
|
|
|
|
|
|
|
|
|
|
|
|
class ASNTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|
class ASNTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|
@@ -746,3 +750,133 @@ class ServiceTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|
|
self.assertEqual(instance.protocol, service_template.protocol)
|
|
self.assertEqual(instance.protocol, service_template.protocol)
|
|
|
self.assertEqual(instance.ports, service_template.ports)
|
|
self.assertEqual(instance.ports, service_template.ports)
|
|
|
self.assertEqual(instance.description, service_template.description)
|
|
self.assertEqual(instance.description, service_template.description)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class L2VPNTestCase(ViewTestCases.PrimaryObjectViewTestCase):
|
|
|
|
|
+ model = L2VPN
|
|
|
|
|
+ csv_data = (
|
|
|
|
|
+ 'name,slug,type,identifier',
|
|
|
|
|
+ 'L2VPN 5,l2vpn-5,vxlan,456',
|
|
|
|
|
+ 'L2VPN 6,l2vpn-6,vxlan,444',
|
|
|
|
|
+ )
|
|
|
|
|
+ bulk_edit_data = {
|
|
|
|
|
+ 'description': 'New Description',
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @classmethod
|
|
|
|
|
+ def setUpTestData(cls):
|
|
|
|
|
+ rts = (
|
|
|
|
|
+ RouteTarget(name='64534:123'),
|
|
|
|
|
+ RouteTarget(name='64534:321')
|
|
|
|
|
+ )
|
|
|
|
|
+ RouteTarget.objects.bulk_create(rts)
|
|
|
|
|
+
|
|
|
|
|
+ l2vpns = (
|
|
|
|
|
+ L2VPN(name='L2VPN 1', slug='l2vpn-1', type='vxlan', identifier='650001'),
|
|
|
|
|
+ L2VPN(name='L2VPN 2', slug='l2vpn-2', type='vxlan', identifier='650002'),
|
|
|
|
|
+ L2VPN(name='L2VPN 3', slug='l2vpn-3', type='vxlan', identifier='650003')
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ L2VPN.objects.bulk_create(l2vpns)
|
|
|
|
|
+
|
|
|
|
|
+ cls.form_data = {
|
|
|
|
|
+ 'name': 'L2VPN 8',
|
|
|
|
|
+ 'slug': 'l2vpn-8',
|
|
|
|
|
+ 'type': 'vxlan',
|
|
|
|
|
+ 'identifier': 123,
|
|
|
|
|
+ 'description': 'Description',
|
|
|
|
|
+ 'import_targets': [rts[0].pk],
|
|
|
|
|
+ 'export_targets': [rts[1].pk]
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ print(cls.form_data)
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+class L2VPNTerminationTestCase(
|
|
|
|
|
+ ViewTestCases.GetObjectViewTestCase,
|
|
|
|
|
+ ViewTestCases.GetObjectChangelogViewTestCase,
|
|
|
|
|
+ ViewTestCases.CreateObjectViewTestCase,
|
|
|
|
|
+ ViewTestCases.EditObjectViewTestCase,
|
|
|
|
|
+ ViewTestCases.DeleteObjectViewTestCase,
|
|
|
|
|
+ ViewTestCases.ListObjectsViewTestCase,
|
|
|
|
|
+ ViewTestCases.BulkImportObjectsViewTestCase,
|
|
|
|
|
+ ViewTestCases.BulkDeleteObjectsViewTestCase,
|
|
|
|
|
+):
|
|
|
|
|
+
|
|
|
|
|
+ model = L2VPNTermination
|
|
|
|
|
+
|
|
|
|
|
+ @classmethod
|
|
|
|
|
+ def setUpTestData(cls):
|
|
|
|
|
+ site = Site.objects.create(name='Site 1')
|
|
|
|
|
+ manufacturer = Manufacturer.objects.create(name='Manufacturer 1')
|
|
|
|
|
+ device_type = DeviceType.objects.create(model='Device Type 1', manufacturer=manufacturer)
|
|
|
|
|
+ device_role = DeviceRole.objects.create(name='Switch')
|
|
|
|
|
+ device = Device.objects.create(
|
|
|
|
|
+ name='Device 1',
|
|
|
|
|
+ site=site,
|
|
|
|
|
+ device_type=device_type,
|
|
|
|
|
+ device_role=device_role,
|
|
|
|
|
+ status='active'
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ interface = Interface.objects.create(name='Interface 1', device=device, type='1000baset')
|
|
|
|
|
+ l2vpn = L2VPN.objects.create(name='L2VPN 1', type='vxlan', identifier=650001)
|
|
|
|
|
+ l2vpn_vlans = L2VPN.objects.create(name='L2VPN 2', type='vxlan', identifier=650002)
|
|
|
|
|
+
|
|
|
|
|
+ vlans = (
|
|
|
|
|
+ VLAN(name='Vlan 1', vid=1001),
|
|
|
|
|
+ VLAN(name='Vlan 2', vid=1002),
|
|
|
|
|
+ VLAN(name='Vlan 3', vid=1003),
|
|
|
|
|
+ VLAN(name='Vlan 4', vid=1004),
|
|
|
|
|
+ VLAN(name='Vlan 5', vid=1005),
|
|
|
|
|
+ VLAN(name='Vlan 6', vid=1006)
|
|
|
|
|
+ )
|
|
|
|
|
+ VLAN.objects.bulk_create(vlans)
|
|
|
|
|
+
|
|
|
|
|
+ terminations = (
|
|
|
|
|
+ L2VPNTermination(l2vpn=l2vpn, assigned_object=vlans[0]),
|
|
|
|
|
+ L2VPNTermination(l2vpn=l2vpn, assigned_object=vlans[1]),
|
|
|
|
|
+ L2VPNTermination(l2vpn=l2vpn, assigned_object=vlans[2])
|
|
|
|
|
+ )
|
|
|
|
|
+ L2VPNTermination.objects.bulk_create(terminations)
|
|
|
|
|
+
|
|
|
|
|
+ cls.form_data = {
|
|
|
|
|
+ 'l2vpn': l2vpn.pk,
|
|
|
|
|
+ 'device': device.pk,
|
|
|
|
|
+ 'interface': interface.pk,
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ cls.csv_data = (
|
|
|
|
|
+ "l2vpn,vlan",
|
|
|
|
|
+ "L2VPN 2,Vlan 4",
|
|
|
|
|
+ "L2VPN 2,Vlan 5",
|
|
|
|
|
+ "L2VPN 2,Vlan 6",
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ cls.bulk_edit_data = {}
|
|
|
|
|
+
|
|
|
|
|
+ #
|
|
|
|
|
+ # Custom assertions
|
|
|
|
|
+ #
|
|
|
|
|
+
|
|
|
|
|
+ def assertInstanceEqual(self, instance, data, exclude=None, api=False):
|
|
|
|
|
+ """
|
|
|
|
|
+ Override parent
|
|
|
|
|
+ """
|
|
|
|
|
+ if exclude is None:
|
|
|
|
|
+ exclude = []
|
|
|
|
|
+
|
|
|
|
|
+ fields = [k for k in data.keys() if k not in exclude]
|
|
|
|
|
+ model_dict = self.model_to_dict(instance, fields=fields, api=api)
|
|
|
|
|
+
|
|
|
|
|
+ # Omit any dictionary keys which are not instance attributes or have been excluded
|
|
|
|
|
+ relevant_data = {
|
|
|
|
|
+ k: v for k, v in data.items() if hasattr(instance, k) and k not in exclude
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ # Handle relations on the model
|
|
|
|
|
+ for k, v in model_dict.items():
|
|
|
|
|
+ if isinstance(v, object) and hasattr(v, 'first'):
|
|
|
|
|
+ model_dict[k] = v.first().pk
|
|
|
|
|
+
|
|
|
|
|
+ self.assertDictEqual(model_dict, relevant_data)
|