test_views.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456
  1. import urllib.parse
  2. from django.test import Client, TestCase
  3. from django.urls import reverse
  4. from dcim.constants import CABLE_TYPE_CAT6, IFACE_TYPE_1GE_FIXED
  5. from dcim.models import (
  6. Cable, Device, DeviceRole, DeviceType, Interface, InventoryItem, Manufacturer, Platform, Rack, RackGroup,
  7. RackReservation, RackRole, Site, Region, VirtualChassis,
  8. )
  9. from utilities.testing import create_test_user
  10. class RegionTestCase(TestCase):
  11. def setUp(self):
  12. user = create_test_user(permissions=['dcim.view_region'])
  13. self.client = Client()
  14. self.client.force_login(user)
  15. # Create three Regions
  16. for i in range(1, 4):
  17. Region(name='Region {}'.format(i), slug='region-{}'.format(i)).save()
  18. def test_region_list(self):
  19. url = reverse('dcim:region_list')
  20. response = self.client.get(url)
  21. self.assertEqual(response.status_code, 200)
  22. class SiteTestCase(TestCase):
  23. def setUp(self):
  24. user = create_test_user(permissions=['dcim.view_site'])
  25. self.client = Client()
  26. self.client.force_login(user)
  27. region = Region(name='Region 1', slug='region-1')
  28. region.save()
  29. Site.objects.bulk_create([
  30. Site(name='Site 1', slug='site-1', region=region),
  31. Site(name='Site 2', slug='site-2', region=region),
  32. Site(name='Site 3', slug='site-3', region=region),
  33. ])
  34. def test_site_list(self):
  35. url = reverse('dcim:site_list')
  36. params = {
  37. "region": Region.objects.first().slug,
  38. }
  39. response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params)))
  40. self.assertEqual(response.status_code, 200)
  41. def test_site(self):
  42. site = Site.objects.first()
  43. response = self.client.get(site.get_absolute_url())
  44. self.assertEqual(response.status_code, 200)
  45. class RackGroupTestCase(TestCase):
  46. def setUp(self):
  47. user = create_test_user(permissions=['dcim.view_rackgroup'])
  48. self.client = Client()
  49. self.client.force_login(user)
  50. site = Site(name='Site 1', slug='site-1')
  51. site.save()
  52. RackGroup.objects.bulk_create([
  53. RackGroup(name='Rack Group 1', slug='rack-group-1', site=site),
  54. RackGroup(name='Rack Group 2', slug='rack-group-2', site=site),
  55. RackGroup(name='Rack Group 3', slug='rack-group-3', site=site),
  56. ])
  57. def test_rackgroup_list(self):
  58. url = reverse('dcim:rackgroup_list')
  59. response = self.client.get(url)
  60. self.assertEqual(response.status_code, 200)
  61. class RackRoleTestCase(TestCase):
  62. def setUp(self):
  63. user = create_test_user(permissions=['dcim.view_rackrole'])
  64. self.client = Client()
  65. self.client.force_login(user)
  66. RackRole.objects.bulk_create([
  67. RackRole(name='Rack Role 1', slug='rack-role-1'),
  68. RackRole(name='Rack Role 2', slug='rack-role-2'),
  69. RackRole(name='Rack Role 3', slug='rack-role-3'),
  70. ])
  71. def test_rackrole_list(self):
  72. url = reverse('dcim:rackrole_list')
  73. response = self.client.get(url)
  74. self.assertEqual(response.status_code, 200)
  75. class RackReservationTestCase(TestCase):
  76. def setUp(self):
  77. user = create_test_user(permissions=['dcim.view_rackreservation'])
  78. self.client = Client()
  79. self.client.force_login(user)
  80. site = Site(name='Site 1', slug='site-1')
  81. site.save()
  82. rack = Rack(name='Rack 1', site=site)
  83. rack.save()
  84. RackReservation.objects.bulk_create([
  85. RackReservation(rack=rack, user=user, units=[1, 2, 3], description='Reservation 1'),
  86. RackReservation(rack=rack, user=user, units=[4, 5, 6], description='Reservation 2'),
  87. RackReservation(rack=rack, user=user, units=[7, 8, 9], description='Reservation 3'),
  88. ])
  89. def test_rackreservation_list(self):
  90. url = reverse('dcim:rackreservation_list')
  91. response = self.client.get(url)
  92. self.assertEqual(response.status_code, 200)
  93. class RackTestCase(TestCase):
  94. def setUp(self):
  95. user = create_test_user(permissions=['dcim.view_rack'])
  96. self.client = Client()
  97. self.client.force_login(user)
  98. site = Site(name='Site 1', slug='site-1')
  99. site.save()
  100. Rack.objects.bulk_create([
  101. Rack(name='Rack 1', site=site),
  102. Rack(name='Rack 2', site=site),
  103. Rack(name='Rack 3', site=site),
  104. ])
  105. def test_rack_list(self):
  106. url = reverse('dcim:rack_list')
  107. params = {
  108. "site": Site.objects.first().slug,
  109. }
  110. response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params)))
  111. self.assertEqual(response.status_code, 200)
  112. def test_rack(self):
  113. rack = Rack.objects.first()
  114. response = self.client.get(rack.get_absolute_url())
  115. self.assertEqual(response.status_code, 200)
  116. class ManufacturerTypeTestCase(TestCase):
  117. def setUp(self):
  118. user = create_test_user(permissions=['dcim.view_manufacturer'])
  119. self.client = Client()
  120. self.client.force_login(user)
  121. Manufacturer.objects.bulk_create([
  122. Manufacturer(name='Manufacturer 1', slug='manufacturer-1'),
  123. Manufacturer(name='Manufacturer 2', slug='manufacturer-2'),
  124. Manufacturer(name='Manufacturer 3', slug='manufacturer-3'),
  125. ])
  126. def test_manufacturer_list(self):
  127. url = reverse('dcim:manufacturer_list')
  128. response = self.client.get(url)
  129. self.assertEqual(response.status_code, 200)
  130. class DeviceTypeTestCase(TestCase):
  131. def setUp(self):
  132. user = create_test_user(permissions=['dcim.view_devicetype'])
  133. self.client = Client()
  134. self.client.force_login(user)
  135. manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
  136. manufacturer.save()
  137. DeviceType.objects.bulk_create([
  138. DeviceType(model='Device Type 1', slug='device-type-1', manufacturer=manufacturer),
  139. DeviceType(model='Device Type 2', slug='device-type-2', manufacturer=manufacturer),
  140. DeviceType(model='Device Type 3', slug='device-type-3', manufacturer=manufacturer),
  141. ])
  142. def test_devicetype_list(self):
  143. url = reverse('dcim:devicetype_list')
  144. params = {
  145. "manufacturer": Manufacturer.objects.first().slug,
  146. }
  147. response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params)))
  148. self.assertEqual(response.status_code, 200)
  149. def test_devicetype(self):
  150. devicetype = DeviceType.objects.first()
  151. response = self.client.get(devicetype.get_absolute_url())
  152. self.assertEqual(response.status_code, 200)
  153. class DeviceRoleTestCase(TestCase):
  154. def setUp(self):
  155. user = create_test_user(permissions=['dcim.view_devicerole'])
  156. self.client = Client()
  157. self.client.force_login(user)
  158. DeviceRole.objects.bulk_create([
  159. DeviceRole(name='Device Role 1', slug='device-role-1'),
  160. DeviceRole(name='Device Role 2', slug='device-role-2'),
  161. DeviceRole(name='Device Role 3', slug='device-role-3'),
  162. ])
  163. def test_devicerole_list(self):
  164. url = reverse('dcim:devicerole_list')
  165. response = self.client.get(url)
  166. self.assertEqual(response.status_code, 200)
  167. class PlatformTestCase(TestCase):
  168. def setUp(self):
  169. user = create_test_user(permissions=['dcim.view_platform'])
  170. self.client = Client()
  171. self.client.force_login(user)
  172. Platform.objects.bulk_create([
  173. Platform(name='Platform 1', slug='platform-1'),
  174. Platform(name='Platform 2', slug='platform-2'),
  175. Platform(name='Platform 3', slug='platform-3'),
  176. ])
  177. def test_platform_list(self):
  178. url = reverse('dcim:platform_list')
  179. response = self.client.get(url)
  180. self.assertEqual(response.status_code, 200)
  181. class DeviceTestCase(TestCase):
  182. def setUp(self):
  183. user = create_test_user(permissions=['dcim.view_device'])
  184. self.client = Client()
  185. self.client.force_login(user)
  186. site = Site(name='Site 1', slug='site-1')
  187. site.save()
  188. manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
  189. manufacturer.save()
  190. devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
  191. devicetype.save()
  192. devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
  193. devicerole.save()
  194. Device.objects.bulk_create([
  195. Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole),
  196. Device(name='Device 2', site=site, device_type=devicetype, device_role=devicerole),
  197. Device(name='Device 3', site=site, device_type=devicetype, device_role=devicerole),
  198. ])
  199. def test_device_list(self):
  200. url = reverse('dcim:device_list')
  201. params = {
  202. "device_type_id": DeviceType.objects.first().pk,
  203. "role": DeviceRole.objects.first().slug,
  204. }
  205. response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params)))
  206. self.assertEqual(response.status_code, 200)
  207. def test_device(self):
  208. device = Device.objects.first()
  209. response = self.client.get(device.get_absolute_url())
  210. self.assertEqual(response.status_code, 200)
  211. class InventoryItemTestCase(TestCase):
  212. def setUp(self):
  213. user = create_test_user(permissions=['dcim.view_inventoryitem'])
  214. self.client = Client()
  215. self.client.force_login(user)
  216. site = Site(name='Site 1', slug='site-1')
  217. site.save()
  218. manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
  219. manufacturer.save()
  220. devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
  221. devicetype.save()
  222. devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
  223. devicerole.save()
  224. device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
  225. device.save()
  226. InventoryItem.objects.bulk_create([
  227. InventoryItem(device=device, name='Inventory Item 1'),
  228. InventoryItem(device=device, name='Inventory Item 2'),
  229. InventoryItem(device=device, name='Inventory Item 3'),
  230. ])
  231. def test_inventoryitem_list(self):
  232. url = reverse('dcim:inventoryitem_list')
  233. params = {
  234. "device_id": Device.objects.first().pk,
  235. }
  236. response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params)))
  237. self.assertEqual(response.status_code, 200)
  238. class CableTestCase(TestCase):
  239. def setUp(self):
  240. user = create_test_user(permissions=['dcim.view_cable'])
  241. self.client = Client()
  242. self.client.force_login(user)
  243. site = Site(name='Site 1', slug='site-1')
  244. site.save()
  245. manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
  246. manufacturer.save()
  247. devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
  248. devicetype.save()
  249. devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
  250. devicerole.save()
  251. device1 = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
  252. device1.save()
  253. device2 = Device(name='Device 2', site=site, device_type=devicetype, device_role=devicerole)
  254. device2.save()
  255. iface1 = Interface(device=device1, name='Interface 1', type=IFACE_TYPE_1GE_FIXED)
  256. iface1.save()
  257. iface2 = Interface(device=device1, name='Interface 2', type=IFACE_TYPE_1GE_FIXED)
  258. iface2.save()
  259. iface3 = Interface(device=device1, name='Interface 3', type=IFACE_TYPE_1GE_FIXED)
  260. iface3.save()
  261. iface4 = Interface(device=device2, name='Interface 1', type=IFACE_TYPE_1GE_FIXED)
  262. iface4.save()
  263. iface5 = Interface(device=device2, name='Interface 2', type=IFACE_TYPE_1GE_FIXED)
  264. iface5.save()
  265. iface6 = Interface(device=device2, name='Interface 3', type=IFACE_TYPE_1GE_FIXED)
  266. iface6.save()
  267. Cable(termination_a=iface1, termination_b=iface4, type=CABLE_TYPE_CAT6).save()
  268. Cable(termination_a=iface2, termination_b=iface5, type=CABLE_TYPE_CAT6).save()
  269. Cable(termination_a=iface3, termination_b=iface6, type=CABLE_TYPE_CAT6).save()
  270. def test_cable_list(self):
  271. url = reverse('dcim:cable_list')
  272. params = {
  273. "type": CABLE_TYPE_CAT6,
  274. }
  275. response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params)))
  276. self.assertEqual(response.status_code, 200)
  277. def test_cable(self):
  278. cable = Cable.objects.first()
  279. response = self.client.get(cable.get_absolute_url())
  280. self.assertEqual(response.status_code, 200)
  281. class VirtualChassisTestCase(TestCase):
  282. def setUp(self):
  283. user = create_test_user(permissions=['dcim.view_virtualchassis'])
  284. self.client = Client()
  285. self.client.force_login(user)
  286. site = Site.objects.create(name='Site 1', slug='site-1')
  287. manufacturer = Manufacturer.objects.create(name='Manufacturer', slug='manufacturer-1')
  288. device_type = DeviceType.objects.create(
  289. manufacturer=manufacturer, model='Device Type 1', slug='device-type-1'
  290. )
  291. device_role = DeviceRole.objects.create(
  292. name='Device Role', slug='device-role-1'
  293. )
  294. # Create 9 member Devices
  295. device1 = Device.objects.create(
  296. device_type=device_type, device_role=device_role, name='Device 1', site=site
  297. )
  298. device2 = Device.objects.create(
  299. device_type=device_type, device_role=device_role, name='Device 2', site=site
  300. )
  301. device3 = Device.objects.create(
  302. device_type=device_type, device_role=device_role, name='Device 3', site=site
  303. )
  304. device4 = Device.objects.create(
  305. device_type=device_type, device_role=device_role, name='Device 4', site=site
  306. )
  307. device5 = Device.objects.create(
  308. device_type=device_type, device_role=device_role, name='Device 5', site=site
  309. )
  310. device6 = Device.objects.create(
  311. device_type=device_type, device_role=device_role, name='Device 6', site=site
  312. )
  313. # Create three VirtualChassis with two members each
  314. vc1 = VirtualChassis.objects.create(master=device1, domain='test-domain-1')
  315. Device.objects.filter(pk=device2.pk).invalidated_update(virtual_chassis=vc1, vc_position=2)
  316. vc2 = VirtualChassis.objects.create(master=device3, domain='test-domain-2')
  317. Device.objects.filter(pk=device4.pk).invalidated_update(virtual_chassis=vc2, vc_position=2)
  318. vc3 = VirtualChassis.objects.create(master=device5, domain='test-domain-3')
  319. Device.objects.filter(pk=device6.pk).invalidated_update(virtual_chassis=vc3, vc_position=2)
  320. def test_virtualchassis_list(self):
  321. url = reverse('dcim:virtualchassis_list')
  322. response = self.client.get(url)
  323. self.assertEqual(response.status_code, 200)