test_api.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. from __future__ import unicode_literals
  2. from rest_framework import status
  3. from rest_framework.test import APITestCase
  4. from django.contrib.auth.models import User
  5. from django.urls import reverse
  6. from users.models import Token
  7. from utilities.tests import HttpStatusMixin
  8. from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine
  9. class ClusterTypeTest(HttpStatusMixin, APITestCase):
  10. def setUp(self):
  11. user = User.objects.create(username='testuser', is_superuser=True)
  12. token = Token.objects.create(user=user)
  13. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  14. self.clustertype1 = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1')
  15. self.clustertype2 = ClusterType.objects.create(name='Test Cluster Type 2', slug='test-cluster-type-2')
  16. self.clustertype3 = ClusterType.objects.create(name='Test Cluster Type 3', slug='test-cluster-type-3')
  17. def test_get_clustertype(self):
  18. url = reverse('virtualization-api:clustertype-detail', kwargs={'pk': self.clustertype1.pk})
  19. response = self.client.get(url, **self.header)
  20. self.assertEqual(response.data['name'], self.clustertype1.name)
  21. def test_list_clustertypes(self):
  22. url = reverse('virtualization-api:clustertype-list')
  23. response = self.client.get(url, **self.header)
  24. self.assertEqual(response.data['count'], 3)
  25. def test_create_clustertype(self):
  26. data = {
  27. 'name': 'Test Cluster Type 4',
  28. 'slug': 'test-cluster-type-4',
  29. }
  30. url = reverse('virtualization-api:clustertype-list')
  31. response = self.client.post(url, data, **self.header)
  32. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  33. self.assertEqual(ClusterType.objects.count(), 4)
  34. clustertype4 = ClusterType.objects.get(pk=response.data['id'])
  35. self.assertEqual(clustertype4.name, data['name'])
  36. self.assertEqual(clustertype4.slug, data['slug'])
  37. def test_update_clustertype(self):
  38. data = {
  39. 'name': 'Test Cluster Type X',
  40. 'slug': 'test-cluster-type-x',
  41. }
  42. url = reverse('virtualization-api:clustertype-detail', kwargs={'pk': self.clustertype1.pk})
  43. response = self.client.put(url, data, **self.header)
  44. self.assertHttpStatus(response, status.HTTP_200_OK)
  45. self.assertEqual(ClusterType.objects.count(), 3)
  46. clustertype1 = ClusterType.objects.get(pk=response.data['id'])
  47. self.assertEqual(clustertype1.name, data['name'])
  48. self.assertEqual(clustertype1.slug, data['slug'])
  49. def test_delete_clustertype(self):
  50. url = reverse('virtualization-api:clustertype-detail', kwargs={'pk': self.clustertype1.pk})
  51. response = self.client.delete(url, **self.header)
  52. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  53. self.assertEqual(ClusterType.objects.count(), 2)
  54. class ClusterGroupTest(HttpStatusMixin, APITestCase):
  55. def setUp(self):
  56. user = User.objects.create(username='testuser', is_superuser=True)
  57. token = Token.objects.create(user=user)
  58. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  59. self.clustergroup1 = ClusterGroup.objects.create(name='Test Cluster Group 1', slug='test-cluster-group-1')
  60. self.clustergroup2 = ClusterGroup.objects.create(name='Test Cluster Group 2', slug='test-cluster-group-2')
  61. self.clustergroup3 = ClusterGroup.objects.create(name='Test Cluster Group 3', slug='test-cluster-group-3')
  62. def test_get_clustergroup(self):
  63. url = reverse('virtualization-api:clustergroup-detail', kwargs={'pk': self.clustergroup1.pk})
  64. response = self.client.get(url, **self.header)
  65. self.assertEqual(response.data['name'], self.clustergroup1.name)
  66. def test_list_clustergroups(self):
  67. url = reverse('virtualization-api:clustergroup-list')
  68. response = self.client.get(url, **self.header)
  69. self.assertEqual(response.data['count'], 3)
  70. def test_create_clustergroup(self):
  71. data = {
  72. 'name': 'Test Cluster Group 4',
  73. 'slug': 'test-cluster-group-4',
  74. }
  75. url = reverse('virtualization-api:clustergroup-list')
  76. response = self.client.post(url, data, **self.header)
  77. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  78. self.assertEqual(ClusterGroup.objects.count(), 4)
  79. clustergroup4 = ClusterGroup.objects.get(pk=response.data['id'])
  80. self.assertEqual(clustergroup4.name, data['name'])
  81. self.assertEqual(clustergroup4.slug, data['slug'])
  82. def test_update_clustergroup(self):
  83. data = {
  84. 'name': 'Test Cluster Group X',
  85. 'slug': 'test-cluster-group-x',
  86. }
  87. url = reverse('virtualization-api:clustergroup-detail', kwargs={'pk': self.clustergroup1.pk})
  88. response = self.client.put(url, data, **self.header)
  89. self.assertHttpStatus(response, status.HTTP_200_OK)
  90. self.assertEqual(ClusterGroup.objects.count(), 3)
  91. clustergroup1 = ClusterGroup.objects.get(pk=response.data['id'])
  92. self.assertEqual(clustergroup1.name, data['name'])
  93. self.assertEqual(clustergroup1.slug, data['slug'])
  94. def test_delete_clustergroup(self):
  95. url = reverse('virtualization-api:clustergroup-detail', kwargs={'pk': self.clustergroup1.pk})
  96. response = self.client.delete(url, **self.header)
  97. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  98. self.assertEqual(ClusterGroup.objects.count(), 2)
  99. class ClusterTest(HttpStatusMixin, APITestCase):
  100. def setUp(self):
  101. user = User.objects.create(username='testuser', is_superuser=True)
  102. token = Token.objects.create(user=user)
  103. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  104. cluster_type = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1')
  105. cluster_group = ClusterGroup.objects.create(name='Test Cluster Group 1', slug='test-cluster-group-1')
  106. self.cluster1 = Cluster.objects.create(name='Test Cluster 1', type=cluster_type, group=cluster_group)
  107. self.cluster2 = Cluster.objects.create(name='Test Cluster 2', type=cluster_type, group=cluster_group)
  108. self.cluster3 = Cluster.objects.create(name='Test Cluster 3', type=cluster_type, group=cluster_group)
  109. def test_get_cluster(self):
  110. url = reverse('virtualization-api:cluster-detail', kwargs={'pk': self.cluster1.pk})
  111. response = self.client.get(url, **self.header)
  112. self.assertEqual(response.data['name'], self.cluster1.name)
  113. def test_list_clusters(self):
  114. url = reverse('virtualization-api:cluster-list')
  115. response = self.client.get(url, **self.header)
  116. self.assertEqual(response.data['count'], 3)
  117. def test_create_cluster(self):
  118. data = {
  119. 'name': 'Test Cluster 4',
  120. 'type': ClusterType.objects.first().pk,
  121. 'group': ClusterGroup.objects.first().pk,
  122. }
  123. url = reverse('virtualization-api:cluster-list')
  124. response = self.client.post(url, data, **self.header)
  125. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  126. self.assertEqual(Cluster.objects.count(), 4)
  127. cluster4 = Cluster.objects.get(pk=response.data['id'])
  128. self.assertEqual(cluster4.name, data['name'])
  129. self.assertEqual(cluster4.type.pk, data['type'])
  130. self.assertEqual(cluster4.group.pk, data['group'])
  131. def test_update_cluster(self):
  132. cluster_type2 = ClusterType.objects.create(name='Test Cluster Type 2', slug='test-cluster-type-2')
  133. cluster_group2 = ClusterGroup.objects.create(name='Test Cluster Group 2', slug='test-cluster-group-2')
  134. data = {
  135. 'name': 'Test Cluster X',
  136. 'type': cluster_type2.pk,
  137. 'group': cluster_group2.pk,
  138. }
  139. url = reverse('virtualization-api:cluster-detail', kwargs={'pk': self.cluster1.pk})
  140. response = self.client.put(url, data, **self.header)
  141. self.assertHttpStatus(response, status.HTTP_200_OK)
  142. self.assertEqual(Cluster.objects.count(), 3)
  143. cluster1 = Cluster.objects.get(pk=response.data['id'])
  144. self.assertEqual(cluster1.name, data['name'])
  145. self.assertEqual(cluster1.type.pk, data['type'])
  146. self.assertEqual(cluster1.group.pk, data['group'])
  147. def test_delete_cluster(self):
  148. url = reverse('virtualization-api:cluster-detail', kwargs={'pk': self.cluster1.pk})
  149. response = self.client.delete(url, **self.header)
  150. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  151. self.assertEqual(Cluster.objects.count(), 2)
  152. class VirtualMachineTest(HttpStatusMixin, APITestCase):
  153. def setUp(self):
  154. user = User.objects.create(username='testuser', is_superuser=True)
  155. token = Token.objects.create(user=user)
  156. self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)}
  157. cluster_type = ClusterType.objects.create(name='Test Cluster Type 1', slug='test-cluster-type-1')
  158. cluster_group = ClusterGroup.objects.create(name='Test Cluster Group 1', slug='test-cluster-group-1')
  159. cluster = Cluster.objects.create(name='Test Cluster 1', type=cluster_type, group=cluster_group)
  160. self.virtualmachine1 = VirtualMachine.objects.create(name='Test Virtual Machine 1', cluster=cluster)
  161. self.virtualmachine2 = VirtualMachine.objects.create(name='Test Virtual Machine 2', cluster=cluster)
  162. self.virtualmachine3 = VirtualMachine.objects.create(name='Test Virtual Machine 3', cluster=cluster)
  163. def test_get_virtualmachine(self):
  164. url = reverse('virtualization-api:virtualmachine-detail', kwargs={'pk': self.virtualmachine1.pk})
  165. response = self.client.get(url, **self.header)
  166. self.assertEqual(response.data['name'], self.virtualmachine1.name)
  167. def test_list_virtualmachines(self):
  168. url = reverse('virtualization-api:virtualmachine-list')
  169. response = self.client.get(url, **self.header)
  170. self.assertEqual(response.data['count'], 3)
  171. def test_create_virtualmachine(self):
  172. data = {
  173. 'name': 'Test Virtual Machine 4',
  174. 'cluster': Cluster.objects.first().pk,
  175. }
  176. url = reverse('virtualization-api:virtualmachine-list')
  177. response = self.client.post(url, data, **self.header)
  178. self.assertHttpStatus(response, status.HTTP_201_CREATED)
  179. self.assertEqual(VirtualMachine.objects.count(), 4)
  180. virtualmachine4 = VirtualMachine.objects.get(pk=response.data['id'])
  181. self.assertEqual(virtualmachine4.name, data['name'])
  182. self.assertEqual(virtualmachine4.cluster.pk, data['cluster'])
  183. def test_update_virtualmachine(self):
  184. cluster2 = Cluster.objects.create(
  185. name='Test Cluster 2',
  186. type=ClusterType.objects.first(),
  187. group=ClusterGroup.objects.first()
  188. )
  189. data = {
  190. 'name': 'Test Virtual Machine X',
  191. 'cluster': cluster2.pk,
  192. }
  193. url = reverse('virtualization-api:virtualmachine-detail', kwargs={'pk': self.virtualmachine1.pk})
  194. response = self.client.put(url, data, **self.header)
  195. self.assertHttpStatus(response, status.HTTP_200_OK)
  196. self.assertEqual(VirtualMachine.objects.count(), 3)
  197. virtualmachine1 = VirtualMachine.objects.get(pk=response.data['id'])
  198. self.assertEqual(virtualmachine1.name, data['name'])
  199. self.assertEqual(virtualmachine1.cluster.pk, data['cluster'])
  200. def test_delete_virtualmachine(self):
  201. url = reverse('virtualization-api:virtualmachine-detail', kwargs={'pk': self.virtualmachine1.pk})
  202. response = self.client.delete(url, **self.header)
  203. self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT)
  204. self.assertEqual(VirtualMachine.objects.count(), 2)