1from django.test import TestCase 2 3from dcim.models import Device, DeviceRole, DeviceType, Interface, Location, Manufacturer, Rack, Region, Site, SiteGroup 4from ipam.choices import * 5from ipam.filtersets import * 6from ipam.models import * 7from utilities.testing import ChangeLoggedFilterSetTests 8from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface 9from tenancy.models import Tenant, TenantGroup 10 11 12class VRFTestCase(TestCase, ChangeLoggedFilterSetTests): 13 queryset = VRF.objects.all() 14 filterset = VRFFilterSet 15 16 @classmethod 17 def setUpTestData(cls): 18 19 route_targets = ( 20 RouteTarget(name='65000:1001'), 21 RouteTarget(name='65000:1002'), 22 RouteTarget(name='65000:1003'), 23 ) 24 RouteTarget.objects.bulk_create(route_targets) 25 26 tenant_groups = ( 27 TenantGroup(name='Tenant group 1', slug='tenant-group-1'), 28 TenantGroup(name='Tenant group 2', slug='tenant-group-2'), 29 TenantGroup(name='Tenant group 3', slug='tenant-group-3'), 30 ) 31 for tenantgroup in tenant_groups: 32 tenantgroup.save() 33 34 tenants = ( 35 Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]), 36 Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]), 37 Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]), 38 ) 39 Tenant.objects.bulk_create(tenants) 40 41 vrfs = ( 42 VRF(name='VRF 1', rd='65000:100', tenant=tenants[0], enforce_unique=False), 43 VRF(name='VRF 2', rd='65000:200', tenant=tenants[0], enforce_unique=False), 44 VRF(name='VRF 3', rd='65000:300', tenant=tenants[1], enforce_unique=False), 45 VRF(name='VRF 4', rd='65000:400', tenant=tenants[1], enforce_unique=True), 46 VRF(name='VRF 5', rd='65000:500', tenant=tenants[2], enforce_unique=True), 47 VRF(name='VRF 6', rd='65000:600', tenant=tenants[2], enforce_unique=True), 48 ) 49 VRF.objects.bulk_create(vrfs) 50 vrfs[0].import_targets.add(route_targets[0]) 51 vrfs[0].export_targets.add(route_targets[0]) 52 vrfs[1].import_targets.add(route_targets[1]) 53 vrfs[1].export_targets.add(route_targets[1]) 54 vrfs[2].import_targets.add(route_targets[2]) 55 vrfs[2].export_targets.add(route_targets[2]) 56 57 def test_name(self): 58 params = {'name': ['VRF 1', 'VRF 2']} 59 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 60 61 def test_rd(self): 62 params = {'rd': ['65000:100', '65000:200']} 63 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 64 65 def test_enforce_unique(self): 66 params = {'enforce_unique': 'true'} 67 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) 68 params = {'enforce_unique': 'false'} 69 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) 70 71 def test_import_target(self): 72 route_targets = RouteTarget.objects.all()[:2] 73 params = {'import_target_id': [route_targets[0].pk, route_targets[1].pk]} 74 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 75 params = {'import_target': [route_targets[0].name, route_targets[1].name]} 76 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 77 78 def test_export_target(self): 79 route_targets = RouteTarget.objects.all()[:2] 80 params = {'export_target_id': [route_targets[0].pk, route_targets[1].pk]} 81 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 82 params = {'export_target': [route_targets[0].name, route_targets[1].name]} 83 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 84 85 def test_tenant(self): 86 tenants = Tenant.objects.all()[:2] 87 params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} 88 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 89 params = {'tenant': [tenants[0].slug, tenants[1].slug]} 90 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 91 92 def test_tenant_group(self): 93 tenant_groups = TenantGroup.objects.all()[:2] 94 params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} 95 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 96 params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} 97 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 98 99 100class RouteTargetTestCase(TestCase, ChangeLoggedFilterSetTests): 101 queryset = RouteTarget.objects.all() 102 filterset = RouteTargetFilterSet 103 104 @classmethod 105 def setUpTestData(cls): 106 107 tenant_groups = ( 108 TenantGroup(name='Tenant group 1', slug='tenant-group-1'), 109 TenantGroup(name='Tenant group 2', slug='tenant-group-2'), 110 TenantGroup(name='Tenant group 3', slug='tenant-group-3'), 111 ) 112 for tenantgroup in tenant_groups: 113 tenantgroup.save() 114 115 tenants = ( 116 Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]), 117 Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]), 118 Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]), 119 ) 120 Tenant.objects.bulk_create(tenants) 121 122 route_targets = ( 123 RouteTarget(name='65000:1001', tenant=tenants[0]), 124 RouteTarget(name='65000:1002', tenant=tenants[0]), 125 RouteTarget(name='65000:1003', tenant=tenants[0]), 126 RouteTarget(name='65000:1004', tenant=tenants[0]), 127 RouteTarget(name='65000:2001', tenant=tenants[1]), 128 RouteTarget(name='65000:2002', tenant=tenants[1]), 129 RouteTarget(name='65000:2003', tenant=tenants[1]), 130 RouteTarget(name='65000:2004', tenant=tenants[1]), 131 RouteTarget(name='65000:3001', tenant=tenants[2]), 132 RouteTarget(name='65000:3002', tenant=tenants[2]), 133 RouteTarget(name='65000:3003', tenant=tenants[2]), 134 RouteTarget(name='65000:3004', tenant=tenants[2]), 135 ) 136 RouteTarget.objects.bulk_create(route_targets) 137 138 vrfs = ( 139 VRF(name='VRF 1', rd='65000:100'), 140 VRF(name='VRF 2', rd='65000:200'), 141 VRF(name='VRF 3', rd='65000:300'), 142 ) 143 VRF.objects.bulk_create(vrfs) 144 vrfs[0].import_targets.add(route_targets[0], route_targets[1]) 145 vrfs[0].export_targets.add(route_targets[2], route_targets[3]) 146 vrfs[1].import_targets.add(route_targets[4], route_targets[5]) 147 vrfs[1].export_targets.add(route_targets[6], route_targets[7]) 148 149 def test_name(self): 150 params = {'name': ['65000:1001', '65000:1002', '65000:1003']} 151 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) 152 153 def test_importing_vrf(self): 154 vrfs = VRF.objects.all()[:2] 155 params = {'importing_vrf_id': [vrfs[0].pk, vrfs[1].pk]} 156 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 157 params = {'importing_vrf': [vrfs[0].rd, vrfs[1].rd]} 158 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 159 160 def test_exporting_vrf(self): 161 vrfs = VRF.objects.all()[:2] 162 params = {'exporting_vrf_id': [vrfs[0].pk, vrfs[1].pk]} 163 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 164 params = {'exporting_vrf': [vrfs[0].rd, vrfs[1].rd]} 165 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 166 167 def test_tenant(self): 168 tenants = Tenant.objects.all()[:2] 169 params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} 170 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) 171 params = {'tenant': [tenants[0].slug, tenants[1].slug]} 172 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) 173 174 def test_tenant_group(self): 175 tenant_groups = TenantGroup.objects.all()[:2] 176 params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} 177 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) 178 params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} 179 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) 180 181 182class RIRTestCase(TestCase, ChangeLoggedFilterSetTests): 183 queryset = RIR.objects.all() 184 filterset = RIRFilterSet 185 186 @classmethod 187 def setUpTestData(cls): 188 189 rirs = ( 190 RIR(name='RIR 1', slug='rir-1', is_private=False, description='A'), 191 RIR(name='RIR 2', slug='rir-2', is_private=False, description='B'), 192 RIR(name='RIR 3', slug='rir-3', is_private=False, description='C'), 193 RIR(name='RIR 4', slug='rir-4', is_private=True, description='D'), 194 RIR(name='RIR 5', slug='rir-5', is_private=True, description='E'), 195 RIR(name='RIR 6', slug='rir-6', is_private=True, description='F'), 196 ) 197 RIR.objects.bulk_create(rirs) 198 199 def test_name(self): 200 params = {'name': ['RIR 1', 'RIR 2']} 201 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 202 203 def test_slug(self): 204 params = {'slug': ['rir-1', 'rir-2']} 205 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 206 207 def test_description(self): 208 params = {'description': ['A', 'B']} 209 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 210 211 def test_is_private(self): 212 params = {'is_private': 'true'} 213 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) 214 params = {'is_private': 'false'} 215 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) 216 217 218class AggregateTestCase(TestCase, ChangeLoggedFilterSetTests): 219 queryset = Aggregate.objects.all() 220 filterset = AggregateFilterSet 221 222 @classmethod 223 def setUpTestData(cls): 224 225 rirs = ( 226 RIR(name='RIR 1', slug='rir-1'), 227 RIR(name='RIR 2', slug='rir-2'), 228 RIR(name='RIR 3', slug='rir-3'), 229 ) 230 RIR.objects.bulk_create(rirs) 231 232 tenant_groups = ( 233 TenantGroup(name='Tenant group 1', slug='tenant-group-1'), 234 TenantGroup(name='Tenant group 2', slug='tenant-group-2'), 235 TenantGroup(name='Tenant group 3', slug='tenant-group-3'), 236 ) 237 for tenantgroup in tenant_groups: 238 tenantgroup.save() 239 240 tenants = ( 241 Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]), 242 Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]), 243 Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]), 244 ) 245 Tenant.objects.bulk_create(tenants) 246 247 aggregates = ( 248 Aggregate(prefix='10.1.0.0/16', rir=rirs[0], tenant=tenants[0], date_added='2020-01-01'), 249 Aggregate(prefix='10.2.0.0/16', rir=rirs[0], tenant=tenants[1], date_added='2020-01-02'), 250 Aggregate(prefix='10.3.0.0/16', rir=rirs[1], tenant=tenants[2], date_added='2020-01-03'), 251 Aggregate(prefix='2001:db8:1::/48', rir=rirs[1], tenant=tenants[0], date_added='2020-01-04'), 252 Aggregate(prefix='2001:db8:2::/48', rir=rirs[2], tenant=tenants[1], date_added='2020-01-05'), 253 Aggregate(prefix='2001:db8:3::/48', rir=rirs[2], tenant=tenants[2], date_added='2020-01-06'), 254 ) 255 Aggregate.objects.bulk_create(aggregates) 256 257 def test_family(self): 258 params = {'family': '4'} 259 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) 260 261 def test_date_added(self): 262 params = {'date_added': ['2020-01-01', '2020-01-02']} 263 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 264 265 # TODO: Test for multiple values 266 def test_prefix(self): 267 params = {'prefix': '10.1.0.0/16'} 268 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 269 270 def test_rir(self): 271 rirs = RIR.objects.all()[:2] 272 params = {'rir_id': [rirs[0].pk, rirs[1].pk]} 273 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 274 params = {'rir': [rirs[0].slug, rirs[1].slug]} 275 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 276 277 def test_tenant(self): 278 tenants = Tenant.objects.all()[:2] 279 params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} 280 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 281 params = {'tenant': [tenants[0].slug, tenants[1].slug]} 282 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 283 284 def test_tenant_group(self): 285 tenant_groups = TenantGroup.objects.all()[:2] 286 params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} 287 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 288 params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} 289 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 290 291 292class RoleTestCase(TestCase, ChangeLoggedFilterSetTests): 293 queryset = Role.objects.all() 294 filterset = RoleFilterSet 295 296 @classmethod 297 def setUpTestData(cls): 298 299 roles = ( 300 Role(name='Role 1', slug='role-1'), 301 Role(name='Role 2', slug='role-2'), 302 Role(name='Role 3', slug='role-3'), 303 ) 304 Role.objects.bulk_create(roles) 305 306 def test_name(self): 307 params = {'name': ['Role 1', 'Role 2']} 308 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 309 310 def test_slug(self): 311 params = {'slug': ['role-1', 'role-2']} 312 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 313 314 315class PrefixTestCase(TestCase, ChangeLoggedFilterSetTests): 316 queryset = Prefix.objects.all() 317 filterset = PrefixFilterSet 318 319 @classmethod 320 def setUpTestData(cls): 321 322 regions = ( 323 Region(name='Test Region 1', slug='test-region-1'), 324 Region(name='Test Region 2', slug='test-region-2'), 325 Region(name='Test Region 3', slug='test-region-3'), 326 ) 327 for r in regions: 328 r.save() 329 330 site_groups = ( 331 SiteGroup(name='Site Group 1', slug='site-group-1'), 332 SiteGroup(name='Site Group 2', slug='site-group-2'), 333 SiteGroup(name='Site Group 3', slug='site-group-3'), 334 ) 335 for site_group in site_groups: 336 site_group.save() 337 338 sites = ( 339 Site(name='Test Site 1', slug='test-site-1', region=regions[0], group=site_groups[0]), 340 Site(name='Test Site 2', slug='test-site-2', region=regions[1], group=site_groups[1]), 341 Site(name='Test Site 3', slug='test-site-3', region=regions[2], group=site_groups[2]), 342 ) 343 Site.objects.bulk_create(sites) 344 345 route_targets = ( 346 RouteTarget(name='65000:100'), 347 RouteTarget(name='65000:200'), 348 RouteTarget(name='65000:300'), 349 ) 350 RouteTarget.objects.bulk_create(route_targets) 351 352 vrfs = ( 353 VRF(name='VRF 1', rd='65000:100'), 354 VRF(name='VRF 2', rd='65000:200'), 355 VRF(name='VRF 3', rd='65000:300'), 356 ) 357 VRF.objects.bulk_create(vrfs) 358 vrfs[0].import_targets.add(route_targets[0], route_targets[1], route_targets[2]) 359 vrfs[1].export_targets.add(route_targets[1]) 360 vrfs[2].export_targets.add(route_targets[2]) 361 362 vlans = ( 363 VLAN(vid=1, name='VLAN 1'), 364 VLAN(vid=2, name='VLAN 2'), 365 VLAN(vid=3, name='VLAN 3'), 366 ) 367 VLAN.objects.bulk_create(vlans) 368 369 roles = ( 370 Role(name='Role 1', slug='role-1'), 371 Role(name='Role 2', slug='role-2'), 372 Role(name='Role 3', slug='role-3'), 373 ) 374 Role.objects.bulk_create(roles) 375 376 tenant_groups = ( 377 TenantGroup(name='Tenant group 1', slug='tenant-group-1'), 378 TenantGroup(name='Tenant group 2', slug='tenant-group-2'), 379 TenantGroup(name='Tenant group 3', slug='tenant-group-3'), 380 ) 381 for tenantgroup in tenant_groups: 382 tenantgroup.save() 383 384 tenants = ( 385 Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]), 386 Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]), 387 Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]), 388 ) 389 Tenant.objects.bulk_create(tenants) 390 391 prefixes = ( 392 Prefix(prefix='10.0.0.0/24', tenant=None, site=None, vrf=None, vlan=None, role=None, is_pool=True, mark_utilized=True), 393 Prefix(prefix='10.0.1.0/24', tenant=tenants[0], site=sites[0], vrf=vrfs[0], vlan=vlans[0], role=roles[0]), 394 Prefix(prefix='10.0.2.0/24', tenant=tenants[1], site=sites[1], vrf=vrfs[1], vlan=vlans[1], role=roles[1], status=PrefixStatusChoices.STATUS_DEPRECATED), 395 Prefix(prefix='10.0.3.0/24', tenant=tenants[2], site=sites[2], vrf=vrfs[2], vlan=vlans[2], role=roles[2], status=PrefixStatusChoices.STATUS_RESERVED), 396 Prefix(prefix='2001:db8::/64', tenant=None, site=None, vrf=None, vlan=None, role=None, is_pool=True, mark_utilized=True), 397 Prefix(prefix='2001:db8:0:1::/64', tenant=tenants[0], site=sites[0], vrf=vrfs[0], vlan=vlans[0], role=roles[0]), 398 Prefix(prefix='2001:db8:0:2::/64', tenant=tenants[1], site=sites[1], vrf=vrfs[1], vlan=vlans[1], role=roles[1], status=PrefixStatusChoices.STATUS_DEPRECATED), 399 Prefix(prefix='2001:db8:0:3::/64', tenant=tenants[2], site=sites[2], vrf=vrfs[2], vlan=vlans[2], role=roles[2], status=PrefixStatusChoices.STATUS_RESERVED), 400 Prefix(prefix='10.0.0.0/16'), 401 Prefix(prefix='2001:db8::/32'), 402 ) 403 for prefix in prefixes: 404 prefix.save() 405 406 def test_family(self): 407 params = {'family': '6'} 408 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) 409 410 def test_prefix(self): 411 prefixes = Prefix.objects.all()[:2] 412 params = {'prefix': [prefixes[0].prefix, prefixes[1].prefix]} 413 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 414 415 def test_is_pool(self): 416 params = {'is_pool': 'true'} 417 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 418 params = {'is_pool': 'false'} 419 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) 420 421 def test_mark_utilized(self): 422 params = {'mark_utilized': 'true'} 423 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 424 params = {'mark_utilized': 'false'} 425 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) 426 427 def test_within(self): 428 params = {'within': '10.0.0.0/16'} 429 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 430 431 def test_within_include(self): 432 params = {'within_include': '10.0.0.0/16'} 433 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) 434 435 def test_contains(self): 436 params = {'contains': '10.0.1.0/24'} 437 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 438 params = {'contains': '2001:db8:0:1::/64'} 439 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 440 441 def test_depth(self): 442 params = {'depth': '0'} 443 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) 444 params = {'depth__gt': '0'} 445 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 446 447 def test_children(self): 448 params = {'children': '0'} 449 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8) 450 params = {'children__gt': '0'} 451 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 452 453 def test_mask_length(self): 454 params = {'mask_length': ['24']} 455 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 456 457 def test_vrf(self): 458 vrfs = VRF.objects.all()[:2] 459 params = {'vrf_id': [vrfs[0].pk, vrfs[1].pk]} 460 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 461 params = {'vrf': [vrfs[0].rd, vrfs[1].rd]} 462 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 463 464 def test_present_in_vrf(self): 465 vrf1 = VRF.objects.get(name='VRF 1') 466 vrf2 = VRF.objects.get(name='VRF 2') 467 self.assertEqual(self.filterset({'present_in_vrf_id': vrf1.pk}, self.queryset).qs.count(), 6) 468 self.assertEqual(self.filterset({'present_in_vrf_id': vrf2.pk}, self.queryset).qs.count(), 2) 469 self.assertEqual(self.filterset({'present_in_vrf': vrf1.rd}, self.queryset).qs.count(), 6) 470 self.assertEqual(self.filterset({'present_in_vrf': vrf2.rd}, self.queryset).qs.count(), 2) 471 472 def test_region(self): 473 regions = Region.objects.all()[:2] 474 params = {'region_id': [regions[0].pk, regions[1].pk]} 475 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 476 params = {'region': [regions[0].slug, regions[1].slug]} 477 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 478 479 def test_site_group(self): 480 site_groups = SiteGroup.objects.all()[:2] 481 params = {'site_group_id': [site_groups[0].pk, site_groups[1].pk]} 482 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 483 params = {'site_group': [site_groups[0].slug, site_groups[1].slug]} 484 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 485 486 def test_site(self): 487 sites = Site.objects.all()[:2] 488 params = {'site_id': [sites[0].pk, sites[1].pk]} 489 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 490 params = {'site': [sites[0].slug, sites[1].slug]} 491 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 492 493 def test_vlan(self): 494 vlans = VLAN.objects.all()[:2] 495 params = {'vlan_id': [vlans[0].pk, vlans[1].pk]} 496 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 497 # TODO: Test for multiple values 498 params = {'vlan_vid': vlans[0].vid} 499 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 500 501 def test_role(self): 502 roles = Role.objects.all()[:2] 503 params = {'role_id': [roles[0].pk, roles[1].pk]} 504 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 505 params = {'role': [roles[0].slug, roles[1].slug]} 506 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 507 508 def test_status(self): 509 params = {'status': [PrefixStatusChoices.STATUS_DEPRECATED, PrefixStatusChoices.STATUS_RESERVED]} 510 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 511 512 def test_tenant(self): 513 tenants = Tenant.objects.all()[:2] 514 params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} 515 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 516 params = {'tenant': [tenants[0].slug, tenants[1].slug]} 517 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 518 519 def test_tenant_group(self): 520 tenant_groups = TenantGroup.objects.all()[:2] 521 params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} 522 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 523 params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} 524 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 525 526 527class IPRangeTestCase(TestCase, ChangeLoggedFilterSetTests): 528 queryset = IPRange.objects.all() 529 filterset = IPRangeFilterSet 530 531 @classmethod 532 def setUpTestData(cls): 533 534 vrfs = ( 535 VRF(name='VRF 1', rd='65000:100'), 536 VRF(name='VRF 2', rd='65000:200'), 537 VRF(name='VRF 3', rd='65000:300'), 538 ) 539 VRF.objects.bulk_create(vrfs) 540 541 roles = ( 542 Role(name='Role 1', slug='role-1'), 543 Role(name='Role 2', slug='role-2'), 544 Role(name='Role 3', slug='role-3'), 545 ) 546 Role.objects.bulk_create(roles) 547 548 tenant_groups = ( 549 TenantGroup(name='Tenant group 1', slug='tenant-group-1'), 550 TenantGroup(name='Tenant group 2', slug='tenant-group-2'), 551 TenantGroup(name='Tenant group 3', slug='tenant-group-3'), 552 ) 553 for tenantgroup in tenant_groups: 554 tenantgroup.save() 555 556 tenants = ( 557 Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]), 558 Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]), 559 Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]), 560 ) 561 Tenant.objects.bulk_create(tenants) 562 563 ip_ranges = ( 564 IPRange(start_address='10.0.1.100/24', end_address='10.0.1.199/24', size=100, vrf=None, tenant=None, role=None, status=IPRangeStatusChoices.STATUS_ACTIVE), 565 IPRange(start_address='10.0.2.100/24', end_address='10.0.2.199/24', size=100, vrf=vrfs[0], tenant=tenants[0], role=roles[0], status=IPRangeStatusChoices.STATUS_ACTIVE), 566 IPRange(start_address='10.0.3.100/24', end_address='10.0.3.199/24', size=100, vrf=vrfs[1], tenant=tenants[1], role=roles[1], status=IPRangeStatusChoices.STATUS_DEPRECATED), 567 IPRange(start_address='10.0.4.100/24', end_address='10.0.4.199/24', size=100, vrf=vrfs[2], tenant=tenants[2], role=roles[2], status=IPRangeStatusChoices.STATUS_RESERVED), 568 IPRange(start_address='2001:db8:0:1::1/64', end_address='2001:db8:0:1::100/64', size=100, vrf=None, tenant=None, role=None, status=IPRangeStatusChoices.STATUS_ACTIVE), 569 IPRange(start_address='2001:db8:0:2::1/64', end_address='2001:db8:0:2::100/64', size=100, vrf=vrfs[0], tenant=tenants[0], role=roles[0], status=IPRangeStatusChoices.STATUS_ACTIVE), 570 IPRange(start_address='2001:db8:0:3::1/64', end_address='2001:db8:0:3::100/64', size=100, vrf=vrfs[1], tenant=tenants[1], role=roles[1], status=IPRangeStatusChoices.STATUS_DEPRECATED), 571 IPRange(start_address='2001:db8:0:4::1/64', end_address='2001:db8:0:4::100/64', size=100, vrf=vrfs[2], tenant=tenants[2], role=roles[2], status=IPRangeStatusChoices.STATUS_RESERVED), 572 ) 573 IPRange.objects.bulk_create(ip_ranges) 574 575 def test_family(self): 576 params = {'family': '6'} 577 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 578 579 def test_contains(self): 580 params = {'contains': '10.0.1.150/24'} 581 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 582 params = {'contains': '2001:db8:0:1::50/64'} 583 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 584 585 def test_vrf(self): 586 vrfs = VRF.objects.all()[:2] 587 params = {'vrf_id': [vrfs[0].pk, vrfs[1].pk]} 588 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 589 params = {'vrf': [vrfs[0].rd, vrfs[1].rd]} 590 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 591 592 def test_role(self): 593 roles = Role.objects.all()[:2] 594 params = {'role_id': [roles[0].pk, roles[1].pk]} 595 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 596 params = {'role': [roles[0].slug, roles[1].slug]} 597 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 598 599 def test_status(self): 600 params = {'status': [PrefixStatusChoices.STATUS_DEPRECATED, PrefixStatusChoices.STATUS_RESERVED]} 601 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 602 603 def test_tenant(self): 604 tenants = Tenant.objects.all()[:2] 605 params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} 606 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 607 params = {'tenant': [tenants[0].slug, tenants[1].slug]} 608 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 609 610 def test_tenant_group(self): 611 tenant_groups = TenantGroup.objects.all()[:2] 612 params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} 613 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 614 params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} 615 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 616 617 618class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests): 619 queryset = IPAddress.objects.all() 620 filterset = IPAddressFilterSet 621 622 @classmethod 623 def setUpTestData(cls): 624 625 vrfs = ( 626 VRF(name='VRF 1', rd='65000:100'), 627 VRF(name='VRF 2', rd='65000:200'), 628 VRF(name='VRF 3', rd='65000:300'), 629 ) 630 VRF.objects.bulk_create(vrfs) 631 632 site = Site.objects.create(name='Site 1', slug='site-1') 633 manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') 634 device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1') 635 device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') 636 637 devices = ( 638 Device(device_type=device_type, name='Device 1', site=site, device_role=device_role), 639 Device(device_type=device_type, name='Device 2', site=site, device_role=device_role), 640 Device(device_type=device_type, name='Device 3', site=site, device_role=device_role), 641 ) 642 Device.objects.bulk_create(devices) 643 644 interfaces = ( 645 Interface(device=devices[0], name='Interface 1'), 646 Interface(device=devices[1], name='Interface 2'), 647 Interface(device=devices[2], name='Interface 3'), 648 ) 649 Interface.objects.bulk_create(interfaces) 650 651 clustertype = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1') 652 cluster = Cluster.objects.create(type=clustertype, name='Cluster 1') 653 654 virtual_machines = ( 655 VirtualMachine(name='Virtual Machine 1', cluster=cluster), 656 VirtualMachine(name='Virtual Machine 2', cluster=cluster), 657 VirtualMachine(name='Virtual Machine 3', cluster=cluster), 658 ) 659 VirtualMachine.objects.bulk_create(virtual_machines) 660 661 vminterfaces = ( 662 VMInterface(virtual_machine=virtual_machines[0], name='Interface 1'), 663 VMInterface(virtual_machine=virtual_machines[1], name='Interface 2'), 664 VMInterface(virtual_machine=virtual_machines[2], name='Interface 3'), 665 ) 666 VMInterface.objects.bulk_create(vminterfaces) 667 668 tenant_groups = ( 669 TenantGroup(name='Tenant group 1', slug='tenant-group-1'), 670 TenantGroup(name='Tenant group 2', slug='tenant-group-2'), 671 TenantGroup(name='Tenant group 3', slug='tenant-group-3'), 672 ) 673 for tenantgroup in tenant_groups: 674 tenantgroup.save() 675 676 tenants = ( 677 Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]), 678 Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]), 679 Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]), 680 ) 681 Tenant.objects.bulk_create(tenants) 682 683 ipaddresses = ( 684 IPAddress(address='10.0.0.1/24', tenant=None, vrf=None, assigned_object=None, status=IPAddressStatusChoices.STATUS_ACTIVE, dns_name='ipaddress-a', description='foobar1'), 685 IPAddress(address='10.0.0.2/24', tenant=tenants[0], vrf=vrfs[0], assigned_object=interfaces[0], status=IPAddressStatusChoices.STATUS_ACTIVE, dns_name='ipaddress-b'), 686 IPAddress(address='10.0.0.3/24', tenant=tenants[1], vrf=vrfs[1], assigned_object=interfaces[1], status=IPAddressStatusChoices.STATUS_RESERVED, role=IPAddressRoleChoices.ROLE_VIP, dns_name='ipaddress-c'), 687 IPAddress(address='10.0.0.4/24', tenant=tenants[2], vrf=vrfs[2], assigned_object=interfaces[2], status=IPAddressStatusChoices.STATUS_DEPRECATED, role=IPAddressRoleChoices.ROLE_SECONDARY, dns_name='ipaddress-d'), 688 IPAddress(address='10.0.0.1/25', tenant=None, vrf=None, assigned_object=None, status=IPAddressStatusChoices.STATUS_ACTIVE), 689 IPAddress(address='2001:db8::1/64', tenant=None, vrf=None, assigned_object=None, status=IPAddressStatusChoices.STATUS_ACTIVE, dns_name='ipaddress-a', description='foobar2'), 690 IPAddress(address='2001:db8::2/64', tenant=tenants[0], vrf=vrfs[0], assigned_object=vminterfaces[0], status=IPAddressStatusChoices.STATUS_ACTIVE, dns_name='ipaddress-b'), 691 IPAddress(address='2001:db8::3/64', tenant=tenants[1], vrf=vrfs[1], assigned_object=vminterfaces[1], status=IPAddressStatusChoices.STATUS_RESERVED, role=IPAddressRoleChoices.ROLE_VIP, dns_name='ipaddress-c'), 692 IPAddress(address='2001:db8::4/64', tenant=tenants[2], vrf=vrfs[2], assigned_object=vminterfaces[2], status=IPAddressStatusChoices.STATUS_DEPRECATED, role=IPAddressRoleChoices.ROLE_SECONDARY, dns_name='ipaddress-d'), 693 IPAddress(address='2001:db8::1/65', tenant=None, vrf=None, assigned_object=None, status=IPAddressStatusChoices.STATUS_ACTIVE), 694 ) 695 IPAddress.objects.bulk_create(ipaddresses) 696 697 def test_family(self): 698 params = {'family': '6'} 699 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) 700 701 def test_dns_name(self): 702 params = {'dns_name': ['ipaddress-a', 'ipaddress-b']} 703 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 704 705 def test_description(self): 706 params = {'description': ['foobar1', 'foobar2']} 707 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 708 709 def test_parent(self): 710 params = {'parent': '10.0.0.0/24'} 711 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) 712 params = {'parent': '2001:db8::/64'} 713 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) 714 715 def test_filter_address(self): 716 # Check IPv4 and IPv6, with and without a mask 717 params = {'address': ['10.0.0.1/24']} 718 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 719 params = {'address': ['10.0.0.1']} 720 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 721 params = {'address': ['10.0.0.1/24', '10.0.0.1/25']} 722 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 723 params = {'address': ['2001:db8::1/64']} 724 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 725 params = {'address': ['2001:db8::1']} 726 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 727 params = {'address': ['2001:db8::1/64', '2001:db8::1/65']} 728 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 729 730 def test_mask_length(self): 731 params = {'mask_length': '24'} 732 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 733 734 def test_vrf(self): 735 vrfs = VRF.objects.all()[:2] 736 params = {'vrf_id': [vrfs[0].pk, vrfs[1].pk]} 737 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 738 params = {'vrf': [vrfs[0].rd, vrfs[1].rd]} 739 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 740 741 def test_device(self): 742 devices = Device.objects.all()[:2] 743 params = {'device_id': [devices[0].pk, devices[1].pk]} 744 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 745 params = {'device': [devices[0].name, devices[1].name]} 746 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 747 748 def test_virtual_machine(self): 749 vms = VirtualMachine.objects.all()[:2] 750 params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]} 751 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 752 params = {'virtual_machine': [vms[0].name, vms[1].name]} 753 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 754 755 def test_interface(self): 756 interfaces = Interface.objects.all()[:2] 757 params = {'interface_id': [interfaces[0].pk, interfaces[1].pk]} 758 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 759 params = {'interface': ['Interface 1', 'Interface 2']} 760 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 761 762 def test_vminterface(self): 763 vminterfaces = VMInterface.objects.all()[:2] 764 params = {'vminterface_id': [vminterfaces[0].pk, vminterfaces[1].pk]} 765 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 766 params = {'vminterface': ['Interface 1', 'Interface 2']} 767 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 768 769 def test_assigned_to_interface(self): 770 params = {'assigned_to_interface': 'true'} 771 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6) 772 params = {'assigned_to_interface': 'false'} 773 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 774 775 def test_status(self): 776 params = {'status': [PrefixStatusChoices.STATUS_DEPRECATED, PrefixStatusChoices.STATUS_RESERVED]} 777 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 778 779 def test_role(self): 780 params = {'role': [IPAddressRoleChoices.ROLE_SECONDARY, IPAddressRoleChoices.ROLE_VIP]} 781 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 782 783 def test_tenant(self): 784 tenants = Tenant.objects.all()[:2] 785 params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} 786 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 787 params = {'tenant': [tenants[0].slug, tenants[1].slug]} 788 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 789 790 def test_tenant_group(self): 791 tenant_groups = TenantGroup.objects.all()[:2] 792 params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} 793 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 794 params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} 795 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 796 797 798class VLANGroupTestCase(TestCase, ChangeLoggedFilterSetTests): 799 queryset = VLANGroup.objects.all() 800 filterset = VLANGroupFilterSet 801 802 @classmethod 803 def setUpTestData(cls): 804 805 region = Region(name='Region 1', slug='region-1') 806 region.save() 807 808 sitegroup = SiteGroup(name='Site Group 1', slug='site-group-1') 809 sitegroup.save() 810 811 site = Site(name='Site 1', slug='site-1') 812 site.save() 813 814 location = Location(name='Location 1', slug='location-1', site=site) 815 location.save() 816 817 rack = Rack(name='Rack 1', site=site) 818 rack.save() 819 820 clustertype = ClusterType(name='Cluster Type 1', slug='cluster-type-1') 821 clustertype.save() 822 823 clustergroup = ClusterGroup(name='Cluster Group 1', slug='cluster-group-1') 824 clustergroup.save() 825 826 cluster = Cluster(name='Cluster 1', type=clustertype) 827 cluster.save() 828 829 vlan_groups = ( 830 VLANGroup(name='VLAN Group 1', slug='vlan-group-1', scope=region, description='A'), 831 VLANGroup(name='VLAN Group 2', slug='vlan-group-2', scope=sitegroup, description='B'), 832 VLANGroup(name='VLAN Group 3', slug='vlan-group-3', scope=site, description='C'), 833 VLANGroup(name='VLAN Group 4', slug='vlan-group-4', scope=location, description='D'), 834 VLANGroup(name='VLAN Group 5', slug='vlan-group-5', scope=rack, description='E'), 835 VLANGroup(name='VLAN Group 6', slug='vlan-group-6', scope=clustergroup, description='F'), 836 VLANGroup(name='VLAN Group 7', slug='vlan-group-7', scope=cluster, description='G'), 837 VLANGroup(name='VLAN Group 8', slug='vlan-group-8'), 838 ) 839 VLANGroup.objects.bulk_create(vlan_groups) 840 841 def test_name(self): 842 params = {'name': ['VLAN Group 1', 'VLAN Group 2']} 843 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 844 845 def test_slug(self): 846 params = {'slug': ['vlan-group-1', 'vlan-group-2']} 847 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 848 849 def test_description(self): 850 params = {'description': ['A', 'B']} 851 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 852 853 def test_region(self): 854 params = {'region': Region.objects.first().pk} 855 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 856 857 def test_sitegroup(self): 858 params = {'sitegroup': SiteGroup.objects.first().pk} 859 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 860 861 def test_site(self): 862 params = {'site': Site.objects.first().pk} 863 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 864 865 def test_location(self): 866 params = {'location': Location.objects.first().pk} 867 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 868 869 def test_rack(self): 870 params = {'rack': Rack.objects.first().pk} 871 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 872 873 def test_clustergroup(self): 874 params = {'clustergroup': ClusterGroup.objects.first().pk} 875 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 876 877 def test_cluster(self): 878 params = {'cluster': Cluster.objects.first().pk} 879 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 880 881 882class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): 883 queryset = VLAN.objects.all() 884 filterset = VLANFilterSet 885 886 @classmethod 887 def setUpTestData(cls): 888 889 regions = ( 890 Region(name='Test Region 1', slug='test-region-1'), 891 Region(name='Test Region 2', slug='test-region-2'), 892 Region(name='Test Region 3', slug='test-region-3'), 893 ) 894 for r in regions: 895 r.save() 896 897 site_groups = ( 898 SiteGroup(name='Site Group 1', slug='site-group-1'), 899 SiteGroup(name='Site Group 2', slug='site-group-2'), 900 SiteGroup(name='Site Group 3', slug='site-group-3'), 901 ) 902 for site_group in site_groups: 903 site_group.save() 904 905 sites = ( 906 Site(name='Site 1', slug='site-1', region=regions[0], group=site_groups[0]), 907 Site(name='Site 2', slug='site-2', region=regions[1], group=site_groups[1]), 908 Site(name='Site 3', slug='site-3', region=regions[2], group=site_groups[2]), 909 Site(name='Site 4', slug='site-4', region=regions[0], group=site_groups[0]), 910 Site(name='Site 5', slug='site-5', region=regions[1], group=site_groups[1]), 911 Site(name='Site 6', slug='site-6', region=regions[2], group=site_groups[2]), 912 ) 913 Site.objects.bulk_create(sites) 914 915 locations = ( 916 Location(name='Location 1', slug='location-1', site=sites[0]), 917 Location(name='Location 2', slug='location-2', site=sites[1]), 918 Location(name='Location 3', slug='location-3', site=sites[2]), 919 ) 920 for location in locations: 921 location.save() 922 923 racks = ( 924 Rack(name='Rack 1', site=sites[0], location=locations[0]), 925 Rack(name='Rack 2', site=sites[1], location=locations[1]), 926 Rack(name='Rack 3', site=sites[2], location=locations[2]), 927 ) 928 Rack.objects.bulk_create(racks) 929 930 manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') 931 device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1') 932 device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') 933 devices = ( 934 Device(name='Device 1', site=sites[0], location=locations[0], rack=racks[0], device_type=device_type, device_role=device_role), 935 Device(name='Device 2', site=sites[1], location=locations[1], rack=racks[1], device_type=device_type, device_role=device_role), 936 Device(name='Device 3', site=sites[2], location=locations[2], rack=racks[2], device_type=device_type, device_role=device_role), 937 ) 938 Device.objects.bulk_create(devices) 939 940 cluster_groups = ( 941 ClusterGroup(name='Cluster Group 1', slug='cluster-group-1'), 942 ClusterGroup(name='Cluster Group 2', slug='cluster-group-2'), 943 ClusterGroup(name='Cluster Group 3', slug='cluster-group-3'), 944 ) 945 ClusterGroup.objects.bulk_create(cluster_groups) 946 947 cluster_type = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1') 948 clusters = ( 949 Cluster(name='Cluster 1', type=cluster_type, group=cluster_groups[0], site=sites[0]), 950 Cluster(name='Cluster 2', type=cluster_type, group=cluster_groups[1], site=sites[1]), 951 Cluster(name='Cluster 3', type=cluster_type, group=cluster_groups[2], site=sites[2]), 952 ) 953 Cluster.objects.bulk_create(clusters) 954 955 virtual_machines = ( 956 VirtualMachine(name='Virtual Machine 1', cluster=clusters[0]), 957 VirtualMachine(name='Virtual Machine 2', cluster=clusters[1]), 958 VirtualMachine(name='Virtual Machine 3', cluster=clusters[2]), 959 ) 960 VirtualMachine.objects.bulk_create(virtual_machines) 961 962 groups = ( 963 # Scoped VLAN groups 964 VLANGroup(name='Region 1', slug='region-1', scope=regions[0]), 965 VLANGroup(name='Region 2', slug='region-2', scope=regions[1]), 966 VLANGroup(name='Region 3', slug='region-3', scope=regions[2]), 967 VLANGroup(name='Site Group 1', slug='site-group-1', scope=site_groups[0]), 968 VLANGroup(name='Site Group 2', slug='site-group-2', scope=site_groups[1]), 969 VLANGroup(name='Site Group 3', slug='site-group-3', scope=site_groups[2]), 970 VLANGroup(name='Site 1', slug='site-1', scope=sites[0]), 971 VLANGroup(name='Site 2', slug='site-2', scope=sites[1]), 972 VLANGroup(name='Site 3', slug='site-3', scope=sites[2]), 973 VLANGroup(name='Location 1', slug='location-1', scope=locations[0]), 974 VLANGroup(name='Location 2', slug='location-2', scope=locations[1]), 975 VLANGroup(name='Location 3', slug='location-3', scope=locations[2]), 976 VLANGroup(name='Rack 1', slug='rack-1', scope=racks[0]), 977 VLANGroup(name='Rack 2', slug='rack-2', scope=racks[1]), 978 VLANGroup(name='Rack 3', slug='rack-3', scope=racks[2]), 979 VLANGroup(name='Cluster Group 1', slug='cluster-group-1', scope=cluster_groups[0]), 980 VLANGroup(name='Cluster Group 2', slug='cluster-group-2', scope=cluster_groups[1]), 981 VLANGroup(name='Cluster Group 3', slug='cluster-group-3', scope=cluster_groups[2]), 982 VLANGroup(name='Cluster 1', slug='cluster-1', scope=clusters[0]), 983 VLANGroup(name='Cluster 2', slug='cluster-2', scope=clusters[1]), 984 VLANGroup(name='Cluster 3', slug='cluster-3', scope=clusters[2]), 985 986 # General purpose VLAN groups 987 VLANGroup(name='VLAN Group 1', slug='vlan-group-1'), 988 VLANGroup(name='VLAN Group 2', slug='vlan-group-2'), 989 VLANGroup(name='VLAN Group 3', slug='vlan-group-3'), 990 ) 991 VLANGroup.objects.bulk_create(groups) 992 993 roles = ( 994 Role(name='Role 1', slug='role-1'), 995 Role(name='Role 2', slug='role-2'), 996 Role(name='Role 3', slug='role-3'), 997 ) 998 Role.objects.bulk_create(roles) 999 1000 tenant_groups = ( 1001 TenantGroup(name='Tenant group 1', slug='tenant-group-1'), 1002 TenantGroup(name='Tenant group 2', slug='tenant-group-2'), 1003 TenantGroup(name='Tenant group 3', slug='tenant-group-3'), 1004 ) 1005 for tenantgroup in tenant_groups: 1006 tenantgroup.save() 1007 1008 tenants = ( 1009 Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]), 1010 Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]), 1011 Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]), 1012 ) 1013 Tenant.objects.bulk_create(tenants) 1014 1015 vlans = ( 1016 # Create one VLAN per VLANGroup 1017 VLAN(vid=1, name='Region 1', group=groups[0]), 1018 VLAN(vid=2, name='Region 2', group=groups[1]), 1019 VLAN(vid=3, name='Region 3', group=groups[2]), 1020 VLAN(vid=4, name='Site Group 1', group=groups[3]), 1021 VLAN(vid=5, name='Site Group 2', group=groups[4]), 1022 VLAN(vid=6, name='Site Group 3', group=groups[5]), 1023 VLAN(vid=7, name='Site 1', group=groups[6]), 1024 VLAN(vid=8, name='Site 2', group=groups[7]), 1025 VLAN(vid=9, name='Site 3', group=groups[8]), 1026 VLAN(vid=10, name='Location 1', group=groups[9]), 1027 VLAN(vid=11, name='Location 2', group=groups[10]), 1028 VLAN(vid=12, name='Location 3', group=groups[11]), 1029 VLAN(vid=13, name='Rack 1', group=groups[12]), 1030 VLAN(vid=14, name='Rack 2', group=groups[13]), 1031 VLAN(vid=15, name='Rack 3', group=groups[14]), 1032 VLAN(vid=16, name='Cluster Group 1', group=groups[15]), 1033 VLAN(vid=17, name='Cluster Group 2', group=groups[16]), 1034 VLAN(vid=18, name='Cluster Group 3', group=groups[17]), 1035 VLAN(vid=19, name='Cluster 1', group=groups[18]), 1036 VLAN(vid=20, name='Cluster 2', group=groups[19]), 1037 VLAN(vid=21, name='Cluster 3', group=groups[20]), 1038 1039 VLAN(vid=101, name='VLAN 101', site=sites[3], group=groups[21], role=roles[0], tenant=tenants[0], status=VLANStatusChoices.STATUS_ACTIVE), 1040 VLAN(vid=102, name='VLAN 102', site=sites[3], group=groups[21], role=roles[0], tenant=tenants[0], status=VLANStatusChoices.STATUS_ACTIVE), 1041 VLAN(vid=201, name='VLAN 201', site=sites[4], group=groups[22], role=roles[1], tenant=tenants[1], status=VLANStatusChoices.STATUS_DEPRECATED), 1042 VLAN(vid=202, name='VLAN 202', site=sites[4], group=groups[22], role=roles[1], tenant=tenants[1], status=VLANStatusChoices.STATUS_DEPRECATED), 1043 VLAN(vid=301, name='VLAN 301', site=sites[5], group=groups[23], role=roles[2], tenant=tenants[2], status=VLANStatusChoices.STATUS_RESERVED), 1044 VLAN(vid=302, name='VLAN 302', site=sites[5], group=groups[23], role=roles[2], tenant=tenants[2], status=VLANStatusChoices.STATUS_RESERVED), 1045 1046 # Create one globally available VLAN 1047 VLAN(vid=1000, name='Global VLAN'), 1048 ) 1049 VLAN.objects.bulk_create(vlans) 1050 1051 def test_name(self): 1052 params = {'name': ['VLAN 101', 'VLAN 102']} 1053 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 1054 1055 def test_vid(self): 1056 params = {'vid': ['101', '201', '301']} 1057 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) 1058 1059 def test_region(self): 1060 regions = Region.objects.all()[:2] 1061 params = {'region_id': [regions[0].pk, regions[1].pk]} 1062 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1063 params = {'region': [regions[0].slug, regions[1].slug]} 1064 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1065 1066 def test_site_group(self): 1067 site_groups = SiteGroup.objects.all()[:2] 1068 params = {'site_group_id': [site_groups[0].pk, site_groups[1].pk]} 1069 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1070 params = {'site_group': [site_groups[0].slug, site_groups[1].slug]} 1071 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1072 1073 def test_site(self): 1074 sites = Site.objects.all() 1075 params = {'site_id': [sites[3].pk, sites[4].pk]} 1076 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1077 params = {'site': [sites[3].slug, sites[4].slug]} 1078 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1079 1080 def test_group(self): 1081 groups = VLANGroup.objects.filter(name__startswith='VLAN Group')[:2] 1082 params = {'group_id': [groups[0].pk, groups[1].pk]} 1083 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1084 params = {'group': [groups[0].slug, groups[1].slug]} 1085 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1086 1087 def test_role(self): 1088 roles = Role.objects.all()[:2] 1089 params = {'role_id': [roles[0].pk, roles[1].pk]} 1090 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1091 params = {'role': [roles[0].slug, roles[1].slug]} 1092 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1093 1094 def test_status(self): 1095 params = {'status': [VLANStatusChoices.STATUS_DEPRECATED, VLANStatusChoices.STATUS_RESERVED]} 1096 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1097 1098 def test_tenant(self): 1099 tenants = Tenant.objects.all()[:2] 1100 params = {'tenant_id': [tenants[0].pk, tenants[1].pk]} 1101 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1102 params = {'tenant': [tenants[0].slug, tenants[1].slug]} 1103 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1104 1105 def test_tenant_group(self): 1106 tenant_groups = TenantGroup.objects.all()[:2] 1107 params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} 1108 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1109 params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} 1110 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1111 1112 def test_available_on_device(self): 1113 device_id = Device.objects.first().pk 1114 params = {'available_on_device': device_id} 1115 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6) # 5 scoped + 1 global 1116 1117 def test_available_on_virtualmachine(self): 1118 vm_id = VirtualMachine.objects.first().pk 1119 params = {'available_on_virtualmachine': vm_id} 1120 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6) # 5 scoped + 1 global 1121 1122 1123class ServiceTestCase(TestCase, ChangeLoggedFilterSetTests): 1124 queryset = Service.objects.all() 1125 filterset = ServiceFilterSet 1126 1127 @classmethod 1128 def setUpTestData(cls): 1129 1130 site = Site.objects.create(name='Site 1', slug='site-1') 1131 manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') 1132 device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1') 1133 device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') 1134 1135 devices = ( 1136 Device(device_type=device_type, name='Device 1', site=site, device_role=device_role), 1137 Device(device_type=device_type, name='Device 2', site=site, device_role=device_role), 1138 Device(device_type=device_type, name='Device 3', site=site, device_role=device_role), 1139 ) 1140 Device.objects.bulk_create(devices) 1141 1142 clustertype = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1') 1143 cluster = Cluster.objects.create(type=clustertype, name='Cluster 1') 1144 1145 virtual_machines = ( 1146 VirtualMachine(name='Virtual Machine 1', cluster=cluster), 1147 VirtualMachine(name='Virtual Machine 2', cluster=cluster), 1148 VirtualMachine(name='Virtual Machine 3', cluster=cluster), 1149 ) 1150 VirtualMachine.objects.bulk_create(virtual_machines) 1151 1152 services = ( 1153 Service(device=devices[0], name='Service 1', protocol=ServiceProtocolChoices.PROTOCOL_TCP, ports=[1001]), 1154 Service(device=devices[1], name='Service 2', protocol=ServiceProtocolChoices.PROTOCOL_TCP, ports=[1002]), 1155 Service(device=devices[2], name='Service 3', protocol=ServiceProtocolChoices.PROTOCOL_UDP, ports=[1003]), 1156 Service(virtual_machine=virtual_machines[0], name='Service 4', protocol=ServiceProtocolChoices.PROTOCOL_TCP, ports=[2001]), 1157 Service(virtual_machine=virtual_machines[1], name='Service 5', protocol=ServiceProtocolChoices.PROTOCOL_TCP, ports=[2002]), 1158 Service(virtual_machine=virtual_machines[2], name='Service 6', protocol=ServiceProtocolChoices.PROTOCOL_UDP, ports=[2003]), 1159 ) 1160 Service.objects.bulk_create(services) 1161 1162 def test_name(self): 1163 params = {'name': ['Service 1', 'Service 2']} 1164 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 1165 1166 def test_protocol(self): 1167 params = {'protocol': ServiceProtocolChoices.PROTOCOL_TCP} 1168 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) 1169 1170 def test_port(self): 1171 params = {'port': '1001'} 1172 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) 1173 1174 def test_device(self): 1175 devices = Device.objects.all()[:2] 1176 params = {'device_id': [devices[0].pk, devices[1].pk]} 1177 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 1178 params = {'device': [devices[0].name, devices[1].name]} 1179 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 1180 1181 def test_virtual_machine(self): 1182 vms = VirtualMachine.objects.all()[:2] 1183 params = {'virtual_machine_id': [vms[0].pk, vms[1].pk]} 1184 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 1185 params = {'virtual_machine': [vms[0].name, vms[1].name]} 1186 self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) 1187