Feature/bacnet secure connect hub (#818)

* Added BACnet Secure Connect datalink.

* Added BACnet/SC hub application
---------

Co-authored-by: Kirill Neznamov <kirill.neznamov@dsr-corporation.com>
Co-authored-by: Mikhail Antropov <michail.antropov@dsr-corporation.com>
Co-authored-by: Ondřej Hruška <ondra@ondrovo.com>
Co-authored-by: Patrick Grimm <patrick@lunatiki.de>
This commit is contained in:
Steve Karg
2024-11-04 07:05:26 -06:00
committed by GitHub
parent 90cdc4920b
commit cf77abac9b
161 changed files with 82982 additions and 23 deletions
+1
View File
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -61,6 +61,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -62,6 +62,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -59,6 +59,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -58,6 +58,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -58,6 +58,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -62,6 +62,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -59,6 +59,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -58,6 +58,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -62,6 +62,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/property_test.c
@@ -59,6 +59,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -63,6 +63,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -62,6 +62,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
@@ -62,6 +62,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
@@ -66,6 +66,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/apdu_mock.c
@@ -65,6 +65,8 @@ static void test_BACnet_File_Object(void)
required_property++;
}
bacfile_cleanup();
return;
}
/**
@@ -63,6 +63,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
@@ -63,6 +63,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/property_test.c
@@ -62,6 +62,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
@@ -61,6 +61,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
@@ -62,6 +62,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
@@ -61,6 +61,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/dailyschedule.c
# Test and test library files
@@ -64,6 +64,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/property_test.c
@@ -63,6 +63,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
@@ -63,6 +63,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
@@ -61,6 +61,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/property_test.c
@@ -64,6 +64,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/property_test.c
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/memcopy.c
# Test and test library files
./src/main.c
@@ -107,6 +107,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
./stubs.c
# Test and test library files
./src/main.c
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
@@ -70,6 +70,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/datetime_local.c
@@ -64,6 +64,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -62,6 +62,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/property_test.c
@@ -59,6 +59,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
@@ -61,6 +61,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
@@ -64,6 +64,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./stubs.c
./src/main.c
@@ -13,6 +13,11 @@ string(REGEX REPLACE
"/src"
SRC_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-zA-Z_/-]*$"
"/ports"
PORTS_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-zA-Z_/-]*$"
"/test"
@@ -23,6 +28,13 @@ set(ZTST_DIR "${TST_DIR}/ztest/src")
add_compile_definitions(
BIG_ENDIAN=0
CONFIG_ZTEST=1
BACDL_BSC=1
BACNET_SECURE_CONNECT_ROUTING_TABLE=1
BSC_CONF_HUB_FUNCTIONS_NUM=1
BSC_CONF_HUB_CONNECTORS_NUM=1
BACNET_SC_DIRECT_ACCEPT_URI_MAX=6
MAX_TSM_TRANSACTIONS=0
BSC_CONF_TX_PRE=0
)
include_directories(
@@ -31,11 +43,21 @@ include_directories(
${TST_DIR}/ztest/include
)
add_executable(${PROJECT_NAME}
if(ZEPHYR_BASE)
message(FATAL_ERROR "ZEPHYR_BASE env variable defined. Use zephyr/CMakeLists.txt for Zephyr build")
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
message(STATUS "Netport test: building for linux")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/linux)
add_executable(${PROJECT_NAME}
${PORTS_DIR}/linux/datetime-init.c
# File(s) under test
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
# Support files and stubs (pathname alphabetical)
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacapp.c
@@ -47,10 +69,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/datalink/bvlc.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/lighting.c
@@ -64,9 +83,69 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/datalink/bvlc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
${TST_DIR}/bacnet/basic/object/test/property_test.c
./src/main.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
elseif(APPLE)
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/bsd)
add_executable(${PROJECT_NAME}
${PORTS_DIR}/bsd/datetime-init.c
# File(s) under test
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
# Support files and stubs (pathname alphabetical)
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/property.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/wp.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/datalink/bvlc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
# Test and test library files
${TST_DIR}/bacnet/basic/object/test/device_mock.c
${TST_DIR}/bacnet/basic/object/test/property_test.c
./src/main.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
endif()
+681 -4
View File
@@ -9,8 +9,12 @@
#include <zephyr/ztest.h>
#include <bacnet/readrange.h>
#include <bacnet/basic/object/netport.h>
#include <bacnet/basic/object/sc_netport.h>
#include <bacnet/basic/object/bacfile.h>
#include <property_test.h>
#ifndef BACDL_BSC
#define BACDL_BSC
#endif
/**
* @addtogroup bacnet_tests
* @{
@@ -34,23 +38,27 @@ static void test_network_port(void)
PORT_TYPE_LONTALK, PORT_TYPE_BIP,
PORT_TYPE_ZIGBEE, PORT_TYPE_VIRTUAL,
PORT_TYPE_NON_BACNET, PORT_TYPE_BIP6,
PORT_TYPE_MAX };
PORT_TYPE_BSC, PORT_TYPE_MAX };
const int known_fail_property_list[] = {
PROP_IP_DNS_SERVER,
PROP_BBMD_BROADCAST_DISTRIBUTION_TABLE,
PROP_BBMD_FOREIGN_DEVICE_TABLE,
PROP_FD_BBMD_ADDRESS,
PROP_IPV6_DNS_SERVER,
PROP_ISSUER_CERTIFICATE_FILES,
PROP_SC_HUB_FUNCTION_CONNECTION_STATUS,
PROP_SC_DIRECT_CONNECT_CONNECTION_STATUS,
PROP_SC_FAILED_CONNECTION_REQUESTS,
-1
};
while (port_type[port] != PORT_TYPE_MAX) {
Network_Port_Init();
object_instance = 1234;
status = Network_Port_Object_Instance_Number_Set(0, object_instance);
zassert_true(status, NULL);
status = Network_Port_Type_Set(object_instance, port_type[port]);
zassert_true(status, NULL);
Network_Port_Init();
count = Network_Port_Count();
zassert_true(count > 0, NULL);
bacnet_object_properties_read_write_test(
@@ -61,6 +69,7 @@ static void test_network_port(void)
object_instance, Network_Port_Name_Set,
Network_Port_Object_Name_ASCII);
port++;
Network_Port_Cleanup();
}
return;
@@ -69,12 +78,680 @@ static void test_network_port(void)
* @}
*/
static void test_network_port_pending_param(void)
{
#ifdef BACDL_BSC
/* for decode value data */
unsigned count = 0;
uint32_t object_instance = 0;
bool status = false;
#if (BSC_CONF_HUB_FUNCTIONS_NUM != 0) || (BSC_CONF_HUB_CONNECTORS_NUM != 0)
bool val;
BACNET_CHARACTER_STRING str;
#endif
#define PRIMARY_HUB_URL1 "SC_Primary_Hub_URI_test"
#define PRIMARY_HUB_URL2 "SC_Primary_Hub_URI_test2"
#define FAILOVER_HUB_URL1 "SC_Failover_Hub_URI_test"
#define FAILOVER_HUB_URL2 "SC_Failover_Hub_URI_test2"
#define HUB_BINDING1 "SC_Hub_Function_Binding_test:12345"
#define HUB_BINDING2 "SC_Hub_Function_Binding_test2:11111"
#define DIRECT_BINDING1 "SC_Direct_Connect_Binding_test:54321"
#define DIRECT_BINDING2 "SC_Direct_Connect_Binding_test2:22222"
#define DIRECT_BINDING1 "SC_Direct_Connect_Binding_test:54321"
#define DIRECT_BINDING2 "SC_Direct_Connect_Binding_test2:22222"
#define URL1 "SC_Direct_Connect_Accept_URI1"
#define URL2 "SC_Direct_Connect_Accept_URI2"
Network_Port_Init();
object_instance = 1234;
status = Network_Port_Object_Instance_Number_Set(0, object_instance);
zassert_true(status, NULL);
status = Network_Port_Type_Set(object_instance, PORT_TYPE_BSC);
zassert_true(status, NULL);
count = Network_Port_Count();
zassert_true(count > 0, NULL);
Network_Port_Max_BVLC_Length_Accepted_Set(object_instance, 1200);
Network_Port_Max_NPDU_Length_Accepted_Set(object_instance, 1100);
Network_Port_SC_Minimum_Reconnect_Time_Set(object_instance, 2);
Network_Port_SC_Maximum_Reconnect_Time_Set(object_instance, 5);
Network_Port_SC_Connect_Wait_Timeout_Set(object_instance, 40);
Network_Port_SC_Disconnect_Wait_Timeout_Set(object_instance, 10);
Network_Port_SC_Heartbeat_Timeout_Set(object_instance, 3);
// write properties
#if BSC_CONF_HUB_FUNCTIONS_NUM != 0
Network_Port_SC_Primary_Hub_URI_Set(object_instance, PRIMARY_HUB_URL1);
Network_Port_SC_Failover_Hub_URI_Set(object_instance, FAILOVER_HUB_URL1);
Network_Port_SC_Hub_Function_Enable_Set(object_instance, false);
Network_Port_SC_Hub_Function_Binding_Set(object_instance, HUB_BINDING1);
Network_Port_SC_Hub_Function_Accept_URI_Set(object_instance, 0, URL1);
#endif /* BSC_CONF_HUB_FUNCTIONS_NUM!=0 */
#if BSC_CONF_HUB_CONNECTORS_NUM != 0
Network_Port_SC_Direct_Connect_Initiate_Enable_Set(object_instance, false);
Network_Port_SC_Direct_Connect_Accept_Enable_Set(object_instance, false);
Network_Port_SC_Direct_Connect_Binding_Set(
object_instance, DIRECT_BINDING1);
Network_Port_SC_Direct_Connect_Accept_URI_Set(object_instance, 0, URL1);
#endif /* BSC_CONF_HUB_CONNECTORS_NUM!=0 */
// write dirty properties
Network_Port_Max_BVLC_Length_Accepted_Dirty_Set(object_instance, 1250);
Network_Port_Max_NPDU_Length_Accepted_Dirty_Set(object_instance, 1150);
Network_Port_SC_Minimum_Reconnect_Time_Dirty_Set(object_instance, 3);
Network_Port_SC_Maximum_Reconnect_Time_Dirty_Set(object_instance, 4);
Network_Port_SC_Connect_Wait_Timeout_Dirty_Set(object_instance, 50);
Network_Port_SC_Disconnect_Wait_Timeout_Dirty_Set(object_instance, 15);
Network_Port_SC_Heartbeat_Timeout_Dirty_Set(object_instance, 6);
#if BSC_CONF_HUB_FUNCTIONS_NUM != 0
Network_Port_SC_Primary_Hub_URI_Dirty_Set(
object_instance, PRIMARY_HUB_URL2);
Network_Port_SC_Failover_Hub_URI_Dirty_Set(
object_instance, FAILOVER_HUB_URL2);
Network_Port_SC_Hub_Function_Enable_Dirty_Set(object_instance, true);
Network_Port_SC_Hub_Function_Binding_Dirty_Set(
object_instance, HUB_BINDING2);
Network_Port_SC_Hub_Function_Accept_URI_Dirty_Set(object_instance, 0, URL2);
#endif /* BSC_CONF_HUB_FUNCTIONS_NUM!=0 */
#if BSC_CONF_HUB_CONNECTORS_NUM != 0
Network_Port_SC_Direct_Connect_Initiate_Enable_Dirty_Set(
object_instance, true);
Network_Port_SC_Direct_Connect_Accept_Enable_Dirty_Set(
object_instance, true);
Network_Port_SC_Direct_Connect_Binding_Dirty_Set(
object_instance, DIRECT_BINDING2);
Network_Port_SC_Direct_Connect_Accept_URI_Dirty_Set(
object_instance, 0, URL2);
#endif /* BSC_CONF_HUB_CONNECTORS_NUM!=0 */
// check old value
zassert_true(
Network_Port_Max_BVLC_Length_Accepted(object_instance) == 1200, NULL);
zassert_true(
Network_Port_Max_NPDU_Length_Accepted(object_instance) == 1100, NULL);
zassert_true(
Network_Port_SC_Minimum_Reconnect_Time(object_instance) == 2, NULL);
zassert_true(
Network_Port_SC_Maximum_Reconnect_Time(object_instance) == 5, NULL);
zassert_true(
Network_Port_SC_Connect_Wait_Timeout(object_instance) == 40, NULL);
zassert_true(
Network_Port_SC_Disconnect_Wait_Timeout(object_instance) == 10, NULL);
zassert_true(Network_Port_SC_Heartbeat_Timeout(object_instance) == 3, NULL);
#if BSC_CONF_HUB_FUNCTIONS_NUM != 0
Network_Port_SC_Primary_Hub_URI(object_instance, &str);
zassert_true(
strncmp(
characterstring_value(&str), PRIMARY_HUB_URL1,
characterstring_length(&str)) == 0,
NULL);
Network_Port_SC_Failover_Hub_URI(object_instance, &str);
zassert_true(
strncmp(
characterstring_value(&str), FAILOVER_HUB_URL1,
characterstring_length(&str)) == 0,
NULL);
val = Network_Port_SC_Hub_Function_Enable(object_instance);
zassert_true(val == false, NULL);
Network_Port_SC_Hub_Function_Binding(object_instance, &str);
zassert_true(
strncmp(
characterstring_value(&str), HUB_BINDING1,
characterstring_length(&str)) == 0,
NULL);
Network_Port_SC_Hub_Function_Accept_URI(object_instance, 0, &str);
zassert_true(
strncmp(
characterstring_value(&str), URL1, characterstring_length(&str)) ==
0,
NULL);
#endif /* BSC_CONF_HUB_FUNCTIONS_NUM!=0 */
#if BSC_CONF_HUB_CONNECTORS_NUM != 0
val = Network_Port_SC_Direct_Connect_Initiate_Enable(object_instance);
zassert_true(val == false, NULL);
val = Network_Port_SC_Direct_Connect_Accept_Enable(object_instance);
zassert_true(val == false, NULL);
Network_Port_SC_Direct_Connect_Binding(object_instance, &str);
zassert_true(
strncmp(
characterstring_value(&str), DIRECT_BINDING1,
characterstring_length(&str)) == 0,
NULL);
Network_Port_SC_Direct_Connect_Accept_URI(object_instance, 0, &str);
zassert_true(
strncmp(
characterstring_value(&str), URL1, characterstring_length(&str)) ==
0,
NULL);
#endif /* BSC_CONF_HUB_CONNECTORS_NUM!=0 */
// apply
Network_Port_Changes_Pending_Activate(object_instance);
// check new value
zassert_true(
Network_Port_Max_BVLC_Length_Accepted(object_instance) == 1250, NULL);
zassert_true(
Network_Port_Max_NPDU_Length_Accepted(object_instance) == 1150, NULL);
zassert_true(
Network_Port_SC_Minimum_Reconnect_Time(object_instance) == 3, NULL);
zassert_true(
Network_Port_SC_Maximum_Reconnect_Time(object_instance) == 4, NULL);
zassert_true(
Network_Port_SC_Connect_Wait_Timeout(object_instance) == 50, NULL);
zassert_true(
Network_Port_SC_Disconnect_Wait_Timeout(object_instance) == 15, NULL);
zassert_true(Network_Port_SC_Heartbeat_Timeout(object_instance) == 6, NULL);
#if BSC_CONF_HUB_FUNCTIONS_NUM != 0
Network_Port_SC_Primary_Hub_URI(object_instance, &str);
zassert_true(
strncmp(
characterstring_value(&str), PRIMARY_HUB_URL2,
characterstring_length(&str)) == 0,
NULL);
Network_Port_SC_Failover_Hub_URI(object_instance, &str);
zassert_true(
strncmp(
characterstring_value(&str), FAILOVER_HUB_URL2,
characterstring_length(&str)) == 0,
NULL);
val = Network_Port_SC_Hub_Function_Enable(object_instance);
zassert_true(val == true, NULL);
Network_Port_SC_Hub_Function_Binding(object_instance, &str);
zassert_true(
strncmp(
characterstring_value(&str), HUB_BINDING2,
characterstring_length(&str)) == 0,
NULL);
Network_Port_SC_Hub_Function_Accept_URI(object_instance, 0, &str);
zassert_true(
strncmp(
characterstring_value(&str), URL2, characterstring_length(&str)) ==
0,
NULL);
#endif /* BSC_CONF_HUB_FUNCTIONS_NUM!=0 */
#if BSC_CONF_HUB_CONNECTORS_NUM != 0
val = Network_Port_SC_Direct_Connect_Initiate_Enable(object_instance);
zassert_true(val == true, NULL);
val = Network_Port_SC_Direct_Connect_Accept_Enable(object_instance);
zassert_true(val == true, NULL);
Network_Port_SC_Direct_Connect_Binding(object_instance, &str);
zassert_true(
strncmp(
characterstring_value(&str), DIRECT_BINDING2,
characterstring_length(&str)) == 0,
NULL);
Network_Port_SC_Direct_Connect_Accept_URI(object_instance, 0, &str);
zassert_true(
strncmp(
characterstring_value(&str), URL2, characterstring_length(&str)) ==
0,
NULL);
#endif /* BSC_CONF_HUB_CONNECTORS_NUM!=0 */
#endif /* BACDL_BSC */
return;
}
static void test_network_port_sc_direct_connect_accept_uri(void)
{
#if defined(BACDL_BSC) && (BSC_CONF_HUB_CONNECTORS_NUM != 0)
#define URL1 "SC_Direct_Connect_Accept_URI1"
#define URL2 "SC_Direct_Connect_Accept_URI2"
#define URL3 "SC_Direct_Connect_Accept_URI3"
#define URL_SMALL "bla-bla-bla"
#define URL_BIG "big-bla-big-bla-big-bla-big-bla-big-bla"
char urls0[] = URL1 " " URL2 " " URL3;
char urls1[] = URL1 " " URL_SMALL " " URL3;
char urls2[] = URL1 " " URL_BIG " " URL3;
char urls3[] = URL1 " " URL_BIG " " URL3 " " URL_SMALL;
char urls4[] = URL1 " " URL_BIG " " URL3 " " URL_SMALL " " URL_BIG;
unsigned count = 0;
uint32_t object_instance = 0;
bool status = false;
BACNET_CHARACTER_STRING str = { 0 };
Network_Port_Init();
object_instance = 1234;
status = Network_Port_Object_Instance_Number_Set(0, object_instance);
zassert_true(status, NULL);
count = Network_Port_Count();
zassert_true(count > 0, NULL);
// init
Network_Port_SC_Direct_Connect_Accept_URIs_Set(object_instance, urls0);
zassert_true(
strcmp(
Network_Port_SC_Direct_Connect_Accept_URIs_char(object_instance),
urls0) == 0,
NULL);
zassert_true(
Network_Port_SC_Direct_Connect_Accept_URI(object_instance, 0, &str),
NULL);
zassert_true(
strncmp(
characterstring_value(&str), URL1, characterstring_length(&str)) ==
0,
NULL);
zassert_true(
Network_Port_SC_Direct_Connect_Accept_URI(object_instance, 1, &str),
NULL);
zassert_true(
strncmp(
characterstring_value(&str), URL2, characterstring_length(&str)) ==
0,
NULL);
zassert_true(
Network_Port_SC_Direct_Connect_Accept_URI(object_instance, 2, &str),
NULL);
zassert_true(
strncmp(
characterstring_value(&str), URL3, characterstring_length(&str)) ==
0,
NULL);
// change
zassert_true(
Network_Port_SC_Direct_Connect_Accept_URI_Set(
object_instance, 1, URL_SMALL),
NULL);
zassert_true(
strcmp(
Network_Port_SC_Direct_Connect_Accept_URIs_char(object_instance),
urls1) == 0,
NULL);
zassert_true(
Network_Port_SC_Direct_Connect_Accept_URI_Set(
object_instance, 1, URL_BIG),
NULL);
zassert_true(
strcmp(
Network_Port_SC_Direct_Connect_Accept_URIs_char(object_instance),
urls2) == 0,
NULL);
// append
zassert_true(
Network_Port_SC_Direct_Connect_Accept_URI_Set(
object_instance, 4, URL_SMALL),
NULL);
zassert_true(
strcmp(
Network_Port_SC_Direct_Connect_Accept_URIs_char(object_instance),
urls3) == 0,
NULL);
zassert_true(
Network_Port_SC_Direct_Connect_Accept_URI_Set(
object_instance, 4, URL_BIG),
NULL);
zassert_true(
strcmp(
Network_Port_SC_Direct_Connect_Accept_URIs_char(object_instance),
urls4) == 0,
NULL);
// check last
zassert_true(
Network_Port_SC_Direct_Connect_Accept_URI(object_instance, 0, &str),
NULL);
zassert_true(strcmp(characterstring_value(&str), URL1) == 0, NULL);
zassert_true(
Network_Port_SC_Direct_Connect_Accept_URI(object_instance, 1, &str),
NULL);
zassert_true(strcmp(characterstring_value(&str), URL_BIG) == 0, NULL);
zassert_true(
Network_Port_SC_Direct_Connect_Accept_URI(object_instance, 2, &str),
NULL);
zassert_true(strcmp(characterstring_value(&str), URL3) == 0, NULL);
zassert_true(
Network_Port_SC_Direct_Connect_Accept_URI(object_instance, 3, &str),
NULL);
zassert_true(strcmp(characterstring_value(&str), URL_SMALL) == 0, NULL);
zassert_true(
Network_Port_SC_Direct_Connect_Accept_URI(object_instance, 4, &str),
NULL);
zassert_true(
strncmp(
characterstring_value(&str), URL_BIG,
characterstring_length(&str)) == 0,
NULL);
#endif /* BACDL_BSC && BSC_CONF_HUB_CONNECTORS_NUM!=0 */
return;
}
#define BACFILE_START 0
static void test_network_port_sc_certificates(void)
{
#ifdef BACDL_BSC
unsigned count = 0;
uint32_t instance = 0;
uint32_t file_instance = 0;
bool status = false;
char *filename_ca_cert = "ca_cert.pem";
char *filename_cert = "cert.pem";
char *filename_key = "key.pem";
Network_Port_Init();
instance = 1234;
status = Network_Port_Object_Instance_Number_Set(0, instance);
zassert_true(status, NULL);
count = Network_Port_Count();
zassert_true(count > 0, NULL);
bacfile_init();
// CA certificate
status = bacfile_create(BSC_ISSUER_CERTIFICATE_FILE_1_INSTANCE);
zassert_true(status, NULL);
bacfile_pathname_set(
BSC_ISSUER_CERTIFICATE_FILE_1_INSTANCE, filename_ca_cert);
status = Network_Port_Issuer_Certificate_File_Set(
instance, 0, BSC_ISSUER_CERTIFICATE_FILE_1_INSTANCE);
zassert_true(status, NULL);
file_instance = Network_Port_Issuer_Certificate_File(instance, 0);
zassert_equal(file_instance, BSC_ISSUER_CERTIFICATE_FILE_1_INSTANCE, NULL);
status = bacfile_create(BSC_OPERATIONAL_CERTIFICATE_FILE_INSTANCE);
zassert_true(status, NULL);
bacfile_pathname_set(
BSC_OPERATIONAL_CERTIFICATE_FILE_INSTANCE, filename_cert);
status = Network_Port_Operational_Certificate_File_Set(
instance, BSC_OPERATIONAL_CERTIFICATE_FILE_INSTANCE);
zassert_true(status, NULL);
file_instance = Network_Port_Operational_Certificate_File(instance);
zassert_equal(
file_instance, BSC_OPERATIONAL_CERTIFICATE_FILE_INSTANCE, NULL);
status = bacfile_create(BSC_CERTIFICATE_SIGNING_REQUEST_FILE_INSTANCE);
zassert_true(status, NULL);
bacfile_pathname_set(
BSC_CERTIFICATE_SIGNING_REQUEST_FILE_INSTANCE, filename_key);
status = Network_Port_Certificate_Key_File_Set(
instance, BSC_CERTIFICATE_SIGNING_REQUEST_FILE_INSTANCE);
zassert_true(status, NULL);
file_instance = Network_Port_Certificate_Key_File(instance);
zassert_equal(
file_instance, BSC_CERTIFICATE_SIGNING_REQUEST_FILE_INSTANCE, NULL);
// reset
// check bacfile after reset
#endif /* BACDL_BSC */
return;
}
static void test_network_port_sc_status_encode_decode(void)
{
#ifdef BACDL_BSC
unsigned count = 0;
uint32_t instance = 0;
bool status = false;
BACNET_DATE_TIME ts = { { 2202, 5, 7, 3 }, { 12, 34, 22, 10 } };
BACNET_HOST_N_PORT_DATA peer_address = { 1, "\xef\x00\x00\x10", 50001 };
uint8_t peer_VMAC[BACNET_PEER_VMAC_LENGTH] = { 1, 2, 3, 4, 5, 6 };
uint8_t peer_UUID[16] = { 0 };
BACNET_HOST_N_PORT_DATA peer_address2 = { 1, "\xef\x00\x00\x10", 50002 };
BACNET_READ_PROPERTY_DATA rpdata;
BACNET_OBJECT_PROPERTY_VALUE object_value;
BACNET_APPLICATION_DATA_VALUE value; /* for decode value data */
uint8_t apdu[MAX_APDU];
int len;
int len2;
char str[512];
const char REQ_STR[] =
"{1946/05/07-12:34:22.10, 239.0.0.16:50001, 1.2.3.4.5.6, "
"00000000-0000-0000-0000-000000000000, 38, \"error details\"}";
const char HUB_STATUS_STR[] = "{1946/05/07-12:34:22.10, "
"239.0.0.16:50001, 1.2.3.4.5.6, "
"00000000-0000-0000-0000-000000000000, 38, "
"\"error details\"}";
const char DIRECT_STATUS_STR[] =
"{connect url, 3, 1946/05/07-12:34:22.10, 1946/05/07-12:34:22.10, "
"239.0.0.16:50001, 1.2.3.4.5.6, 00000000-0000-0000-0000-000000000000, "
"38, \"error message of direct status\"}";
const char PRIMARY_HUB_STATUS[] =
"{2, 1946/05/07-12:34:22.10, "
"1946/05/07-12:34:22.10, 38, \"error message\"}";
const char FAILOVER_HUB_STATUS[] =
"{3, 1946/05/07-12:34:22.10, "
"1946/05/07-12:34:22.10, 14, \"again error message\"}";
Network_Port_Init();
instance = 1234;
status = Network_Port_Object_Instance_Number_Set(0, instance);
zassert_true(status, NULL);
count = Network_Port_Count();
zassert_true(count > 0, NULL);
rpdata.application_data = &apdu[0];
rpdata.application_data_len = sizeof(apdu);
rpdata.object_type = OBJECT_NETWORK_PORT;
rpdata.object_instance = instance;
object_value.object_type = rpdata.object_type;
object_value.object_instance = rpdata.object_instance;
object_value.value = &value;
/* SC_Failed_Connection_Requests */
count = Network_Port_SC_Failed_Connection_Requests_Count(instance);
zassert_equal(count, 0, NULL);
status = Network_Port_SC_Failed_Connection_Requests_Add(
instance, &ts, &peer_address, peer_VMAC, peer_UUID,
ERROR_CODE_VT_SESSION_ALREADY_CLOSED, "error details");
zassert_true(status, NULL);
count = Network_Port_SC_Failed_Connection_Requests_Count(instance);
zassert_equal(count, 1, NULL);
object_value.object_property = rpdata.object_property =
PROP_SC_FAILED_CONNECTION_REQUESTS;
// count (error: property is not BacArray)
object_value.array_index = rpdata.array_index = 0;
len = Network_Port_Read_Property(&rpdata);
zassert_true(len == -1, NULL);
// context (error: property is not BacArray)
object_value.array_index = rpdata.array_index = 1;
len = Network_Port_Read_Property(&rpdata);
zassert_true(len == -1, NULL);
// all context
object_value.array_index = rpdata.array_index = BACNET_ARRAY_ALL;
len = Network_Port_Read_Property(&rpdata);
zassert_true(len > 0, NULL);
len2 = bacapp_decode_known_property(
apdu, len, &value, rpdata.object_type, rpdata.object_property);
zassert_equal(len2, len, NULL);
len = bacapp_snprintf_value(NULL, 0, &object_value);
zassert_true((len > 0) && (len < sizeof(str) - 1), NULL);
len2 = bacapp_snprintf_value(str, len + 1, &object_value);
zassert_equal(len2, len, NULL);
zassert_true(strncmp(str, REQ_STR, strlen(REQ_STR)) == 0, NULL);
#if BSC_CONF_HUB_FUNCTIONS_NUM != 0
/* SC_Hub_Function_Connection_Status */
count = Network_Port_SC_Hub_Function_Connection_Status_Count(instance);
zassert_equal(count, 0, NULL);
status = Network_Port_SC_Hub_Function_Connection_Status_Add(
instance, BACNET_SC_CONNECTION_STATE_CONNECTED, &ts, &ts, &peer_address,
peer_VMAC, peer_UUID, ERROR_CODE_VT_SESSION_ALREADY_CLOSED,
"hided error message");
zassert_true(status, NULL);
status = Network_Port_SC_Hub_Function_Connection_Status_Add(
instance, BACNET_SC_CONNECTION_STATE_FAILED_TO_CONNECT, &ts, &ts,
&peer_address2, peer_VMAC, peer_UUID,
ERROR_CODE_VT_SESSION_ALREADY_CLOSED, "error message of hub status");
zassert_true(status, NULL);
count = Network_Port_SC_Hub_Function_Connection_Status_Count(instance);
zassert_equal(count, 2, NULL);
object_value.object_property = rpdata.object_property =
PROP_SC_HUB_FUNCTION_CONNECTION_STATUS;
// count (error: property is not BacArray)
object_value.array_index = rpdata.array_index = 0;
len = Network_Port_Read_Property(&rpdata);
zassert_true(len == -1, NULL);
// context (error: property is not BacArray)
object_value.array_index = rpdata.array_index = 1;
len = Network_Port_Read_Property(&rpdata);
zassert_true(len == -1, NULL);
len = bacapp_snprintf_value(NULL, 0, &object_value);
zassert_true((len > 0) && (len < sizeof(str) - 1), NULL);
len2 = bacapp_snprintf_value(str, len + 1, &object_value);
zassert_equal(len2, len, NULL);
zassert_true(
strncmp(str, HUB_STATUS_STR, strlen(HUB_STATUS_STR)) == 0, NULL);
/* SC_Primary_Hub_Connection_Status */
status = Network_Port_SC_Primary_Hub_Connection_Status_Set(
instance, BACNET_SC_CONNECTION_STATE_DISCONNECTED_WITH_ERRORS, &ts, &ts,
ERROR_CODE_VT_SESSION_ALREADY_CLOSED, "error message");
zassert_true(status, NULL);
rpdata.array_index = BACNET_ARRAY_ALL;
object_value.object_property = rpdata.object_property =
PROP_SC_PRIMARY_HUB_CONNECTION_STATUS;
// context
len = Network_Port_Read_Property(&rpdata);
zassert_true(len > 0, NULL);
len2 = bacapp_decode_known_property(
apdu, len, &value, rpdata.object_type, rpdata.object_property);
zassert_equal(len2, len, NULL);
len = bacapp_snprintf_value(NULL, 0, &object_value);
zassert_true((len > 0) && (len < sizeof(str) - 1), NULL);
len2 = bacapp_snprintf_value(str, len + 1, &object_value);
zassert_equal(len2, len, NULL);
zassert_true(
strncmp(str, PRIMARY_HUB_STATUS, strlen(PRIMARY_HUB_STATUS)) == 0,
NULL);
/* SC_Failover_Hub_Connection_Status */
status = Network_Port_SC_Failover_Hub_Connection_Status_Set(
instance, BACNET_SC_CONNECTION_STATE_FAILED_TO_CONNECT, &ts, &ts,
ERROR_CODE_INVALID_TIME_STAMP, "again error message");
zassert_true(status, NULL);
object_value.object_property = rpdata.object_property =
PROP_SC_FAILOVER_HUB_CONNECTION_STATUS;
// context
len = Network_Port_Read_Property(&rpdata);
zassert_true(len > 0, NULL);
len2 = bacapp_decode_known_property(
apdu, len, &value, rpdata.object_type, rpdata.object_property);
zassert_equal(len2, len, NULL);
len = bacapp_snprintf_value(NULL, 0, &object_value);
zassert_true((len > 0) && (len < sizeof(str) - 1), NULL);
len2 = bacapp_snprintf_value(str, len + 1, &object_value);
zassert_equal(len2, len, NULL);
zassert_true(
strncmp(str, FAILOVER_HUB_STATUS, strlen(FAILOVER_HUB_STATUS)) == 0,
NULL);
#endif /* BSC_CONF_HUB_FUNCTIONS_NUM!=0 */
#if BSC_CONF_HUB_CONNECTORS_NUM != 0
/* SC_Hub_Function_Connection_Status */
count = Network_Port_SC_Direct_Connect_Connection_Status_Count(instance);
zassert_equal(count, 0, NULL);
status = Network_Port_SC_Direct_Connect_Connection_Status_Add(
instance, "connect url", BACNET_SC_CONNECTION_STATE_FAILED_TO_CONNECT,
&ts, &ts, &peer_address, peer_VMAC, peer_UUID,
ERROR_CODE_VT_SESSION_ALREADY_CLOSED, "error message of direct status");
zassert_true(status, NULL);
count = Network_Port_SC_Direct_Connect_Connection_Status_Count(instance);
zassert_equal(count, 1, NULL);
object_value.object_property = rpdata.object_property =
PROP_SC_DIRECT_CONNECT_CONNECTION_STATUS;
// count (error: property is not BacArray)
object_value.array_index = rpdata.array_index = 0;
len = Network_Port_Read_Property(&rpdata);
zassert_true(len == -1, NULL);
// context (error: property is not BacArray)
object_value.array_index = rpdata.array_index = 1;
len = Network_Port_Read_Property(&rpdata);
zassert_true(len == -1, NULL);
// all context
object_value.array_index = rpdata.array_index = BACNET_ARRAY_ALL;
len = Network_Port_Read_Property(&rpdata);
zassert_true(len > 0, NULL);
len2 = bacapp_decode_known_property(
apdu, len, &value, rpdata.object_type, rpdata.object_property);
zassert_equal(len2, len, NULL);
len = bacapp_snprintf_value(NULL, 0, &object_value);
zassert_true((len > 0) && (len < sizeof(str) - 1), NULL);
len2 = bacapp_snprintf_value(str, len + 1, &object_value);
zassert_equal(len2, len, NULL);
zassert_true(
strncmp(str, DIRECT_STATUS_STR, strlen(DIRECT_STATUS_STR)) == 0, NULL);
#endif /* BSC_CONF_HUB_CONNECTORS_NUM!=0 */
#endif /* BACDL_BSC */
return;
}
#if defined(CONFIG_ZTEST_NEW_API)
ZTEST_SUITE(netport_tests, NULL, NULL, NULL, NULL, NULL);
#else
void test_main(void)
{
ztest_test_suite(netport_tests, ztest_unit_test(test_network_port));
ztest_test_suite(
netport_tests, ztest_unit_test(test_network_port),
ztest_unit_test(test_network_port_pending_param),
ztest_unit_test(test_network_port_sc_direct_connect_accept_uri),
ztest_unit_test(test_network_port_sc_certificates),
ztest_unit_test(test_network_port_sc_status_encode_decode));
ztest_run_test_suite(netport_tests);
}
@@ -59,6 +59,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -59,6 +59,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -61,6 +61,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/property_test.c
@@ -62,6 +62,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
@@ -64,6 +64,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/datetime_local.c
@@ -61,6 +61,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
+3
View File
@@ -41,6 +41,9 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/lighting.c
# Test and test library files
+1
View File
@@ -59,6 +59,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -0,0 +1,303 @@
# SPDX-License-Identifier: MIT
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
get_filename_component(basename ${CMAKE_CURRENT_SOURCE_DIR} NAME)
project(test_${basename}
VERSION 1.0.0
LANGUAGES C)
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/src"
SRC_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/ports"
PORTS_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/test"
TST_DIR
${CMAKE_CURRENT_SOURCE_DIR})
set(ZTST_DIR "${TST_DIR}/ztest/src")
add_compile_definitions(
BIG_ENDIAN=0
CONFIG_ZTEST=1
BACDL_BSC
MAX_BACFILES=4
BSC_CONF_WSURL_MAX_LEN=128
BSC_CONF_WEBSOCKET_ERR_DESC_STR_MAX_LEN=128
BSC_CONF_HUB_FUNCTION_CONNECTIONS_NUM=3
BSC_CONF_NODE_SWITCH_CONNECTIONS_NUM=3
BSC_CONF_WEBSOCKET_SERVERS_NUM=6
BSC_CONF_HUB_CONNECTORS_NUM=4
BSC_CONF_HUB_FUNCTIONS_NUM=4
BSC_CONF_NODES_NUM=4
BSC_CONF_NODE_SWITCHES_NUM=4
BSC_CONF_FAILED_CONNECTION_STATUS_MAX_NUM=1
BSC_CONF_HUB_FUNCTION_CONNECTION_STATUS_MAX_NUM=2
BSC_CONF_NODE_SWITCH_CONNECTION_STATUS_MAX_NUM=2
MAX_TSM_TRANSACTIONS=0
BACDL_BSC
)
include_directories(
${SRC_DIR}
${TST_DIR}/ztest/include
)
if(ZEPHYR_BASE)
message(FATAL_ERROR "ZEPHYR_BASE env variable defined. Use zephyr/CMakeLists.txt for Zephyr build")
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
message(STATUS "BACNet/SC datalink test: building for linux")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/linux)
add_compile_definitions(BACNET_PORT=linux)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
add_executable(${PROJECT_NAME}
${PORTS_DIR}/linux/websocket-cli.c
${PORTS_DIR}/linux/websocket-srv.c
${PORTS_DIR}/linux/websocket-global.c
${PORTS_DIR}/linux/bsc-event.c
${PORTS_DIR}/linux/mstimer-init.c
${PORTS_DIR}/linux/datetime-init.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-socket.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-connector.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-function.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node-switch.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-datalink.c
${SRC_DIR}/bacnet/basic/service/h_apdu.c
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/fifo.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/basic/sys/mstimer.c
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/dcc.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/npdu.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/wp.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
target_link_libraries(${PROJECT_NAME}
${LIBWEBSOCKETS_LIBRARIES}
)
target_compile_options(${PROJECT_NAME} PRIVATE
-Wno-language-extension-token
)
elseif(WIN32)
message(STATUS "BACNet/SC datalink test: building for win32")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/win32)
add_compile_definitions(BACNET_PORT=win32)
add_compile_definitions(BACNET_STACK_STATIC_DEFINE)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Zc:preprocessor")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:preprocessor")
add_executable(${PROJECT_NAME}
${PORTS_DIR}/win32/websocket-cli.c
${PORTS_DIR}/win32/websocket-srv.c
${PORTS_DIR}/win32/websocket-global.c
${PORTS_DIR}/win32/bsc-event.c
${PORTS_DIR}/win32/mstimer-init.c
${PORTS_DIR}/win32/datetime-init.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-socket.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-connector.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-function.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node-switch.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-datalink.c
${SRC_DIR}/bacnet/basic/service/h_apdu.c
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/fifo.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/basic/sys/mstimer.c
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/dcc.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/npdu.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/wp.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
# basically if you use vcpkg you should just add ${LIBWEBSOCKETS_LIBRARIES}
# into target_link_libraries() but for some reason it does not work as expected
# so that's why libs have to be hardcoded as workaround
target_link_libraries(${PROJECT_NAME}
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\websockets.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\libssl.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\libcrypto.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\pthreadVC3.lib
ws2_32.lib
userenv.lib
psapi.lib
iphlpapi.lib
crypt32.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\zlib.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\uv.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
)
elseif(APPLE)
message(STATUS "BACNet/SC datalink test: building for APPLE")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/bsd)
execute_process (
COMMAND bash -c "brew --prefix openssl"
OUTPUT_VARIABLE OPEN_SSL_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
)
include_directories(${OPEN_SSL_DIR}/include)
add_compile_definitions(BACNET_PORT=bsd)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
add_executable(${PROJECT_NAME}
${PORTS_DIR}/bsd/websocket-cli.c
${PORTS_DIR}/bsd/websocket-srv.c
${PORTS_DIR}/bsd/websocket-global.c
${PORTS_DIR}/bsd/bsc-event.c
${PORTS_DIR}/bsd/mstimer-init.c
${PORTS_DIR}/bsd/datetime-init.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-socket.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-connector.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-function.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node-switch.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-datalink.c
${SRC_DIR}/bacnet/basic/service/h_apdu.c
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/fifo.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/basic/sys/mstimer.c
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/dcc.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/npdu.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/wp.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
target_link_libraries(${PROJECT_NAME}
${LIBWEBSOCKETS_LIBRARIES}
)
target_compile_options(${PROJECT_NAME} PRIVATE
-Wno-language-extension-token
)
endif()
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,290 @@
# SPDX-License-Identifier: MIT
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
get_filename_component(basename ${CMAKE_CURRENT_SOURCE_DIR} NAME)
project(test_${basename}
VERSION 1.0.0
LANGUAGES C)
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/src"
SRC_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/ports"
PORTS_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/test"
TST_DIR
${CMAKE_CURRENT_SOURCE_DIR})
set(ZTST_DIR "${TST_DIR}/ztest/src")
add_compile_definitions(
BIG_ENDIAN=0
CONFIG_ZTEST=1
BACDL_BSC
BSC_CONF_HUB_FUNCTION_CONNECTIONS_NUM=3
BSC_CONF_NODE_SWITCH_CONNECTIONS_NUM=3
BSC_CONF_WSURL_MAX_LEN=128
BSC_CONF_WEBSOCKET_ERR_DESC_STR_MAX_LEN=128
BSC_CONF_WEBSOCKET_SERVERS_NUM=4
BSC_CONF_HUB_CONNECTORS_NUM=3
BSC_CONF_HUB_FUNCTIONS_NUM=3
BSC_CONF_NODES_NUM=3
BSC_CONF_NODE_SWITCHES_NUM=3
MAX_TSM_TRANSACTIONS=0
)
include_directories(
${SRC_DIR}
${TST_DIR}/ztest/include
)
if(ZEPHYR_BASE)
message(FATAL_ERROR "ZEPHYR_BASE env variable defined. Use zephyr/CMakeLists.txt for Zephyr build")
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
message(STATUS "BACNet/SC node test: building for linux")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/linux)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
add_compile_definitions(BACNET_PORT=linux)
add_executable(${PROJECT_NAME}
${PORTS_DIR}/linux/websocket-cli.c
${PORTS_DIR}/linux/websocket-srv.c
${PORTS_DIR}/linux/websocket-global.c
${PORTS_DIR}/linux/bsc-event.c
${PORTS_DIR}/linux/mstimer-init.c
${PORTS_DIR}/linux/datetime-init.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-socket.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-connector.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-function.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node-switch.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node.c
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/fifo.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/basic/sys/mstimer.c
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/dcc.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/npdu.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/wp.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
target_link_libraries(${PROJECT_NAME}
${LIBWEBSOCKETS_LIBRARIES}
)
target_compile_options(${PROJECT_NAME} PRIVATE
-Wno-language-extension-token
)
elseif(WIN32)
message(STATUS "BACNet/SC node test: building for win32")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/win32)
add_compile_definitions(BACNET_PORT=win32)
add_compile_definitions(BACNET_STACK_STATIC_DEFINE)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
add_executable(${PROJECT_NAME}
${PORTS_DIR}/win32/websocket-cli.c
${PORTS_DIR}/win32/websocket-srv.c
${PORTS_DIR}/win32/websocket-global.c
${PORTS_DIR}/win32/bsc-event.c
${PORTS_DIR}/win32/mstimer-init.c
${PORTS_DIR}/win32/datetime-init.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-socket.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-connector.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-function.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node-switch.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node.c
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/fifo.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/basic/sys/mstimer.c
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/dcc.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/npdu.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/wp.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
# basically if you use vcpkg you should just add ${LIBWEBSOCKETS_LIBRARIES}
# into target_link_libraries() but for some reason it does not work as expected
# so that's why libs have to be hardcoded as workaround
target_link_libraries(${PROJECT_NAME}
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\websockets.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\libssl.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\libcrypto.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\pthreadVC3.lib
ws2_32.lib
userenv.lib
psapi.lib
iphlpapi.lib
crypt32.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\zlib.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\uv.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
)
elseif(APPLE)
message(STATUS "BACNet/SC node test: building for APPLE")
execute_process (
COMMAND bash -c "brew --prefix openssl"
OUTPUT_VARIABLE OPEN_SSL_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
)
include_directories(${OPEN_SSL_DIR}/include)
add_compile_definitions(BACNET_PORT=bsd)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
add_executable(${PROJECT_NAME}
${PORTS_DIR}/bsd/websocket-cli.c
${PORTS_DIR}/bsd/websocket-srv.c
${PORTS_DIR}/bsd/websocket-global.c
${PORTS_DIR}/bsd/bsc-event.c
${PORTS_DIR}/bsd/mstimer-init.c
${PORTS_DIR}/bsd/datetime-init.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-socket.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-connector.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-function.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node-switch.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node.c
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/fifo.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/basic/sys/mstimer.c
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/dcc.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/npdu.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/wp.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
target_link_libraries(${PROJECT_NAME}
${LIBWEBSOCKETS_LIBRARIES}
)
target_compile_options(${PROJECT_NAME} PRIVATE
-Wno-language-extension-token
)
endif()
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,274 @@
# SPDX-License-Identifier: MIT
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
get_filename_component(basename ${CMAKE_CURRENT_SOURCE_DIR} NAME)
project(test_${basename}
VERSION 1.0.0
LANGUAGES C)
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/src"
SRC_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/ports"
PORTS_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/test"
TST_DIR
${CMAKE_CURRENT_SOURCE_DIR})
set(ZTST_DIR "${TST_DIR}/ztest/src")
add_compile_definitions(
BIG_ENDIAN=0
CONFIG_ZTEST=1
BACDL_BSC
BSC_CONF_HUB_FUNCTION_CONNECTIONS_NUM=4
BSC_CONF_NODE_SWITCH_CONNECTIONS_NUM=4
BSC_CONF_WSURL_MAX_LEN=128
BSC_CONF_WEBSOCKET_ERR_DESC_STR_MAX_LEN=128
BSC_CONF_WEBSOCKET_SERVERS_NUM=4
MAX_TSM_TRANSACTIONS=0
)
include_directories(
${SRC_DIR}
${TST_DIR}/ztest/include
)
if(ZEPHYR_BASE)
message(FATAL_ERROR "ZEPHYR_BASE env variable defined. Use zephyr/CMakeLists.txt for Zephyr build")
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
message(STATUS "BACNet/SC socket test: building for linux")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/linux)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
add_compile_definitions(BACNET_PORT=linux)
add_executable(${PROJECT_NAME}
${PORTS_DIR}/linux/websocket-cli.c
${PORTS_DIR}/linux/websocket-srv.c
${PORTS_DIR}/linux/websocket-global.c
${PORTS_DIR}/linux/bsc-event.c
${PORTS_DIR}/linux/mstimer-init.c
${PORTS_DIR}/linux/datetime-init.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-socket.c
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/fifo.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/basic/sys/mstimer.c
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/dcc.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/npdu.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/wp.c
# Test and test library files
${TST_DIR}/bacnet/basic/object/test/device_mock.c
./src/main.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
target_link_libraries(${PROJECT_NAME}
${LIBWEBSOCKETS_LIBRARIES}
)
target_compile_options(${PROJECT_NAME} PRIVATE
-Wno-language-extension-token
)
elseif(WIN32)
message(STATUS "BACNet/SC socket test: building for win32")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/win32)
add_compile_definitions(BACNET_PORT=win32)
add_compile_definitions(BACNET_STACK_STATIC_DEFINE)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
find_package(OpenSSL)
add_executable(${PROJECT_NAME}
${PORTS_DIR}/win32/websocket-cli.c
${PORTS_DIR}/win32/websocket-srv.c
${PORTS_DIR}/win32/websocket-global.c
${PORTS_DIR}/win32/bsc-event.c
${PORTS_DIR}/win32/mstimer-init.c
${PORTS_DIR}/win32/datetime-init.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-socket.c
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/fifo.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/basic/sys/mstimer.c
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/dcc.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/npdu.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/wp.c
# Test and test library files
${TST_DIR}/bacnet/basic/object/test/device_mock.c
./src/main.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
# basically if you use vcpkg you should just add ${LIBWEBSOCKETS_LIBRARIES}
# into target_link_libraries() but for some reason it does not work as expected
# so that's why libs have to be hardcoded as workaround
target_link_libraries(${PROJECT_NAME}
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\websockets.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\libssl.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\libcrypto.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\pthreadVC3.lib
ws2_32.lib
userenv.lib
psapi.lib
iphlpapi.lib
crypt32.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\zlib.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\uv.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
)
elseif(APPLE)
message(STATUS "BACNet/SC socket test: building for APPLE")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/bsd)
execute_process (
COMMAND bash -c "brew --prefix openssl"
OUTPUT_VARIABLE OPEN_SSL_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
)
include_directories(${OPEN_SSL_DIR}/include)
add_compile_definitions(BACNET_PORT=bsd)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
add_executable(${PROJECT_NAME}
${PORTS_DIR}/bsd/websocket-cli.c
${PORTS_DIR}/bsd/websocket-srv.c
${PORTS_DIR}/bsd/websocket-global.c
${PORTS_DIR}/bsd/bsc-event.c
${PORTS_DIR}/bsd/mstimer-init.c
${PORTS_DIR}/bsd/datetime-init.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-socket.c
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/fifo.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/basic/sys/mstimer.c
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/dcc.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/npdu.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/wp.c
# Test and test library files
${TST_DIR}/bacnet/basic/object/test/device_mock.c
./src/main.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
target_link_libraries(${PROJECT_NAME}
${LIBWEBSOCKETS_LIBRARIES}
)
target_compile_options(${PROJECT_NAME} PRIVATE
-Wno-language-extension-token
)
endif()
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,48 @@
# SPDX-License-Identifier: MIT
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
get_filename_component(basename ${CMAKE_CURRENT_SOURCE_DIR} NAME)
project(test_${basename}
VERSION 1.0.0
LANGUAGES C)
string(REGEX REPLACE
"/test/bacnet/[a-zA-Z_/-]*$"
"/src"
SRC_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-zA-Z_/-]*$"
"/test"
TST_DIR
${CMAKE_CURRENT_SOURCE_DIR})
set(ZTST_DIR "${TST_DIR}/ztest/src")
add_compile_definitions(
BIG_ENDIAN=0
CONFIG_ZTEST=1
BSC_CONF_TX_PRE=0
BACNET_STACK_STATIC_DEFINE
)
include_directories(
${SRC_DIR}
${TST_DIR}/ztest/include
)
add_executable(${PROJECT_NAME}
# File(s) under test
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
# Support files and stubs (pathname alphabetical)
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
if (CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "AppleClang" OR CMAKE_C_COMPILER_ID MATCHES "GNU")
target_compile_options(${PROJECT_NAME} PRIVATE
-Wno-language-extension-token
)
endif()
File diff suppressed because it is too large Load Diff
+288
View File
@@ -0,0 +1,288 @@
# SPDX-License-Identifier: MIT
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
get_filename_component(basename ${CMAKE_CURRENT_SOURCE_DIR} NAME)
project(test_${basename}
VERSION 1.0.0
LANGUAGES C)
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/src"
SRC_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/ports"
PORTS_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/test"
TST_DIR
${CMAKE_CURRENT_SOURCE_DIR})
set(ZTST_DIR "${TST_DIR}/ztest/src")
add_compile_definitions(
BIG_ENDIAN=0
CONFIG_ZTEST=1
BACDL_BSC
BSC_CONF_HUB_FUNCTION_CONNECTIONS_NUM=4
BSC_CONF_NODE_SWITCH_CONNECTIONS_NUM=4
BSC_CONF_WSURL_MAX_LEN=128
BSC_CONF_WEBSOCKET_ERR_DESC_STR_MAX_LEN=128
BSC_CONF_WEBSOCKET_SERVERS_NUM=4
BSC_CONF_HUB_CONNECTORS_NUM=2
BSC_CONF_HUB_FUNCTIONS_NUM=2
MAX_TSM_TRANSACTIONS=0
)
include_directories(
${SRC_DIR}
${TST_DIR}/ztest/include
)
if(ZEPHYR_BASE)
message(FATAL_ERROR "ZEPHYR_BASE env variable defined. Use zephyr/CMakeLists.txt for Zephyr build")
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
message(STATUS "BACNet/SC hub function test: building for linux")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/linux)
add_compile_definitions(BACNET_PORT=linux)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
add_executable(${PROJECT_NAME}
${PORTS_DIR}/linux/websocket-cli.c
${PORTS_DIR}/linux/websocket-srv.c
${PORTS_DIR}/linux/websocket-global.c
${PORTS_DIR}/linux/bsc-event.c
${PORTS_DIR}/linux/mstimer-init.c
${PORTS_DIR}/linux/datetime-init.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-socket.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node-switch.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-connector.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-function.c
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/fifo.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/basic/sys/mstimer.c
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/dcc.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/npdu.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/wp.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
target_link_libraries(${PROJECT_NAME}
${LIBWEBSOCKETS_LIBRARIES}
)
target_compile_options(${PROJECT_NAME} PRIVATE
-Wno-language-extension-token
)
elseif(WIN32)
message(STATUS "BACNet/SC hub function test: building for win32")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/win32)
add_compile_definitions(BACNET_PORT=win32)
add_compile_definitions(BACNET_STACK_STATIC_DEFINE)
add_compile_definitions(BACNET_USE_DOUBLE=0)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
find_package(OpenSSL)
add_executable(${PROJECT_NAME}
${PORTS_DIR}/win32/websocket-cli.c
${PORTS_DIR}/win32/websocket-srv.c
${PORTS_DIR}/win32/websocket-global.c
${PORTS_DIR}/win32/bsc-event.c
${PORTS_DIR}/win32/mstimer-init.c
${PORTS_DIR}/win32/datetime-init.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-socket.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node-switch.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-connector.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-function.c
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/fifo.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/basic/sys/mstimer.c
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/dcc.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/npdu.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/wp.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
# basically if you use vcpkg you should just add ${LIBWEBSOCKETS_LIBRARIES}
# into target_link_libraries() but for some reason it does not work as expected
# so that's why libs have to be hardcoded as workaround
target_link_libraries(${PROJECT_NAME}
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\websockets.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\libssl.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\libcrypto.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\pthreadVC3.lib
ws2_32.lib
userenv.lib
psapi.lib
iphlpapi.lib
crypt32.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\zlib.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\uv.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
)
elseif(APPLE)
message(STATUS "BACNet/SC hub function test: building for APPLE")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/bsd)
execute_process (
COMMAND bash -c "brew --prefix openssl"
OUTPUT_VARIABLE OPEN_SSL_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
)
include_directories(${OPEN_SSL_DIR}/include)
add_compile_definitions(BACNET_PORT=bsd)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
add_executable(${PROJECT_NAME}
${PORTS_DIR}/bsd/websocket-cli.c
${PORTS_DIR}/bsd/websocket-srv.c
${PORTS_DIR}/bsd/websocket-global.c
${PORTS_DIR}/bsd/bsc-event.c
${PORTS_DIR}/bsd/mstimer-init.c
${PORTS_DIR}/bsd/datetime-init.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-util.c
${SRC_DIR}/bacnet/datalink/bsc/bvlc-sc.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-socket.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-node-switch.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-connector.c
${SRC_DIR}/bacnet/datalink/bsc/bsc-hub-function.c
${SRC_DIR}/bacnet/basic/object/bacfile.c
${SRC_DIR}/bacnet/basic/object/netport.c
${SRC_DIR}/bacnet/basic/object/sc_netport.c
${SRC_DIR}/bacnet/basic/sys/days.c
${SRC_DIR}/bacnet/basic/sys/debug.c
${SRC_DIR}/bacnet/basic/sys/fifo.c
${SRC_DIR}/bacnet/basic/sys/keylist.c
${SRC_DIR}/bacnet/basic/sys/mstimer.c
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/arf.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacerror.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/dcc.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/npdu.c
${SRC_DIR}/bacnet/proplist.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/wp.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
# Test and test library files
./src/main.c
${TST_DIR}/bacnet/basic/object/test/device_mock.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
target_link_libraries(${PROJECT_NAME}
${LIBWEBSOCKETS_LIBRARIES}
)
target_compile_options(${PROJECT_NAME} PRIVATE
-Wno-language-extension-token
)
endif()
File diff suppressed because it is too large Load Diff
+55
View File
@@ -0,0 +1,55 @@
/*
* Copyright (c) 2020 Legrand North America, LLC.
*
* SPDX-License-Identifier: MIT
*/
#include <ztest.h>
#include <stdint.h> /* for standard integer types uint8_t etc. */
#include <stdbool.h> /* for the standard bool type. */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "bacnet/datalink/bsc/bsc-datalink.h"
bool bsc_init(char *ifname)
{
ztest_check_expected_value(ifname);
return ztest_get_return_value();
}
void bsc_cleanup(void)
{
}
void bsc_get_my_address(BACNET_ADDRESS *my_address)
{
ztest_copy_return_data(my_address, sizeof(BACNET_ADDRESS));
}
int bsc_send_pdu(
BACNET_ADDRESS *dest,
BACNET_NPDU_DATA *npdu_data,
uint8_t *pdu,
unsigned pdu_len)
{
ztest_check_expected_value(dest);
ztest_check_expected_value(npdu_data);
ztest_check_expected_data(pdu, pdu_len);
return ztest_get_return_value();
}
uint16_t bsc_receive(
BACNET_ADDRESS *src, uint8_t *pdu, uint16_t max_pdu, unsigned timeout)
{
ztest_check_expected_value(src);
ztest_check_expected_value(timeout);
ztest_copy_return_data(pdu, max_pdu);
return ztest_get_return_value();
}
void bsc_get_broadcast_address(BACNET_ADDRESS *dest)
{
ztest_copy_return_data(dest, sizeof(BACNET_ADDRESS));
}
@@ -0,0 +1,140 @@
# SPDX-License-Identifier: MIT
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
get_filename_component(basename ${CMAKE_CURRENT_SOURCE_DIR} NAME)
project(test_${basename}
VERSION 1.0.0
LANGUAGES C)
include(CMakePrintHelpers)
find_package(Threads)
find_package(libwebsockets CONFIG REQUIRED)
include_directories(${LIBWEBSOCKETS_INCLUDE_DIRS})
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/src"
SRC_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/ports"
PORTS_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-z0-9A-Z_/-]*$"
"/test"
TST_DIR
${CMAKE_CURRENT_SOURCE_DIR})
set(ZTST_DIR "${TST_DIR}/ztest/src")
add_compile_definitions(
BIG_ENDIAN=0
CONFIG_ZTEST=1
BACDL_BSC
BSC_CONF_CLIENT_CONNECTIONS_NUM=5
BSC_CONF_SERVER_HUB_CONNECTIONS_MAX_NUM=4
BSC_CONF_SERVER_DIRECT_CONNECTIONS_MAX_NUM=4
BSC_CONF_WSURL_MAX_LEN=128
BSC_CONF_WEBSOCKET_ERR_DESC_STR_MAX_LEN=128
BSC_CONF_WEBSOCKET_SERVERS_NUM=4
)
include_directories(
${SRC_DIR}
${TST_DIR}/ztest/include
${LIBWEBSOCKETS_INCLUDE_DIRS}
)
if(ZEPHYR_BASE)
message(FATAL_ERROR "ZEPHYR_BASE env variable defined. Use zephyr/CMakeLists.txt for Zephyr build")
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
message(STATUS "Websockets test: building for linux")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/linux)
add_compile_definitions(BACNET_PORT=linux)
find_package(OpenSSL)
find_package(PkgConfig)
pkg_check_modules(LIB_WEBSOCKETS REQUIRED libwebsockets)
add_executable(${PROJECT_NAME}
${PORTS_DIR}/linux/websocket-cli.c
${PORTS_DIR}/linux/websocket-srv.c
${PORTS_DIR}/linux/websocket-global.c
${PORTS_DIR}/linux/bsc-event.c
${SRC_DIR}/bacnet/basic/sys/debug.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
target_link_libraries(${PROJECT_NAME}
${LIBWEBSOCKETS_LIBRARIES}
)
elseif(WIN32)
message(STATUS "Websockets test: building for win32")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/win32)
add_compile_definitions(BACNET_PORT=win32)
find_package(OpenSSL)
add_executable(${PROJECT_NAME}
${PORTS_DIR}/win32/websocket-cli.c
${PORTS_DIR}/win32/websocket-srv.c
${PORTS_DIR}/win32/websocket-global.c
${PORTS_DIR}/win32/bsc-event.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
# basically if you use vcpkg you should just add ${LIBWEBSOCKETS_LIBRARIES}
# into target_link_libraries() but for some reason it does not work as expected
# so that's why libs have to be hardcoded as workaround
target_link_libraries(${PROJECT_NAME}
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\websockets.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\libssl.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\libcrypto.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\pthreadVC3.lib
ws2_32.lib
userenv.lib
psapi.lib
iphlpapi.lib
crypt32.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\zlib.lib
C:\\vcpkg\\installed\\x64-windows-custom\\lib\\uv.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
)
elseif(APPLE)
message(STATUS "Websockets test: building for APPLE")
set(BACNET_PORT_DIRECTORY_PATH ${CMAKE_CURRENT_LIST_DIR}/ports/bsd)
add_compile_definitions(BACNET_PORT=bsd)
execute_process (
COMMAND bash -c "brew --prefix openssl"
OUTPUT_VARIABLE OPEN_SSL_DIR OUTPUT_STRIP_TRAILING_WHITESPACE
)
include_directories(${OPEN_SSL_DIR}/include)
add_executable(${PROJECT_NAME}
${PORTS_DIR}/bsd/websocket-cli.c
${PORTS_DIR}/bsd/websocket-srv.c
${PORTS_DIR}/bsd/websocket-global.c
${PORTS_DIR}/bsd/bsc-event.c
${SRC_DIR}/bacnet/basic/sys/debug.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
target_link_libraries(${PROJECT_NAME}
${LIBWEBSOCKETS_LIBRARIES}
)
endif()
File diff suppressed because it is too large Load Diff
+1
View File
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -62,6 +62,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -59,6 +59,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -59,6 +59,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -59,6 +59,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -61,6 +61,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+64
View File
@@ -0,0 +1,64 @@
# SPDX-License-Identifier: MIT
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
get_filename_component(basename ${CMAKE_CURRENT_SOURCE_DIR} NAME)
project(test_${basename}
VERSION 1.0.0
LANGUAGES C)
string(REGEX REPLACE
"/test/bacnet/[a-zA-Z_/-]*$"
"/src"
SRC_DIR
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/test/bacnet/[a-zA-Z_/-]*$"
"/test"
TST_DIR
${CMAKE_CURRENT_SOURCE_DIR})
set(ZTST_DIR "${TST_DIR}/ztest/src")
add_compile_definitions(
BIG_ENDIAN=0
CONFIG_ZTEST=1
)
include_directories(
${SRC_DIR}
${TST_DIR}/ztest/include
)
add_executable(${PROJECT_NAME}
# File(s) under test
${SRC_DIR}/bacnet/secure_connect.c
# Support files and stubs (pathname alphabetical)
${SRC_DIR}/bacnet/access_rule.c
${SRC_DIR}/bacnet/bacaction.c
${SRC_DIR}/bacnet/bacaddr.c
${SRC_DIR}/bacnet/bacapp.c
${SRC_DIR}/bacnet/bacdcode.c
${SRC_DIR}/bacnet/bacdest.c
${SRC_DIR}/bacnet/bacdevobjpropref.c
${SRC_DIR}/bacnet/bacint.c
${SRC_DIR}/bacnet/bacreal.c
${SRC_DIR}/bacnet/bactimevalue.c
${SRC_DIR}/bacnet/bacstr.c
${SRC_DIR}/bacnet/bactext.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/datetime.c
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/hostnport.c
${SRC_DIR}/bacnet/indtext.c
${SRC_DIR}/bacnet/lighting.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/timestamp.c
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/basic/sys/bigend.c
${SRC_DIR}/bacnet/basic/sys/days.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
${ZTST_DIR}/ztest.c
)
+75
View File
@@ -0,0 +1,75 @@
/**
* @file
* @brief Unit test for BACnetSpecialEvent. This test also indirectly tests
* BACnetCalendarEntry
* @author Ondřej Hruška <ondra@ondrovo.com>
* @date Aug 2023
*
* SPDX-License-Identifier: MIT
*/
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <zephyr/ztest.h>
#include "bacnet/secure_connect.h"
#include "bacnet/datetime.h"
/**
* @addtogroup bacnet_tests
* @{
*/
#if defined(CONFIG_ZTEST_NEW_API)
ZTEST(BACnet_Secure_Connect_Tests, test_BACnet_Secure_Connect)
#else
static void test_BACnet_Secure_Connect(void)
#endif
{
int apdu_len = 0, test_len = 0, null_len = 0, diff = 0;
uint8_t apdu[MAX_APDU] = { 0 };
BACNET_SC_HUB_CONNECTION_STATUS data = { 0 }, test_data;
data.State = BACNET_SC_CONNECTION_STATE_CONNECTED;
datetime_init_ascii(&data.Connect_Timestamp, "2023/08/01-12:00:00");
datetime_init_ascii(&data.Disconnect_Timestamp, "2023/08/02-12:00:00");
data.Error = ERROR_CODE_DEFAULT;
data.Error_Details[0] = 0;
null_len = bacapp_encode_SCHubConnection(NULL, &data);
apdu_len = bacapp_encode_SCHubConnection(apdu, &data);
zassert_true(null_len == apdu_len, NULL);
test_len = bacapp_decode_SCHubConnection(apdu, apdu_len, &test_data);
zassert_true(test_len == apdu_len, NULL);
zassert_true(test_data.State == data.State, NULL);
diff =
datetime_compare(&test_data.Connect_Timestamp, &data.Connect_Timestamp);
zassert_equal(diff, 0, NULL);
diff = datetime_compare(
&test_data.Disconnect_Timestamp, &data.Disconnect_Timestamp);
zassert_equal(diff, 0, NULL);
zassert_true(test_data.Error == data.Error, NULL);
diff = strcmp(test_data.Error_Details, data.Error_Details);
zassert_equal(diff, 0, NULL);
}
/**
* @}
*/
#if defined(CONFIG_ZTEST_NEW_API)
ZTEST_SUITE(BACnet_Secure_Connect_Tests, NULL, NULL, NULL, NULL, NULL);
#else
void test_main(void)
{
ztest_test_suite(
BACnet_Secure_Connect_Tests,
ztest_unit_test(test_BACnet_Secure_Connect));
ztest_run_test_suite(BACnet_Secure_Connect_Tests);
}
#endif
+1
View File
@@ -58,6 +58,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/weeklyschedule.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
@@ -58,6 +58,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -59,6 +59,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -60,6 +60,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/channel_value.c
${SRC_DIR}/bacnet/secure_connect.c
# Test and test library files
./src/main.c
${ZTST_DIR}/ztest_mock.c
+1
View File
@@ -58,6 +58,7 @@ add_executable(${PROJECT_NAME}
${SRC_DIR}/bacnet/dailyschedule.c
${SRC_DIR}/bacnet/calendar_entry.c
${SRC_DIR}/bacnet/special_event.c
${SRC_DIR}/bacnet/secure_connect.c
${SRC_DIR}/bacnet/channel_value.c
# Test and test library files
./src/main.c