test_forms.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. from django.test import TestCase
  2. from dcim.forms import *
  3. from dcim.models import *
  4. def get_id(model, slug):
  5. return model.objects.get(slug=slug).id
  6. DEVICETYPE_DATA = {
  7. 'manufacturer': 'Generic',
  8. 'model': 'TEST-1000',
  9. 'slug': 'test-1000',
  10. 'u_height': 2,
  11. 'console-ports': [
  12. {'name': 'Console Port 1'},
  13. {'name': 'Console Port 2'},
  14. {'name': 'Console Port 3'},
  15. ],
  16. 'console-server-ports': [
  17. {'name': 'Console Server Port 1'},
  18. {'name': 'Console Server Port 2'},
  19. {'name': 'Console Server Port 3'},
  20. ],
  21. 'power-ports': [
  22. {'name': 'Power Port 1'},
  23. {'name': 'Power Port 2'},
  24. {'name': 'Power Port 3'},
  25. ],
  26. 'power-outlets': [
  27. {'name': 'Power Outlet 1', 'power_port': 'Power Port 1', 'feed_leg': POWERFEED_LEG_A},
  28. {'name': 'Power Outlet 2', 'power_port': 'Power Port 1', 'feed_leg': POWERFEED_LEG_A},
  29. {'name': 'Power Outlet 3', 'power_port': 'Power Port 1', 'feed_leg': POWERFEED_LEG_A},
  30. ],
  31. 'interfaces': [
  32. {'name': 'Interface 1', 'type': IFACE_TYPE_1GE_FIXED, 'mgmt_only': True},
  33. {'name': 'Interface 2', 'type': IFACE_TYPE_1GE_FIXED},
  34. {'name': 'Interface 3', 'type': IFACE_TYPE_1GE_FIXED},
  35. ],
  36. 'rear-ports': [
  37. {'name': 'Rear Port 1', 'type': PORT_TYPE_8P8C},
  38. {'name': 'Rear Port 2', 'type': PORT_TYPE_8P8C},
  39. {'name': 'Rear Port 3', 'type': PORT_TYPE_8P8C},
  40. ],
  41. 'front-ports': [
  42. {'name': 'Front Port 1', 'type': PORT_TYPE_8P8C, 'rear_port': 'Rear Port 1'},
  43. {'name': 'Front Port 2', 'type': PORT_TYPE_8P8C, 'rear_port': 'Rear Port 2'},
  44. {'name': 'Front Port 3', 'type': PORT_TYPE_8P8C, 'rear_port': 'Rear Port 3'},
  45. ],
  46. 'device-bays': [
  47. {'name': 'Device Bay 1'},
  48. {'name': 'Device Bay 2'},
  49. {'name': 'Device Bay 3'},
  50. ],
  51. }
  52. class DeviceTypeImportTestCase(TestCase):
  53. def setUp(self):
  54. Manufacturer(name='Generic', slug='generic').save()
  55. def test_import_devicetype_yaml(self):
  56. form = DeviceTypeImportForm(DEVICETYPE_DATA)
  57. self.assertTrue(form.is_valid(), "Form validation failed: {}".format(form.errors))
  58. form.save()
  59. dt = DeviceType.objects.get(model='TEST-1000')
  60. # Verify all of the components were created
  61. # TODO: The creation of components now occurs in the view rather than the form
  62. self.assertEqual(dt.consoleport_templates.count(), 3)
  63. cp1 = ConsolePortTemplate.objects.first()
  64. self.assertEqual(cp1.name, 'Console Port 1')
  65. self.assertEqual(dt.consoleserverport_templates.count(), 3)
  66. csp1 = ConsoleServerPortTemplate.objects.first()
  67. self.assertEqual(csp1.name, 'Console Server Port 1')
  68. self.assertEqual(dt.powerport_templates.count(), 3)
  69. pp1 = PowerPortTemplate.objects.first()
  70. self.assertEqual(pp1.name, 'Power Port 1')
  71. self.assertEqual(dt.poweroutlet_templates.count(), 3)
  72. po1 = PowerOutletTemplate.objects.first()
  73. self.assertEqual(po1.name, 'Power Outlet 1')
  74. self.assertEqual(po1.power_port, pp1)
  75. self.assertEqual(po1.feed_leg, POWERFEED_LEG_A)
  76. self.assertEqual(dt.interface_templates.count(), 4)
  77. iface1 = Interface.objects.first()
  78. self.assertEqual(iface1.name, 'Interface 1')
  79. self.assertEqual(iface1.type, IFACE_TYPE_1GE_FIXED)
  80. self.assertTrue(iface1.mgmt_only)
  81. self.assertEqual(dt.rearport_templates.count(), 3)
  82. rp1 = RearPortTemplate.objects.first()
  83. self.assertEqual(rp1.name, 'Rear Port 1')
  84. self.assertEqual(dt.frontport_templates.count(), 3)
  85. fp1 = FrontPortTemplate.objects.first()
  86. self.assertEqual(fp1.name, 'Front Port 1')
  87. self.assertEqual(fp1.rear_port, rp1)
  88. self.assertEqual(fp1.rear_port_position, 1)
  89. self.assertEqual(dt.devicebay_templates.count(), 3)
  90. db1 = DeviceBayTemplate.objects.first()
  91. self.assertEqual(db1.name, 'Device Bay 1')
  92. class DeviceTestCase(TestCase):
  93. fixtures = ['dcim', 'ipam']
  94. def test_racked_device(self):
  95. test = DeviceForm(data={
  96. 'name': 'test',
  97. 'device_role': get_id(DeviceRole, 'leaf-switch'),
  98. 'tenant': None,
  99. 'manufacturer': get_id(Manufacturer, 'juniper'),
  100. 'device_type': get_id(DeviceType, 'qfx5100-48s'),
  101. 'site': get_id(Site, 'test1'),
  102. 'rack': '1',
  103. 'face': RACK_FACE_FRONT,
  104. 'position': 41,
  105. 'platform': get_id(Platform, 'juniper-junos'),
  106. 'status': DEVICE_STATUS_ACTIVE,
  107. })
  108. self.assertTrue(test.is_valid(), test.fields['position'].choices)
  109. self.assertTrue(test.save())
  110. def test_racked_device_occupied(self):
  111. test = DeviceForm(data={
  112. 'name': 'test',
  113. 'device_role': get_id(DeviceRole, 'leaf-switch'),
  114. 'tenant': None,
  115. 'manufacturer': get_id(Manufacturer, 'juniper'),
  116. 'device_type': get_id(DeviceType, 'qfx5100-48s'),
  117. 'site': get_id(Site, 'test1'),
  118. 'rack': '1',
  119. 'face': RACK_FACE_FRONT,
  120. 'position': 1,
  121. 'platform': get_id(Platform, 'juniper-junos'),
  122. 'status': DEVICE_STATUS_ACTIVE,
  123. })
  124. self.assertFalse(test.is_valid())
  125. def test_non_racked_device(self):
  126. test = DeviceForm(data={
  127. 'name': 'test',
  128. 'device_role': get_id(DeviceRole, 'pdu'),
  129. 'tenant': None,
  130. 'manufacturer': get_id(Manufacturer, 'servertech'),
  131. 'device_type': get_id(DeviceType, 'cwg-24vym415c9'),
  132. 'site': get_id(Site, 'test1'),
  133. 'rack': '1',
  134. 'face': None,
  135. 'position': None,
  136. 'platform': None,
  137. 'status': DEVICE_STATUS_ACTIVE,
  138. })
  139. self.assertTrue(test.is_valid())
  140. self.assertTrue(test.save())
  141. def test_non_racked_device_with_face(self):
  142. test = DeviceForm(data={
  143. 'name': 'test',
  144. 'device_role': get_id(DeviceRole, 'pdu'),
  145. 'tenant': None,
  146. 'manufacturer': get_id(Manufacturer, 'servertech'),
  147. 'device_type': get_id(DeviceType, 'cwg-24vym415c9'),
  148. 'site': get_id(Site, 'test1'),
  149. 'rack': '1',
  150. 'face': RACK_FACE_REAR,
  151. 'position': None,
  152. 'platform': None,
  153. 'status': DEVICE_STATUS_ACTIVE,
  154. })
  155. self.assertTrue(test.is_valid())
  156. self.assertTrue(test.save())