DeviceTest.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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/device.h>
  13. #include "TestDevice.h"
  14. BOOST_AUTO_TEST_CASE(DeviceSuperClassMandatoryProperties)
  15. {
  16. uEchoObject* obj = uecho_device_new();
  17. BOOST_CHECK(uecho_object_hasproperty(obj, uEchoDeviceAnnoPropertyMap));
  18. BOOST_CHECK(uecho_object_hasproperty(obj, uEchoDeviceSetPropertyMap));
  19. BOOST_CHECK(uecho_object_hasproperty(obj, uEchoDeviceGetPropertyMap));
  20. BOOST_CHECK(uecho_object_hasproperty(obj, uEchoDeviceOperatingStatus));
  21. BOOST_CHECK(uecho_object_hasproperty(obj, uEchoDeviceInstallationLocation));
  22. BOOST_CHECK(uecho_object_hasproperty(obj, uEchoDeviceStandardVersion));
  23. BOOST_CHECK(uecho_object_hasproperty(obj, uEchoDeviceFaultStatus));
  24. BOOST_CHECK(uecho_object_hasproperty(obj, uEchoDeviceManufacturerCode));
  25. uecho_object_delete(obj);
  26. }
  27. BOOST_AUTO_TEST_CASE(DeviceDefaultProperties)
  28. {
  29. uEchoObject* obj = uecho_device_new();
  30. BOOST_CHECK_EQUAL(uecho_device_isoperatingstatus(obj), true);
  31. BOOST_CHECK_EQUAL(uecho_device_isfaultstatus(obj), false);
  32. BOOST_CHECK_EQUAL(uecho_device_getinstallationlocation(obj), (byte)uEchoDeviceInstallationLocationUnknown);
  33. BOOST_CHECK_EQUAL(uecho_device_getstandardversion(obj), (char)uEchoDeviceVersionAppendixDefault);
  34. BOOST_CHECK_EQUAL(uecho_device_getmanufacturercode(obj), (uEchoManufactureCode)uEchoManufactureCodeDefault);
  35. uecho_object_delete(obj);
  36. }
  37. BOOST_AUTO_TEST_CASE(DeviceRequest)
  38. {
  39. uEchoMessage* msg;
  40. byte prop_byte;
  41. // Create Controller (Disable UDP Server)
  42. uEchoController* ctrl = uecho_controller_new();
  43. BOOST_CHECK(uecho_controller_start(ctrl));
  44. BOOST_CHECK(uecho_controller_isrunning(ctrl));
  45. // Add Device
  46. uEchoNode* node = uecho_controller_getlocalnode(ctrl);
  47. uEchoObject* dev = uecho_test_createtestdevice();
  48. BOOST_CHECK(uecho_node_addobject(node, dev));
  49. // Start Controller and Device
  50. BOOST_CHECK(uecho_controller_start(ctrl));
  51. BOOST_CHECK(uecho_controller_isrunning(ctrl));
  52. // Search (NotificationRequest instead of ReadRequest)
  53. BOOST_CHECK(uecho_controller_searchwithesv(ctrl, uEchoEsvNotificationRequest));
  54. // Find device
  55. uEchoObject* found_obj = uecho_controller_getobjectbycodewithwait(ctrl, UECHO_TEST_OBJECTCODE, UECHO_TEST_RESPONSE_WAIT_MAX_MTIME);
  56. BOOST_CHECK(found_obj);
  57. if (!found_obj)
  58. return;
  59. uEchoNode* found_node = uecho_object_getparentnode(found_obj);
  60. BOOST_CHECK(found_node);
  61. if (!found_node)
  62. return;
  63. // Send Message (ReadRequest)
  64. msg = uecho_message_new();
  65. uecho_message_setesv(msg, uEchoEsvReadRequest);
  66. uecho_message_setdestinationobjectcode(msg, uecho_object_getcode(found_obj));
  67. BOOST_CHECK(uecho_message_setproperty(msg, UECHO_TEST_PROPERTY_SWITCHCODE, NULL, 0));
  68. BOOST_CHECK(uecho_controller_sendmessage(ctrl, found_node, msg));
  69. uecho_message_delete(msg);
  70. // Check Property (Defult:ON)
  71. uEchoProperty* found_prop = uecho_object_getpropertywait(found_obj, UECHO_TEST_PROPERTY_SWITCHCODE, UECHO_TEST_RESPONSE_WAIT_MAX_MTIME);
  72. BOOST_CHECK(found_prop);
  73. for (int n = 0; n < uEchoWaitRetryCount; n++) {
  74. uecho_sleep(UECHO_TEST_RESPONSE_WAIT_MAX_MTIME / uEchoWaitRetryCount);
  75. if (!uecho_property_getbytedata(found_prop, &prop_byte))
  76. continue;
  77. if (prop_byte == UECHO_TEST_PROPERTY_SWITCH_DEFAULT)
  78. break;
  79. }
  80. BOOST_CHECK(uecho_property_getbytedata(found_prop, &prop_byte));
  81. BOOST_CHECK_EQUAL(prop_byte, UECHO_TEST_PROPERTY_SWITCH_DEFAULT);
  82. // Send Message (WriteRequest:OFF)
  83. prop_byte = UECHO_TEST_PROPERTY_SWITCH_OFF;
  84. msg = uecho_message_new();
  85. uecho_message_setesv(msg, uEchoEsvWriteRequest);
  86. uecho_message_setdestinationobjectcode(msg, uecho_object_getcode(found_obj));
  87. BOOST_CHECK(uecho_message_setproperty(msg, UECHO_TEST_PROPERTY_SWITCHCODE, &prop_byte, 1));
  88. BOOST_CHECK(uecho_controller_sendmessage(ctrl, found_node, msg));
  89. uecho_message_delete(msg);
  90. // Send Message (ReadRequest)
  91. msg = uecho_message_new();
  92. uecho_message_setesv(msg, uEchoEsvReadRequest);
  93. uecho_message_setdestinationobjectcode(msg, uecho_object_getcode(found_obj));
  94. BOOST_CHECK(uecho_message_setproperty(msg, UECHO_TEST_PROPERTY_SWITCHCODE, NULL, 0));
  95. BOOST_CHECK(uecho_controller_sendmessage(ctrl, found_node, msg));
  96. uecho_message_delete(msg);
  97. // Check Property Update (OFF)
  98. bool prop_changed = false;
  99. for (int n = 0; n < uEchoWaitRetryCount; n++) {
  100. uecho_sleep(UECHO_TEST_RESPONSE_WAIT_MAX_MTIME / uEchoWaitRetryCount);
  101. if (!uecho_property_getbytedata(found_prop, &prop_byte))
  102. continue;
  103. if (prop_byte == UECHO_TEST_PROPERTY_SWITCH_OFF) {
  104. prop_changed = true;
  105. break;
  106. }
  107. }
  108. BOOST_CHECK(prop_changed);
  109. // Send Message (WriteReadRequest:ON)
  110. prop_byte = UECHO_TEST_PROPERTY_SWITCH_ON;
  111. msg = uecho_message_new();
  112. uecho_message_setesv(msg, uEchoEsvWriteReadRequest);
  113. uecho_message_setdestinationobjectcode(msg, uecho_object_getcode(found_obj));
  114. BOOST_CHECK(uecho_message_setpropertyset(msg, UECHO_TEST_PROPERTY_SWITCHCODE, &prop_byte, 1));
  115. BOOST_CHECK(uecho_message_setpropertyget(msg, UECHO_TEST_PROPERTY_SWITCHCODE, NULL, 0));
  116. BOOST_CHECK(uecho_controller_sendmessage(ctrl, found_node, msg));
  117. uecho_message_delete(msg);
  118. // Check Property Update (ON)
  119. prop_changed = false;
  120. for (int n = 0; n < uEchoWaitRetryCount; n++) {
  121. uecho_sleep(UECHO_TEST_RESPONSE_WAIT_MAX_MTIME / uEchoWaitRetryCount);
  122. if (!uecho_property_getbytedata(found_prop, &prop_byte))
  123. continue;
  124. if (prop_byte == UECHO_TEST_PROPERTY_SWITCH_ON) {
  125. prop_changed = true;
  126. break;
  127. }
  128. }
  129. BOOST_CHECK(prop_changed);
  130. // Teminate
  131. BOOST_CHECK(uecho_controller_stop(ctrl));
  132. uecho_controller_delete(ctrl);
  133. }