test_gateway_api.py 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. from __future__ import annotations
  2. import unittest
  3. from unittest.mock import patch
  4. from data_collector_mcp import gateway_api
  5. class GatewayApiTests(unittest.TestCase):
  6. def test_modbus_point_collect_test_posts_gateway_payload(self) -> None:
  7. response = {"code": 0, "msg": "success", "data": {"points": []}}
  8. with patch(
  9. "data_collector_mcp.gateway_api.find_project_config",
  10. return_value={"project_key": "dev-01", "base_url": "http://gateway.test"},
  11. ), patch(
  12. "data_collector_mcp.gateway_api.request_json",
  13. return_value=response,
  14. ) as request_json:
  15. result = gateway_api.modbus_point_collect_test(
  16. "dev-01",
  17. ip="192.168.1.10",
  18. port=502,
  19. slave_id=1,
  20. points=[{"function_code": 3, "address": 7, "type": "int16"}],
  21. )
  22. self.assertEqual(result, response)
  23. request_json.assert_called_once_with(
  24. "POST",
  25. "http://gateway.test/api/dc-gateway/modbus/read_points",
  26. json_payload={
  27. "device_type": "ModbusTCP",
  28. "ip": "192.168.1.10",
  29. "port": 502,
  30. "word_byte_order": "ABCD",
  31. "address_base": 0,
  32. "slave_id": 1,
  33. "points": [{"function_code": 3, "address": 7, "type": "int16"}],
  34. },
  35. )
  36. def test_modbus_point_collect_test_keeps_custom_word_byte_order(self) -> None:
  37. with patch(
  38. "data_collector_mcp.gateway_api.find_project_config",
  39. return_value={"project_key": "dev-01", "base_url": "http://gateway.test"},
  40. ), patch(
  41. "data_collector_mcp.gateway_api.request_json",
  42. return_value={"code": 0},
  43. ) as request_json:
  44. gateway_api.modbus_point_collect_test(
  45. "dev-01",
  46. ip="192.168.1.10",
  47. port=502,
  48. slave_id=1,
  49. word_byte_order="DCBA",
  50. address_base=1,
  51. points=[{"function_code": 4, "address": 0, "type": "float32"}],
  52. )
  53. payload = request_json.call_args.kwargs["json_payload"]
  54. self.assertEqual(payload["word_byte_order"], "DCBA")
  55. self.assertEqual(payload["address_base"], 1)
  56. def test_bacnet_point_collect_test_posts_gateway_payload(self) -> None:
  57. response = {"code": 0, "msg": "success", "data": {"points": []}}
  58. with patch(
  59. "data_collector_mcp.gateway_api.find_project_config",
  60. return_value={"project_key": "dev-01", "base_url": "http://gateway.test"},
  61. ), patch(
  62. "data_collector_mcp.gateway_api.request_json",
  63. return_value=response,
  64. ) as request_json:
  65. result = gateway_api.bacnet_point_collect_test(
  66. "dev-01",
  67. ip="192.168.1.20",
  68. bacnet_device_id=12345,
  69. points=[{"object_type": "AnalogInput", "object_id": 1}],
  70. )
  71. self.assertEqual(result, response)
  72. request_json.assert_called_once_with(
  73. "POST",
  74. "http://gateway.test/api/dc-gateway/bacnet/read_points",
  75. json_payload={
  76. "ip": "192.168.1.20",
  77. "bacnet_device_id": 12345,
  78. "port": 47808,
  79. "points": [{"object_type": "AnalogInput", "object_id": 1}],
  80. },
  81. )
  82. def test_bacnet_point_search_posts_gateway_payload(self) -> None:
  83. response = {"code": 0, "msg": "success", "data": {"points": []}}
  84. with patch(
  85. "data_collector_mcp.gateway_api.find_project_config",
  86. return_value={"project_key": "dev-01", "base_url": "http://gateway.test"},
  87. ), patch(
  88. "data_collector_mcp.gateway_api.request_json",
  89. return_value=response,
  90. ) as request_json:
  91. result = gateway_api.bacnet_point_search(
  92. "dev-01",
  93. ip="192.168.1.20",
  94. bacnet_device_id=12345,
  95. port=47809,
  96. )
  97. self.assertEqual(result, response)
  98. request_json.assert_called_once_with(
  99. "POST",
  100. "http://gateway.test/api/dc-gateway/bacnet/search_points",
  101. json_payload={
  102. "ip": "192.168.1.20",
  103. "bacnet_device_id": 12345,
  104. "port": 47809,
  105. },
  106. )
  107. def test_s7_raw_read_posts_gateway_payload(self) -> None:
  108. response = {"code": 0, "msg": "success", "data": {"communication": []}}
  109. with patch(
  110. "data_collector_mcp.gateway_api.find_project_config",
  111. return_value={"project_key": "dev-01", "base_url": "http://gateway.test"},
  112. ), patch(
  113. "data_collector_mcp.gateway_api.request_json",
  114. return_value=response,
  115. ) as request_json:
  116. result = gateway_api.s7_raw_read(
  117. "dev-01",
  118. ip="192.168.1.10",
  119. rock=0,
  120. slot=1,
  121. read={"area": "DB", "db": 1, "start": 0, "size": 4},
  122. )
  123. self.assertEqual(result, response)
  124. request_json.assert_called_once_with(
  125. "POST",
  126. "http://gateway.test/api/dc-gateway/s7/read",
  127. json_payload={
  128. "device_type": "S7-1200",
  129. "ip": "192.168.1.10",
  130. "port": 102,
  131. "rock": 0,
  132. "slot": 1,
  133. "tsap_conn_type": "PG",
  134. "read": {"area": "DB", "db": 1, "start": 0, "size": 4},
  135. },
  136. )
  137. def test_s7_point_collect_test_posts_gateway_payload(self) -> None:
  138. response = {"code": 0, "msg": "success", "data": {"points": []}}
  139. with patch(
  140. "data_collector_mcp.gateway_api.find_project_config",
  141. return_value={"project_key": "dev-01", "base_url": "http://gateway.test"},
  142. ), patch(
  143. "data_collector_mcp.gateway_api.request_json",
  144. return_value=response,
  145. ) as request_json:
  146. result = gateway_api.s7_point_collect_test(
  147. "dev-01",
  148. ip="192.168.1.10",
  149. port=1102,
  150. rock=0,
  151. slot=1,
  152. tsap_conn_type="OP",
  153. points=[{"area": "DB", "db": 1, "start": 0, "type": "float32"}],
  154. )
  155. self.assertEqual(result, response)
  156. request_json.assert_called_once_with(
  157. "POST",
  158. "http://gateway.test/api/dc-gateway/s7/read_points",
  159. json_payload={
  160. "device_type": "S7-1200",
  161. "ip": "192.168.1.10",
  162. "port": 1102,
  163. "rock": 0,
  164. "slot": 1,
  165. "tsap_conn_type": "OP",
  166. "points": [{"area": "DB", "db": 1, "start": 0, "type": "float32"}],
  167. },
  168. )
  169. def test_s7_point_collect_test_defaults_smart200_tsap_to_op(self) -> None:
  170. with patch(
  171. "data_collector_mcp.gateway_api.find_project_config",
  172. return_value={"project_key": "dev-01", "base_url": "http://gateway.test"},
  173. ), patch(
  174. "data_collector_mcp.gateway_api.request_json",
  175. return_value={"code": 0},
  176. ) as request_json:
  177. gateway_api.s7_point_collect_test(
  178. "dev-01",
  179. ip="192.168.1.10",
  180. rock=0,
  181. slot=1,
  182. device_type="S7-Smart200",
  183. points=[{"area": "V", "start": 0, "type": "int16"}],
  184. )
  185. payload = request_json.call_args.kwargs["json_payload"]
  186. self.assertEqual(payload["device_type"], "S7-Smart200")
  187. self.assertEqual(payload["tsap_conn_type"], "OP")
  188. def test_s7_connect_scan_posts_ip_only(self) -> None:
  189. response = {"code": 0, "msg": "success", "data": {"available": []}}
  190. with patch(
  191. "data_collector_mcp.gateway_api.find_project_config",
  192. return_value={"project_key": "dev-01", "base_url": "http://gateway.test"},
  193. ), patch(
  194. "data_collector_mcp.gateway_api.request_json",
  195. return_value=response,
  196. ) as request_json:
  197. result = gateway_api.s7_connect_scan("dev-01", ip="192.168.1.10")
  198. self.assertEqual(result, response)
  199. request_json.assert_called_once_with(
  200. "POST",
  201. "http://gateway.test/api/dc-gateway/s7/connect_scan",
  202. json_payload={"ip": "192.168.1.10"},
  203. )
  204. if __name__ == "__main__":
  205. unittest.main()