Advertisement
Guest User

Untitled

a guest
Dec 7th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.00 KB | None | 0 0
  1. diff --git a/craton/api/v1/resources/inventory/networks.py b/craton/api/v1/resources/inventory/networks.py
  2. index 95632e0..cc505a1 100644
  3. --- a/craton/api/v1/resources/inventory/networks.py
  4. +++ b/craton/api/v1/resources/inventory/networks.py
  5. @@ -149,7 +149,7 @@ class NetDevicesVariables(base.Resource):
  6. def get(self, id):
  7. """Get variables for the given network."""
  8. context = request.environ.get('context')
  9. - obj = dbapi.netdevice_get_by_id(context, id)
  10. + obj = dbapi.netdevices_get_by_id(context, id)
  11. resp = {"variables": jsonutils.to_primitive(obj.variables)}
  12. return resp, 200, None
  13.  
  14. @@ -157,7 +157,7 @@ class NetDevicesVariables(base.Resource):
  15. def put(self, id):
  16. """"Update device variables, or create if it does not exist."""
  17. context = request.environ.get('context')
  18. - obj = dbapi.netdevice_variables_update(context, id, request.json)
  19. + obj = dbapi.netdevices_variables_update(context, id, request.json)
  20. resp = {"variables": jsonutils.to_primitive(obj.variables)}
  21. return resp, 200, None
  22.  
  23. @@ -165,7 +165,7 @@ class NetDevicesVariables(base.Resource):
  24. def delete(self, id):
  25. """Delete network device variables."""
  26. context = request.environ.get('context')
  27. - dbapi.netdevice_variables_delete(context, id, request.json)
  28. + dbapi.netdevices_variables_delete(context, id, request.json)
  29. return None, 204, None
  30.  
  31.  
  32. @@ -226,7 +226,7 @@ class NetInterfaceById(base.Resource):
  33. def get(self, id):
  34. """Get network interface by given id"""
  35. context = request.environ.get('context')
  36. - obj = dbapi.net_interface_get_by_id(context, id)
  37. + obj = dbapi.net_interfaces_get_by_id(context, id)
  38. interface = jsonutils.to_primitive(obj)
  39. interface['variables'] = jsonutils.to_primitive(obj.variables)
  40. return interface, 200, None
  41. diff --git a/craton/tests/unit/fake_resources.py b/craton/tests/unit/fake_resources.py
  42. index c022dd6..7f03d10 100644
  43. --- a/craton/tests/unit/fake_resources.py
  44. +++ b/craton/tests/unit/fake_resources.py
  45. @@ -128,30 +128,44 @@ NETWORKS_LIST = [NETWORK1, NETWORK2]
  46.  
  47.  
  48. class NetDevice():
  49. - def __init__(self, region_id, ip_address):
  50. + def __init__(self, hostname, project_id, region_id, device_type,
  51. + ip_address, variables, labels=None):
  52. + self.hostname = hostname
  53. + self.project_id = project_id
  54. self.region_id = region_id
  55. + self.device_type = device_type
  56. self.ip_address = ip_address
  57. + self.variables = variables
  58. + self.resolved = copy.copy(variables)
  59. + self.labels = labels
  60.  
  61. def items(self):
  62. return iter(self.__dict__.items())
  63.  
  64.  
  65. -NETDEVICE1 = NetDevice(1, '10.10.0.1')
  66. +NETDEVICE1 = NetDevice("NetDevices1", 1, 1, "Server", "10.10.0.1",
  67. + {"key1": "value1", "key2": "value2"},
  68. + labels=["a", "b"])
  69. NETDEVICE_LIST1 = [NETDEVICE1]
  70.  
  71.  
  72. class NetInterface():
  73. - def __init__(self, name, device_id, interface_type, ip_address):
  74. + def __init__(self, name, device_id, project_id, interface_type,
  75. + ip_address, variables):
  76. self.name = name
  77. self.device_id = device_id
  78. + self.project_id = project_id
  79. self.interface_type = interface_type
  80. self.ip_address = ip_address
  81. + self.variables = variables
  82.  
  83. def items(self):
  84. return iter(self.__dict__.items())
  85.  
  86.  
  87. -NETINTERFACE1 = NetInterface(
  88. - 'NetworkDevice1', 1, 'interface_type1', '10.10.0.1'
  89. -)
  90. +NETINTERFACE1 = NetInterface("NetInterface", 1, 1, "interface_type1",
  91. + "10.10.0.1",
  92. + {"key1": "value1", "key2": "value2"})
  93. +
  94. +NETINTERFACE2 = NetInterface("Sample", 2, 1, "Sample1", "10.0.0.2", {"a": "b"})
  95. NETINTERFACE_LIST1 = [NETINTERFACE1]
  96. diff --git a/craton/tests/unit/test_api.py b/craton/tests/unit/test_api.py
  97. index 33e4747..3fa47de 100644
  98. --- a/craton/tests/unit/test_api.py
  99. +++ b/craton/tests/unit/test_api.py
  100. @@ -1,5 +1,6 @@
  101. import mock
  102. import uuid
  103. +import pdb
  104.  
  105. from oslo_serialization import jsonutils
  106.  
  107. @@ -538,6 +539,18 @@ class APIV1NetworksTest(APIV1Test):
  108. resp = self.get('/v1/networks?region_id=1')
  109. self.assertEqual(len(resp.json), 2)
  110.  
  111. + @mock.patch.object(dbapi, 'networks_get_by_id')
  112. + def test_networks_get_by_id(self, mock_network):
  113. + mock_network.return_value = fake_resources.NETWORK1
  114. + resp = self.get('v1/networks/1')
  115. + self.assertEqual(resp.json["name"], fake_resources.NETWORK1.name)
  116. +
  117. + @mock.patch.object(dbapi, 'networks_get_by_id')
  118. + def test_networks_get_by_bad_id_is_404(self, mock_network):
  119. + mock_network.side_effect = exceptions.NotFound()
  120. + resp = self.get('v1/networks/9')
  121. + self.assertEqual(404, resp.status_code)
  122. +
  123. @mock.patch.object(dbapi, 'networks_get_by_region')
  124. def test_get_networks_by_non_existing_region_raises404(self, fake_network):
  125. fake_network.side_effect = exceptions.NotFound()
  126. @@ -561,6 +574,54 @@ class APIV1NetworksTest(APIV1Test):
  127. resp = self.post('/v1/networks', data=data)
  128. self.assertEqual(200, resp.status_code)
  129.  
  130. + @mock.patch.object(dbapi, 'networks_create')
  131. + def test_create_networks_with_invalid_data(self, mock_network):
  132. + mock_network.return_value = None
  133. + # data is missing entries
  134. + data = {'region_id': 1}
  135. + resp = self.post('v1/networks', data=data)
  136. + self.assertEqual(422, resp.status_code)
  137. +
  138. + @mock.patch.object(dbapi, 'networks_update')
  139. + def test_update_network(self, mock_network):
  140. + mock_network.return_value = fake_resources.NETWORK1
  141. + payload = {"name": "Network_New1"}
  142. + resp = self.put('v1/networks/1', data=payload)
  143. + self.assertTrue(resp.json['name'], payload['name'])
  144. + self.assertEqual(resp.status_code, 200)
  145. +
  146. + @mock.patch.object(dbapi, 'networks_delete')
  147. + def test_delete_network(self, mock_network):
  148. + resp = self.delete('v1/networks/1')
  149. + self.assertEqual(204, resp.status_code)
  150. +
  151. + @mock.patch.object(dbapi, 'networks_variables_update')
  152. + def test_networks_put_variables(self, mock_network):
  153. + mock_network.return_value = fake_resources.NETWORK1
  154. + payload = {"a": "b"}
  155. + resp = self.put('v1/networks/1/variables', data=payload)
  156. + self.assertEqual(resp.status_code, 200)
  157. +
  158. + @mock.patch.object(dbapi, 'networks_variables_update')
  159. + def test_network_put_variable(self, mock_network):
  160. + mock_network.return_value = fake_resources.NETWORK1
  161. + payload = {"a": "b"}
  162. + resp = self.put('v1/networks/1/variables', data=payload)
  163. + self.assertEqual(resp.status_code, 200)
  164. +
  165. + @mock.patch.object(dbapi, 'networks_get_by_id')
  166. + def test_network_get_variables(self, mock_network):
  167. + mock_network.return_value = fake_resources.NETWORK2
  168. + resp = self.get('v1/networks/2/variables')
  169. + expected = {"variables": {"pkey1": "pvalue1"}}
  170. + self.assertEqual(resp.json, expected)
  171. +
  172. + @mock.patch.object(dbapi, 'networks_variables_delete')
  173. + def test_network_variables_delete(self, mock_network):
  174. + payload = {"key1": "value1"}
  175. + resp = self.delete('v1/networks/1/variables', data=payload)
  176. + self.assertEqual(resp.status_code, 204)
  177. +
  178.  
  179. class APIV1NetDevicesTest(APIV1Test):
  180. @mock.patch.object(dbapi, 'netdevices_get_by_region')
  181. @@ -575,10 +636,65 @@ class APIV1NetDevicesTest(APIV1Test):
  182. resp = self.get(path_query)
  183. device_resp = fake_resources.NETDEVICE_LIST1
  184. self.assertEqual(len(resp.json), 1)
  185. - self.assertEqual(resp.json[0]["ip_address"], device_resp[0].ip_address)
  186. -
  187. + self.assertEqual(resp.json[0]["ip_address"],
  188. + device_resp[0].ip_address)
  189. fake_devices.assert_called_once_with(mock.ANY, region_id, filters)
  190.  
  191. + @mock.patch.object(dbapi, 'netdevices_get_by_region')
  192. + def test_netdevices_get_by_region(self, mock_devices):
  193. + mock_devices.return_value = fake_resources.NETDEVICE_LIST1
  194. + resp = self.get('/v1/netdevices/1')
  195. + self.assertEqual(len(resp.json), 2)
  196. +
  197. + @mock.patch.object(dbapi, 'netdevices_get_by_id')
  198. + def test_get_netdevices_get_by_id(self, mock_devices):
  199. + mock_devices.return_value = fake_resources.NETDEVICE1
  200. + resp = self.get('/v1/netdevices/1')
  201. + self.assertEqual(resp.json["hostname"],
  202. + fake_resources.NETDEVICE1.hostname)
  203. +
  204. + @mock.patch.object(dbapi, 'netdevices_create')
  205. + def test_create_netdevices_with_valid_data(self, mock_devices):
  206. + mock_devices.return_value = None
  207. + data = {'hostname': 'NewNetDevice1', 'region_id': 1,
  208. + 'device_type': 'Sample', 'ip_address': '0.0.0.0'}
  209. + resp = self.post('/v1/netdevices', data=data)
  210. + self.assertEqual(200, resp.status_code)
  211. +
  212. + @mock.patch.object(dbapi, 'netdevices_create')
  213. + def test_create_netdevices_with_invalid_data(self, mock_devices):
  214. + mock_devices.return_value = None
  215. + # data is missing entry
  216. + data = {'hostname': 'Sample'}
  217. + resp = self.post('/v1/netdevices', data=data)
  218. + self.assertEqual(422, resp.status_code)
  219. +
  220. + @mock.patch.object(dbapi, 'netdevices_delete')
  221. + def test_delete_netdevices(self, mock_devices):
  222. + resp = self.delete('v1/netdevices/1')
  223. + self.assertEqual(204, resp.status_code)
  224. +
  225. + @mock.patch.object(dbapi, 'netdevices_variables_delete')
  226. + def test_netdevices_variables_delete(self, mock_devices):
  227. + payload = {"key1": "value1"}
  228. + resp = self.delete('v1/netdevices/1/variables', data=payload)
  229. + self.assertEqual(resp.status_code, 204)
  230. +
  231. + @mock.patch.object(dbapi, 'netdevices_variables_update')
  232. + def test_netdevices_variables_update(self, mock_devices):
  233. + mock_devices.return_value = fake_resources.NETDEVICE1
  234. + payload = {"a": "b"}
  235. + resp = self.put('v1/netdevices/1/variables', data=payload)
  236. + self.assertEqual(resp.status_code, 200)
  237. +
  238. + @mock.patch.object(dbapi, 'netdevices_labels_update')
  239. + def test_netdevices_labels_update(self, mock_devices):
  240. + payload = {"labels": ["a", "b"]}
  241. + mock_devices.return_value = fake_resources.NETDEVICE1
  242. + resp = self.put('v1/netdevices/1/labels', data=payload)
  243. + self.assertEqual(200, resp.status_code)
  244. + self.assertEqual(resp.json, payload)
  245. +
  246.  
  247. class APIV1NetInterfacesTest(APIV1Test):
  248. @mock.patch.object(dbapi, 'net_interfaces_get_by_device')
  249. @@ -596,3 +712,41 @@ class APIV1NetInterfacesTest(APIV1Test):
  250. self.assertEqual(resp.json[0]["name"], interface_resp[0].name)
  251.  
  252. fake_interfaces.assert_called_once_with(mock.ANY, device_id, filters)
  253. +
  254. + @mock.patch.object(dbapi, 'net_interfaces_get_by_device')
  255. + def test_get_netinterfaces_by_device_id(self, fake_interfaces):
  256. + pdb.set_trace()
  257. + fake_interfaces.return_value = fake_resources.NETINTERFACE2
  258. + resp = self.get('/v1/net_interfaces?device_id=2')
  259. + print(resp.json)
  260. + netinterface_resp = fake_resources.NETINTERFACE2
  261. +# self.assertEqual(len(resp.json), len())
  262. + self.assertEqual(resp.json[0]["name"], netinterface_resp.name)
  263. +
  264. + @mock.patch.object(dbapi, 'net_interfaces_get_by_id')
  265. + def test_get_netinterfaces_by_id(self, fake_interfaces):
  266. + fake_interfaces.return_value = fake_resources.NETINTERFACE1
  267. + resp = self.get('/v1/net_interfaces/1')
  268. + self.assertEqual(resp.json["name"],
  269. + fake_resources.NETINTERFACE1.name)
  270. +
  271. + @mock.patch.object(dbapi, 'net_interfaces_create')
  272. + def test_netinterfaces_create_with_Valid_data(self, fake_interfaces):
  273. + fake_interfaces.return_value = None
  274. + data = {'name': 'NewNetInterface', 'device_id': 1,
  275. + 'ip_address': '0.0.0.0', 'interface_type': 'Sample'}
  276. + resp = self.post('/v1/net_interfaces', data=data)
  277. + self.assertEqual(200, resp.status_code)
  278. +
  279. + @mock.patch.object(dbapi, 'net_interfaces_create')
  280. + def test_netinterfaces_create_with_Invalid_data(self, fake_interfaces):
  281. + fake_interfaces.return_value = fake_resources.NETINTERFACE1
  282. + # data is missing entry
  283. + data = {'name': 'sample'}
  284. + resp = self.post('/v1/net_interfaces', data=data)
  285. + self.assertEqual(422, resp.status_code)
  286. +
  287. + @mock.patch.object(dbapi, 'net_interfaces_delete')
  288. + def test_netinterfaces_update(self, fake_interfaces):
  289. + resp = self.delete('/v1/net_interfaces/1')
  290. + self.assertEqual(204, resp.status_code)
  291. diff --git a/etc/craton-api-conf.sample b/etc/craton-api-conf.sample
  292. index 3253a95..afd39d7 100644
  293. --- a/etc/craton-api-conf.sample
  294. +++ b/etc/craton-api-conf.sample
  295. @@ -6,11 +6,11 @@ log_file=craton-api.log
  296.  
  297. [api]
  298. # Host IP to use for API service
  299. -host=0.0.0.0
  300. +host=127.0.0.1
  301. # Port to use for API service
  302. -port=8080
  303. +port=8081
  304. # Paste Config file to use
  305. -api_paste_config=/craton/etc/craton-api-paste.ini
  306. +api_paste_config=/home/ubuntu/craton/etc/craton-api-paste.ini
  307. # The name of the Paste pipeline to use for Craton.
  308. #
  309. # Pipelines are organized according to authentication scheme. The available
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement