test_views.py 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. from netaddr import EUI
  2. from dcim.choices import InterfaceModeChoices
  3. from dcim.models import DeviceRole, Platform, Site
  4. from ipam.models import VLAN
  5. from utilities.testing import ViewTestCases
  6. from virtualization.choices import *
  7. from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
  8. class ClusterGroupTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
  9. model = ClusterGroup
  10. @classmethod
  11. def setUpTestData(cls):
  12. ClusterGroup.objects.bulk_create([
  13. ClusterGroup(name='Cluster Group 1', slug='cluster-group-1'),
  14. ClusterGroup(name='Cluster Group 2', slug='cluster-group-2'),
  15. ClusterGroup(name='Cluster Group 3', slug='cluster-group-3'),
  16. ])
  17. cls.form_data = {
  18. 'name': 'Cluster Group X',
  19. 'slug': 'cluster-group-x',
  20. 'description': 'A new cluster group',
  21. }
  22. cls.csv_data = (
  23. "name,slug,description",
  24. "Cluster Group 4,cluster-group-4,Fourth cluster group",
  25. "Cluster Group 5,cluster-group-5,Fifth cluster group",
  26. "Cluster Group 6,cluster-group-6,Sixth cluster group",
  27. )
  28. class ClusterTypeTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
  29. model = ClusterType
  30. @classmethod
  31. def setUpTestData(cls):
  32. ClusterType.objects.bulk_create([
  33. ClusterType(name='Cluster Type 1', slug='cluster-type-1'),
  34. ClusterType(name='Cluster Type 2', slug='cluster-type-2'),
  35. ClusterType(name='Cluster Type 3', slug='cluster-type-3'),
  36. ])
  37. cls.form_data = {
  38. 'name': 'Cluster Type X',
  39. 'slug': 'cluster-type-x',
  40. 'description': 'A new cluster type',
  41. }
  42. cls.csv_data = (
  43. "name,slug,description",
  44. "Cluster Type 4,cluster-type-4,Fourth cluster type",
  45. "Cluster Type 5,cluster-type-5,Fifth cluster type",
  46. "Cluster Type 6,cluster-type-6,Sixth cluster type",
  47. )
  48. class ClusterTestCase(ViewTestCases.PrimaryObjectViewTestCase):
  49. model = Cluster
  50. @classmethod
  51. def setUpTestData(cls):
  52. sites = (
  53. Site(name='Site 1', slug='site-1'),
  54. Site(name='Site 2', slug='site-2'),
  55. )
  56. Site.objects.bulk_create(sites)
  57. clustergroups = (
  58. ClusterGroup(name='Cluster Group 1', slug='cluster-group-1'),
  59. ClusterGroup(name='Cluster Group 2', slug='cluster-group-2'),
  60. )
  61. ClusterGroup.objects.bulk_create(clustergroups)
  62. clustertypes = (
  63. ClusterType(name='Cluster Type 1', slug='cluster-type-1'),
  64. ClusterType(name='Cluster Type 2', slug='cluster-type-2'),
  65. )
  66. ClusterType.objects.bulk_create(clustertypes)
  67. Cluster.objects.bulk_create([
  68. Cluster(name='Cluster 1', group=clustergroups[0], type=clustertypes[0], site=sites[0]),
  69. Cluster(name='Cluster 2', group=clustergroups[0], type=clustertypes[0], site=sites[0]),
  70. Cluster(name='Cluster 3', group=clustergroups[0], type=clustertypes[0], site=sites[0]),
  71. ])
  72. tags = cls.create_tags('Alpha', 'Bravo', 'Charlie')
  73. cls.form_data = {
  74. 'name': 'Cluster X',
  75. 'group': clustergroups[1].pk,
  76. 'type': clustertypes[1].pk,
  77. 'tenant': None,
  78. 'site': sites[1].pk,
  79. 'comments': 'Some comments',
  80. 'tags': [t.pk for t in tags],
  81. }
  82. cls.csv_data = (
  83. "name,type",
  84. "Cluster 4,Cluster Type 1",
  85. "Cluster 5,Cluster Type 1",
  86. "Cluster 6,Cluster Type 1",
  87. )
  88. cls.bulk_edit_data = {
  89. 'group': clustergroups[1].pk,
  90. 'type': clustertypes[1].pk,
  91. 'tenant': None,
  92. 'site': sites[1].pk,
  93. 'comments': 'New comments',
  94. }
  95. class VirtualMachineTestCase(ViewTestCases.PrimaryObjectViewTestCase):
  96. model = VirtualMachine
  97. @classmethod
  98. def setUpTestData(cls):
  99. deviceroles = (
  100. DeviceRole(name='Device Role 1', slug='device-role-1'),
  101. DeviceRole(name='Device Role 2', slug='device-role-2'),
  102. )
  103. DeviceRole.objects.bulk_create(deviceroles)
  104. platforms = (
  105. Platform(name='Platform 1', slug='platform-1'),
  106. Platform(name='Platform 2', slug='platform-2'),
  107. )
  108. Platform.objects.bulk_create(platforms)
  109. clustertype = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1')
  110. clusters = (
  111. Cluster(name='Cluster 1', type=clustertype),
  112. Cluster(name='Cluster 2', type=clustertype),
  113. )
  114. Cluster.objects.bulk_create(clusters)
  115. VirtualMachine.objects.bulk_create([
  116. VirtualMachine(name='Virtual Machine 1', cluster=clusters[0], role=deviceroles[0], platform=platforms[0]),
  117. VirtualMachine(name='Virtual Machine 2', cluster=clusters[0], role=deviceroles[0], platform=platforms[0]),
  118. VirtualMachine(name='Virtual Machine 3', cluster=clusters[0], role=deviceroles[0], platform=platforms[0]),
  119. ])
  120. tags = cls.create_tags('Alpha', 'Bravo', 'Charlie')
  121. cls.form_data = {
  122. 'cluster': clusters[1].pk,
  123. 'tenant': None,
  124. 'platform': platforms[1].pk,
  125. 'name': 'Virtual Machine X',
  126. 'status': VirtualMachineStatusChoices.STATUS_STAGED,
  127. 'role': deviceroles[1].pk,
  128. 'primary_ip4': None,
  129. 'primary_ip6': None,
  130. 'vcpus': 4,
  131. 'memory': 32768,
  132. 'disk': 4000,
  133. 'comments': 'Some comments',
  134. 'tags': [t.pk for t in tags],
  135. 'local_context_data': None,
  136. }
  137. cls.csv_data = (
  138. "name,cluster",
  139. "Virtual Machine 4,Cluster 1",
  140. "Virtual Machine 5,Cluster 1",
  141. "Virtual Machine 6,Cluster 1",
  142. )
  143. cls.bulk_edit_data = {
  144. 'cluster': clusters[1].pk,
  145. 'tenant': None,
  146. 'platform': platforms[1].pk,
  147. 'status': VirtualMachineStatusChoices.STATUS_STAGED,
  148. 'role': deviceroles[1].pk,
  149. 'vcpus': 8,
  150. 'memory': 65535,
  151. 'disk': 8000,
  152. 'comments': 'New comments',
  153. }
  154. class VMInterfaceTestCase(
  155. ViewTestCases.GetObjectViewTestCase,
  156. ViewTestCases.DeviceComponentViewTestCase,
  157. ):
  158. model = VMInterface
  159. @classmethod
  160. def setUpTestData(cls):
  161. site = Site.objects.create(name='Site 1', slug='site-1')
  162. devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1')
  163. clustertype = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1')
  164. cluster = Cluster.objects.create(name='Cluster 1', type=clustertype, site=site)
  165. virtualmachines = (
  166. VirtualMachine(name='Virtual Machine 1', cluster=cluster, role=devicerole),
  167. VirtualMachine(name='Virtual Machine 2', cluster=cluster, role=devicerole),
  168. )
  169. VirtualMachine.objects.bulk_create(virtualmachines)
  170. VMInterface.objects.bulk_create([
  171. VMInterface(virtual_machine=virtualmachines[0], name='Interface 1'),
  172. VMInterface(virtual_machine=virtualmachines[0], name='Interface 2'),
  173. VMInterface(virtual_machine=virtualmachines[0], name='Interface 3'),
  174. ])
  175. vlans = (
  176. VLAN(vid=1, name='VLAN1', site=site),
  177. VLAN(vid=101, name='VLAN101', site=site),
  178. VLAN(vid=102, name='VLAN102', site=site),
  179. VLAN(vid=103, name='VLAN103', site=site),
  180. )
  181. VLAN.objects.bulk_create(vlans)
  182. tags = cls.create_tags('Alpha', 'Bravo', 'Charlie')
  183. cls.form_data = {
  184. 'virtual_machine': virtualmachines[1].pk,
  185. 'name': 'Interface X',
  186. 'enabled': False,
  187. 'mac_address': EUI('01-02-03-04-05-06'),
  188. 'mtu': 2000,
  189. 'description': 'New description',
  190. 'mode': InterfaceModeChoices.MODE_TAGGED,
  191. 'untagged_vlan': vlans[0].pk,
  192. 'tagged_vlans': [v.pk for v in vlans[1:4]],
  193. 'tags': [t.pk for t in tags],
  194. }
  195. cls.bulk_create_data = {
  196. 'virtual_machine': virtualmachines[1].pk,
  197. 'name_pattern': 'Interface [4-6]',
  198. 'enabled': False,
  199. 'mac_address': EUI('01-02-03-04-05-06'),
  200. 'mtu': 2000,
  201. 'description': 'New description',
  202. 'mode': InterfaceModeChoices.MODE_TAGGED,
  203. 'untagged_vlan': vlans[0].pk,
  204. 'tagged_vlans': [v.pk for v in vlans[1:4]],
  205. 'tags': [t.pk for t in tags],
  206. }
  207. cls.csv_data = (
  208. "virtual_machine,name",
  209. "Virtual Machine 2,Interface 4",
  210. "Virtual Machine 2,Interface 5",
  211. "Virtual Machine 2,Interface 6",
  212. )
  213. cls.bulk_edit_data = {
  214. 'virtual_machine': virtualmachines[1].pk,
  215. 'enabled': False,
  216. 'mtu': 2000,
  217. 'description': 'New description',
  218. 'mode': InterfaceModeChoices.MODE_TAGGED,
  219. 'untagged_vlan': vlans[0].pk,
  220. 'tagged_vlans': [v.pk for v in vlans[1:4]],
  221. }