ControllerTest.cpp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. /******************************************************************
  2. *
  3. * uEcho for C
  4. *
  5. * Copyright (C) Satoshi Konno 2015
  6. *
  7. * This is licensed under BSD-style license, see file COPYING.
  8. *
  9. ******************************************************************/
  10. #include <boost/test/unit_test.hpp>
  11. #include <uecho/_controller.h>
  12. #include <uecho/util/timer.h>
  13. #include "TestDevice.h"
  14. BOOST_AUTO_TEST_CASE(ControllerRun)
  15. {
  16. uEchoController* ctrl = uecho_controller_new();
  17. BOOST_CHECK(!uecho_controller_getuserdata(ctrl));
  18. BOOST_CHECK(uecho_controller_start(ctrl));
  19. BOOST_CHECK(uecho_controller_stop(ctrl));
  20. uecho_controller_delete(ctrl);
  21. }
  22. BOOST_AUTO_TEST_CASE(ControllerOption)
  23. {
  24. uEchoController* ctrl = uecho_controller_new();
  25. BOOST_CHECK_EQUAL(uecho_controller_isoptionenabled(ctrl, uEchoOptionNone), false);
  26. BOOST_CHECK_EQUAL(uecho_controller_isoptionenabled(ctrl, uEchoControllerOptionDisableUdpServer), false);
  27. uecho_controller_enableoption(ctrl, uEchoControllerOptionDisableUdpServer);
  28. BOOST_CHECK_EQUAL(uecho_controller_isoptionenabled(ctrl, uEchoControllerOptionDisableUdpServer), true);
  29. uecho_controller_disableoption(ctrl, uEchoControllerOptionDisableUdpServer);
  30. BOOST_CHECK_EQUAL(uecho_controller_isoptionenabled(ctrl, uEchoControllerOptionDisableUdpServer), false);
  31. uecho_controller_delete(ctrl);
  32. }
  33. BOOST_AUTO_TEST_CASE(ControllerUdpOption)
  34. {
  35. uEchoController* ctrl = uecho_controller_new();
  36. BOOST_CHECK_EQUAL(uecho_controller_isudpserverenabled(ctrl), true);
  37. BOOST_CHECK_EQUAL(uecho_server_isudpserverenabled(ctrl->node->server), true);
  38. uecho_controller_disableudpserver(ctrl);
  39. BOOST_CHECK_EQUAL(uecho_controller_isudpserverenabled(ctrl), false);
  40. BOOST_CHECK_EQUAL(uecho_server_isudpserverenabled(ctrl->node->server), false);
  41. uecho_controller_enableudpserver(ctrl);
  42. BOOST_CHECK_EQUAL(uecho_controller_isudpserverenabled(ctrl), true);
  43. BOOST_CHECK_EQUAL(uecho_server_isudpserverenabled(ctrl->node->server), true);
  44. uecho_controller_delete(ctrl);
  45. }
  46. BOOST_AUTO_TEST_CASE(ControllerRequest)
  47. {
  48. // Create Controller (Disable UDP Server)
  49. uEchoController* ctrl = uecho_controller_new();
  50. BOOST_CHECK(uecho_controller_start(ctrl));
  51. BOOST_CHECK(uecho_controller_isrunning(ctrl));
  52. // Add Device
  53. uEchoNode* node = uecho_controller_getlocalnode(ctrl);
  54. uEchoObject* dev = uecho_test_createtestdevice();
  55. BOOST_CHECK(uecho_node_addobject(node, dev));
  56. // Search (NotificationRequest instead of ReadRequest)
  57. BOOST_CHECK(uecho_controller_searchwithesv(ctrl, uEchoEsvNotificationRequest));
  58. // Find device
  59. uEchoObject* found_obj = uecho_controller_getobjectbycodewithwait(ctrl, UECHO_TEST_OBJECTCODE, UECHO_TEST_RESPONSE_WAIT_MAX_MTIME);
  60. BOOST_CHECK(found_obj);
  61. if (!found_obj)
  62. return;
  63. uEchoNode* found_node = uecho_object_getparentnode(found_obj);
  64. BOOST_CHECK(found_node);
  65. if (!found_node)
  66. return;
  67. // Post Message (ReadRequest)
  68. uEchoMessage* msg = uecho_message_new();
  69. uecho_message_setesv(msg, uEchoEsvReadRequest);
  70. uecho_message_setdestinationobjectcode(msg, uecho_object_getcode(found_obj));
  71. BOOST_CHECK(uecho_message_setproperty(msg, UECHO_TEST_PROPERTY_SWITCHCODE, NULL, 0));
  72. uEchoMessage* res = uecho_message_new();
  73. BOOST_CHECK(uecho_controller_postmessage(ctrl, found_node, msg, res));
  74. BOOST_CHECK_EQUAL(uecho_message_getopc(res), 1);
  75. BOOST_CHECK_EQUAL(uecho_message_getesv(res), uEchoEsvReadResponse);
  76. uEchoProperty* prop = uecho_message_getproperty(res, 0);
  77. BOOST_CHECK(prop);
  78. if (!prop)
  79. return;
  80. BOOST_CHECK_EQUAL(uecho_property_getcode(prop), UECHO_TEST_PROPERTY_SWITCHCODE);
  81. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), 1);
  82. byte* prop_data = uecho_property_getdata(prop);
  83. BOOST_CHECK(prop_data);
  84. BOOST_CHECK_EQUAL(prop_data[0], UECHO_TEST_PROPERTY_SWITCH_DEFAULT);
  85. uecho_message_delete(res);
  86. uecho_message_delete(msg);
  87. // Post Write Message (WriteRequest:OFF)
  88. msg = uecho_message_new();
  89. uecho_message_setesv(msg, uEchoEsvWriteRequestResponseRequired);
  90. uecho_message_setdestinationobjectcode(msg, uecho_object_getcode(found_obj));
  91. byte post_byte = UECHO_TEST_PROPERTY_SWITCH_OFF;
  92. BOOST_CHECK(uecho_message_setproperty(msg, UECHO_TEST_PROPERTY_SWITCHCODE, &post_byte, 1));
  93. res = uecho_message_new();
  94. BOOST_CHECK(uecho_controller_postmessage(ctrl, found_node, msg, res));
  95. BOOST_CHECK_EQUAL(uecho_message_getopc(res), 1);
  96. BOOST_CHECK_EQUAL(uecho_message_getesv(res), uEchoEsvWriteResponse);
  97. prop = uecho_message_getproperty(res, 0);
  98. BOOST_CHECK(prop);
  99. if (!prop)
  100. return;
  101. BOOST_CHECK_EQUAL(uecho_property_getcode(prop), UECHO_TEST_PROPERTY_SWITCHCODE);
  102. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), 0);
  103. uecho_message_delete(res);
  104. uecho_message_delete(msg);
  105. // Post Message (ReadRequest)
  106. msg = uecho_message_new();
  107. uecho_message_setesv(msg, uEchoEsvReadRequest);
  108. uecho_message_setdestinationobjectcode(msg, uecho_object_getcode(found_obj));
  109. BOOST_CHECK(uecho_message_setproperty(msg, UECHO_TEST_PROPERTY_SWITCHCODE, NULL, 0));
  110. res = uecho_message_new();
  111. BOOST_CHECK(uecho_controller_postmessage(ctrl, found_node, msg, res));
  112. BOOST_CHECK_EQUAL(uecho_message_getopc(res), 1);
  113. BOOST_CHECK_EQUAL(uecho_message_getesv(res), uEchoEsvReadResponse);
  114. prop = uecho_message_getproperty(res, 0);
  115. BOOST_CHECK(prop);
  116. if (!prop)
  117. return;
  118. BOOST_CHECK_EQUAL(uecho_property_getcode(prop), UECHO_TEST_PROPERTY_SWITCHCODE);
  119. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), 1);
  120. prop_data = uecho_property_getdata(prop);
  121. BOOST_CHECK(prop_data);
  122. BOOST_CHECK_EQUAL(prop_data[0], UECHO_TEST_PROPERTY_SWITCH_OFF);
  123. uecho_message_delete(res);
  124. uecho_message_delete(msg);
  125. // Teminate
  126. BOOST_CHECK(uecho_controller_stop(ctrl));
  127. uecho_controller_delete(ctrl);
  128. }