test_apis.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655
  1. import json
  2. from rest_framework import status
  3. from rest_framework.test import APITestCase
  4. class SiteTest(APITestCase):
  5. fixtures = [
  6. 'dcim',
  7. 'ipam',
  8. 'extras',
  9. ]
  10. standard_fields = [
  11. 'id',
  12. 'name',
  13. 'slug',
  14. 'tenant',
  15. 'facility',
  16. 'asn',
  17. 'physical_address',
  18. 'shipping_address',
  19. 'comments',
  20. 'custom_fields',
  21. 'count_prefixes',
  22. 'count_vlans',
  23. 'count_racks',
  24. 'count_devices',
  25. 'count_circuits'
  26. ]
  27. nested_fields = [
  28. 'id',
  29. 'name',
  30. 'slug'
  31. ]
  32. rack_fields = [
  33. 'id',
  34. 'name',
  35. 'facility_id',
  36. 'display_name',
  37. 'site',
  38. 'group',
  39. 'tenant',
  40. 'role',
  41. 'type',
  42. 'width',
  43. 'u_height',
  44. 'comments',
  45. 'custom_fields',
  46. ]
  47. graph_fields = [
  48. 'name',
  49. 'embed_url',
  50. 'embed_link',
  51. ]
  52. def test_get_list(self, endpoint='/api/dcim/sites/'):
  53. response = self.client.get(endpoint)
  54. content = json.loads(response.content)
  55. self.assertEqual(response.status_code, status.HTTP_200_OK)
  56. for i in content:
  57. self.assertEqual(
  58. sorted(i.keys()),
  59. sorted(self.standard_fields),
  60. )
  61. def test_get_detail(self, endpoint='/api/dcim/sites/1/'):
  62. response = self.client.get(endpoint)
  63. content = json.loads(response.content)
  64. self.assertEqual(response.status_code, status.HTTP_200_OK)
  65. self.assertEqual(
  66. sorted(content.keys()),
  67. sorted(self.standard_fields),
  68. )
  69. def test_get_site_list_rack(self, endpoint='/api/dcim/sites/1/racks/'):
  70. response = self.client.get(endpoint)
  71. content = json.loads(response.content)
  72. self.assertEqual(response.status_code, status.HTTP_200_OK)
  73. for i in json.loads(response.content):
  74. self.assertEqual(
  75. sorted(i.keys()),
  76. sorted(self.rack_fields),
  77. )
  78. # Check Nested Serializer.
  79. self.assertEqual(
  80. sorted(i.get('site').keys()),
  81. sorted(self.nested_fields),
  82. )
  83. def test_get_site_list_graphs(self, endpoint='/api/dcim/sites/1/graphs/'):
  84. response = self.client.get(endpoint)
  85. content = json.loads(response.content)
  86. self.assertEqual(response.status_code, status.HTTP_200_OK)
  87. for i in json.loads(response.content):
  88. self.assertEqual(
  89. sorted(i.keys()),
  90. sorted(self.graph_fields),
  91. )
  92. class RackTest(APITestCase):
  93. fixtures = [
  94. 'dcim',
  95. 'ipam'
  96. ]
  97. nested_fields = [
  98. 'id',
  99. 'name',
  100. 'facility_id',
  101. 'display_name'
  102. ]
  103. standard_fields = [
  104. 'id',
  105. 'name',
  106. 'facility_id',
  107. 'display_name',
  108. 'site',
  109. 'group',
  110. 'tenant',
  111. 'role',
  112. 'type',
  113. 'width',
  114. 'u_height',
  115. 'comments',
  116. 'custom_fields',
  117. ]
  118. detail_fields = [
  119. 'id',
  120. 'name',
  121. 'facility_id',
  122. 'display_name',
  123. 'site',
  124. 'group',
  125. 'tenant',
  126. 'role',
  127. 'type',
  128. 'width',
  129. 'u_height',
  130. 'comments',
  131. 'custom_fields',
  132. 'front_units',
  133. 'rear_units'
  134. ]
  135. def test_get_list(self, endpoint='/api/dcim/racks/'):
  136. response = self.client.get(endpoint)
  137. content = json.loads(response.content)
  138. self.assertEqual(response.status_code, status.HTTP_200_OK)
  139. for i in content:
  140. self.assertEqual(
  141. sorted(i.keys()),
  142. sorted(self.standard_fields),
  143. )
  144. self.assertEqual(
  145. sorted(i.get('site').keys()),
  146. sorted(SiteTest.nested_fields),
  147. )
  148. def test_get_detail(self, endpoint='/api/dcim/racks/1/'):
  149. response = self.client.get(endpoint)
  150. content = json.loads(response.content)
  151. self.assertEqual(response.status_code, status.HTTP_200_OK)
  152. self.assertEqual(
  153. sorted(content.keys()),
  154. sorted(self.detail_fields),
  155. )
  156. self.assertEqual(
  157. sorted(content.get('site').keys()),
  158. sorted(SiteTest.nested_fields),
  159. )
  160. class ManufacturersTest(APITestCase):
  161. fixtures = [
  162. 'dcim',
  163. 'ipam'
  164. ]
  165. standard_fields = [
  166. 'id',
  167. 'name',
  168. 'slug',
  169. ]
  170. nested_fields = standard_fields
  171. def test_get_list(self, endpoint='/api/dcim/manufacturers/'):
  172. response = self.client.get(endpoint)
  173. content = json.loads(response.content)
  174. self.assertEqual(response.status_code, status.HTTP_200_OK)
  175. for i in content:
  176. self.assertEqual(
  177. sorted(i.keys()),
  178. sorted(self.standard_fields),
  179. )
  180. def test_get_detail(self, endpoint='/api/dcim/manufacturers/1/'):
  181. response = self.client.get(endpoint)
  182. content = json.loads(response.content)
  183. self.assertEqual(response.status_code, status.HTTP_200_OK)
  184. self.assertEqual(
  185. sorted(content.keys()),
  186. sorted(self.standard_fields),
  187. )
  188. class DeviceTypeTest(APITestCase):
  189. fixtures = ['dcim', 'ipam']
  190. standard_fields = [
  191. 'id',
  192. 'manufacturer',
  193. 'model',
  194. 'slug',
  195. 'part_number',
  196. 'u_height',
  197. 'is_full_depth',
  198. 'is_console_server',
  199. 'is_pdu',
  200. 'is_network_device',
  201. ]
  202. nested_fields = [
  203. 'id',
  204. 'manufacturer',
  205. 'model',
  206. 'slug'
  207. ]
  208. def test_get_list(self, endpoint='/api/dcim/device-types/'):
  209. response = self.client.get(endpoint)
  210. content = json.loads(response.content)
  211. self.assertEqual(response.status_code, status.HTTP_200_OK)
  212. for i in content:
  213. self.assertEqual(
  214. sorted(i.keys()),
  215. sorted(self.standard_fields),
  216. )
  217. def test_detail_list(self, endpoint='/api/dcim/device-types/1/'):
  218. # TODO: details returns list view.
  219. # response = self.client.get(endpoint)
  220. # content = json.loads(response.content)
  221. # self.assertEqual(response.status_code, status.HTTP_200_OK)
  222. # self.assertEqual(
  223. # sorted(content.keys()),
  224. # sorted(self.standard_fields),
  225. # )
  226. # self.assertEqual(
  227. # sorted(content.get('manufacturer').keys()),
  228. # sorted(ManufacturersTest.nested_fields),
  229. # )
  230. pass
  231. class DeviceRolesTest(APITestCase):
  232. fixtures = ['dcim', 'ipam']
  233. standard_fields = ['id', 'name', 'slug', 'color']
  234. nested_fields = ['id', 'name', 'slug']
  235. def test_get_list(self, endpoint='/api/dcim/device-roles/'):
  236. response = self.client.get(endpoint)
  237. content = json.loads(response.content)
  238. self.assertEqual(response.status_code, status.HTTP_200_OK)
  239. for i in content:
  240. self.assertEqual(
  241. sorted(i.keys()),
  242. sorted(self.standard_fields),
  243. )
  244. def test_get_detail(self, endpoint='/api/dcim/device-roles/1/'):
  245. response = self.client.get(endpoint)
  246. content = json.loads(response.content)
  247. self.assertEqual(response.status_code, status.HTTP_200_OK)
  248. self.assertEqual(
  249. sorted(content.keys()),
  250. sorted(self.standard_fields),
  251. )
  252. class PlatformsTest(APITestCase):
  253. fixtures = ['dcim', 'ipam']
  254. standard_fields = ['id', 'name', 'slug', 'rpc_client']
  255. nested_fields = ['id', 'name', 'slug']
  256. def test_get_list(self, endpoint='/api/dcim/platforms/'):
  257. response = self.client.get(endpoint)
  258. content = json.loads(response.content)
  259. self.assertEqual(response.status_code, status.HTTP_200_OK)
  260. for i in content:
  261. self.assertEqual(
  262. sorted(i.keys()),
  263. sorted(self.standard_fields),
  264. )
  265. def test_get_detail(self, endpoint='/api/dcim/platforms/1/'):
  266. response = self.client.get(endpoint)
  267. content = json.loads(response.content)
  268. self.assertEqual(response.status_code, status.HTTP_200_OK)
  269. self.assertEqual(
  270. sorted(content.keys()),
  271. sorted(self.standard_fields),
  272. )
  273. class DeviceTest(APITestCase):
  274. fixtures = ['dcim', 'ipam']
  275. standard_fields = [
  276. 'id',
  277. 'name',
  278. 'display_name',
  279. 'device_type',
  280. 'device_role',
  281. 'tenant',
  282. 'platform',
  283. 'serial',
  284. 'asset_tag',
  285. 'rack',
  286. 'position',
  287. 'face',
  288. 'parent_device',
  289. 'status',
  290. 'primary_ip',
  291. 'primary_ip4',
  292. 'primary_ip6',
  293. 'comments',
  294. 'custom_fields',
  295. ]
  296. nested_fields = ['id', 'name', 'display_name']
  297. def test_get_list(self, endpoint='/api/dcim/devices/'):
  298. response = self.client.get(endpoint)
  299. content = json.loads(response.content)
  300. self.assertEqual(response.status_code, status.HTTP_200_OK)
  301. for device in content:
  302. self.assertEqual(
  303. sorted(device.keys()),
  304. sorted(self.standard_fields),
  305. )
  306. self.assertEqual(
  307. sorted(device.get('device_type')),
  308. sorted(DeviceTypeTest.nested_fields),
  309. )
  310. self.assertEqual(
  311. sorted(device.get('device_role')),
  312. sorted(DeviceRolesTest.nested_fields),
  313. )
  314. if device.get('platform'):
  315. self.assertEqual(
  316. sorted(device.get('platform')),
  317. sorted(PlatformsTest.nested_fields),
  318. )
  319. self.assertEqual(
  320. sorted(device.get('rack')),
  321. sorted(RackTest.nested_fields),
  322. )
  323. def test_get_list_flat(self, endpoint='/api/dcim/devices/?format=json_flat'):
  324. flat_fields = [
  325. 'asset_tag',
  326. 'comments',
  327. 'device_role_id',
  328. 'device_role_name',
  329. 'device_role_slug',
  330. 'device_type_id',
  331. 'device_type_manufacturer_id',
  332. 'device_type_manufacturer_name',
  333. 'device_type_manufacturer_slug',
  334. 'device_type_model',
  335. 'device_type_slug',
  336. 'display_name',
  337. 'face',
  338. 'id',
  339. 'name',
  340. 'parent_device',
  341. 'platform_id',
  342. 'platform_name',
  343. 'platform_slug',
  344. 'position',
  345. 'primary_ip_address',
  346. 'primary_ip_family',
  347. 'primary_ip_id',
  348. 'primary_ip4_address',
  349. 'primary_ip4_family',
  350. 'primary_ip4_id',
  351. 'primary_ip6',
  352. 'rack_display_name',
  353. 'rack_facility_id',
  354. 'rack_id',
  355. 'rack_name',
  356. 'serial',
  357. 'status',
  358. 'tenant',
  359. ]
  360. response = self.client.get(endpoint)
  361. content = json.loads(response.content)
  362. self.assertEqual(response.status_code, status.HTTP_200_OK)
  363. device = content[0]
  364. self.assertEqual(
  365. sorted(device.keys()),
  366. sorted(flat_fields),
  367. )
  368. def test_get_detail(self, endpoint='/api/dcim/devices/1/'):
  369. response = self.client.get(endpoint)
  370. content = json.loads(response.content)
  371. self.assertEqual(response.status_code, status.HTTP_200_OK)
  372. self.assertEqual(
  373. sorted(content.keys()),
  374. sorted(self.standard_fields),
  375. )
  376. class ConsoleServerPortsTest(APITestCase):
  377. fixtures = ['dcim', 'ipam']
  378. standard_fields = ['id', 'device', 'name', 'connected_console']
  379. nested_fields = ['id', 'device', 'name']
  380. def test_get_list(self, endpoint='/api/dcim/devices/9/console-server-ports/'):
  381. response = self.client.get(endpoint)
  382. content = json.loads(response.content)
  383. self.assertEqual(response.status_code, status.HTTP_200_OK)
  384. for console_port in content:
  385. self.assertEqual(
  386. sorted(console_port.keys()),
  387. sorted(self.standard_fields),
  388. )
  389. self.assertEqual(
  390. sorted(console_port.get('device')),
  391. sorted(DeviceTest.nested_fields),
  392. )
  393. class ConsolePortsTest(APITestCase):
  394. fixtures = ['dcim', 'ipam']
  395. standard_fields = ['id', 'device', 'name', 'cs_port', 'connection_status']
  396. nested_fields = ['id', 'device', 'name']
  397. def test_get_list(self, endpoint='/api/dcim/devices/1/console-ports/'):
  398. response = self.client.get(endpoint)
  399. content = json.loads(response.content)
  400. self.assertEqual(response.status_code, status.HTTP_200_OK)
  401. for console_port in content:
  402. self.assertEqual(
  403. sorted(console_port.keys()),
  404. sorted(self.standard_fields),
  405. )
  406. self.assertEqual(
  407. sorted(console_port.get('device')),
  408. sorted(DeviceTest.nested_fields),
  409. )
  410. self.assertEqual(
  411. sorted(console_port.get('cs_port')),
  412. sorted(ConsoleServerPortsTest.nested_fields),
  413. )
  414. def test_get_detail(self, endpoint='/api/dcim/console-ports/1/'):
  415. response = self.client.get(endpoint)
  416. content = json.loads(response.content)
  417. self.assertEqual(response.status_code, status.HTTP_200_OK)
  418. self.assertEqual(
  419. sorted(content.keys()),
  420. sorted(self.standard_fields),
  421. )
  422. self.assertEqual(
  423. sorted(content.get('device')),
  424. sorted(DeviceTest.nested_fields),
  425. )
  426. class PowerPortsTest(APITestCase):
  427. fixtures = ['dcim', 'ipam']
  428. standard_fields = ['id', 'device', 'name', 'power_outlet', 'connection_status']
  429. nested_fields = ['id', 'device', 'name']
  430. def test_get_list(self, endpoint='/api/dcim/devices/1/power-ports/'):
  431. response = self.client.get(endpoint)
  432. content = json.loads(response.content)
  433. self.assertEqual(response.status_code, status.HTTP_200_OK)
  434. for i in content:
  435. self.assertEqual(
  436. sorted(i.keys()),
  437. sorted(self.standard_fields),
  438. )
  439. self.assertEqual(
  440. sorted(i.get('device')),
  441. sorted(DeviceTest.nested_fields),
  442. )
  443. def test_get_detail(self, endpoint='/api/dcim/power-ports/1/'):
  444. response = self.client.get(endpoint)
  445. content = json.loads(response.content)
  446. self.assertEqual(response.status_code, status.HTTP_200_OK)
  447. self.assertEqual(
  448. sorted(content.keys()),
  449. sorted(self.standard_fields),
  450. )
  451. self.assertEqual(
  452. sorted(content.get('device')),
  453. sorted(DeviceTest.nested_fields),
  454. )
  455. class PowerOutletsTest(APITestCase):
  456. fixtures = ['dcim', 'ipam']
  457. standard_fields = ['id', 'device', 'name', 'connected_port']
  458. nested_fields = ['id', 'device', 'name']
  459. def test_get_list(self, endpoint='/api/dcim/devices/11/power-outlets/'):
  460. response = self.client.get(endpoint)
  461. content = json.loads(response.content)
  462. self.assertEqual(response.status_code, status.HTTP_200_OK)
  463. for i in content:
  464. self.assertEqual(
  465. sorted(i.keys()),
  466. sorted(self.standard_fields),
  467. )
  468. self.assertEqual(
  469. sorted(i.get('device')),
  470. sorted(DeviceTest.nested_fields),
  471. )
  472. class InterfaceTest(APITestCase):
  473. fixtures = ['dcim', 'ipam', 'extras']
  474. standard_fields = [
  475. 'id',
  476. 'device',
  477. 'name',
  478. 'form_factor',
  479. 'mac_address',
  480. 'mgmt_only',
  481. 'description',
  482. 'is_connected'
  483. ]
  484. nested_fields = ['id', 'device', 'name']
  485. detail_fields = [
  486. 'id',
  487. 'device',
  488. 'name',
  489. 'form_factor',
  490. 'mac_address',
  491. 'mgmt_only',
  492. 'description',
  493. 'is_connected',
  494. 'connected_interface'
  495. ]
  496. connection_fields = [
  497. 'id',
  498. 'interface_a',
  499. 'interface_b',
  500. 'connection_status',
  501. ]
  502. def test_get_list(self, endpoint='/api/dcim/devices/1/interfaces/'):
  503. response = self.client.get(endpoint)
  504. content = json.loads(response.content)
  505. self.assertEqual(response.status_code, status.HTTP_200_OK)
  506. for i in content:
  507. self.assertEqual(
  508. sorted(i.keys()),
  509. sorted(self.standard_fields),
  510. )
  511. self.assertEqual(
  512. sorted(i.get('device')),
  513. sorted(DeviceTest.nested_fields),
  514. )
  515. def test_get_detail(self, endpoint='/api/dcim/interfaces/1/'):
  516. response = self.client.get(endpoint)
  517. content = json.loads(response.content)
  518. self.assertEqual(response.status_code, status.HTTP_200_OK)
  519. self.assertEqual(
  520. sorted(content.keys()),
  521. sorted(self.detail_fields),
  522. )
  523. self.assertEqual(
  524. sorted(content.get('device')),
  525. sorted(DeviceTest.nested_fields),
  526. )
  527. def test_get_graph_list(self, endpoint='/api/dcim/interfaces/1/graphs/'):
  528. response = self.client.get(endpoint)
  529. content = json.loads(response.content)
  530. self.assertEqual(response.status_code, status.HTTP_200_OK)
  531. for i in content:
  532. self.assertEqual(
  533. sorted(i.keys()),
  534. sorted(SiteTest.graph_fields),
  535. )
  536. def test_get_interface_connections(self, endpoint='/api/dcim/interface-connections/4/'):
  537. response = self.client.get(endpoint)
  538. content = json.loads(response.content)
  539. self.assertEqual(response.status_code, status.HTTP_200_OK)
  540. self.assertEqual(
  541. sorted(content.keys()),
  542. sorted(self.connection_fields),
  543. )
  544. class RelatedConnectionsTest(APITestCase):
  545. fixtures = ['dcim', 'ipam']
  546. standard_fields = [
  547. 'device',
  548. 'console-ports',
  549. 'power-ports',
  550. 'interfaces',
  551. ]
  552. def test_get_list(self, endpoint=(
  553. '/api/dcim/related-connections/'
  554. '?peer-device=test1-edge1&peer-interface=xe-0/0/3')):
  555. response = self.client.get(endpoint)
  556. content = json.loads(response.content)
  557. self.assertEqual(response.status_code, status.HTTP_200_OK)
  558. self.assertEqual(
  559. sorted(content.keys()),
  560. sorted(self.standard_fields),
  561. )