diff options
| author | 童宗振 <[email protected]> | 2024-04-10 10:31:44 +0000 |
|---|---|---|
| committer | 童宗振 <[email protected]> | 2024-04-10 10:31:44 +0000 |
| commit | 72b693424c113c83b92e48e4c92f21ae82f4757f (patch) | |
| tree | 429f6f7f7fa437e0b93855aaa7f62c2a529dfd71 | |
| parent | d53b662b63ea023a9dfd5a550e730d312c14e836 (diff) | |
| parent | edba7626edd0130d5b866e0d6b331995b8786ff4 (diff) | |
Merge branch 'cmocka_add' into 'master'
Cmocka add
See merge request tsg/dp_telemetry_app!5
| -rw-r--r-- | CMakeLists.txt | 5 | ||||
| -rw-r--r-- | src/CMakeLists.txt | 7 | ||||
| -rw-r--r-- | src/config.c | 9 | ||||
| -rw-r--r-- | src/config.h | 4 | ||||
| -rw-r--r-- | src/job_ctx.c | 40 | ||||
| -rw-r--r-- | src/kafka.c | 81 | ||||
| -rw-r--r-- | src/kafka.h | 6 | ||||
| -rw-r--r-- | src/mocking.c | 109 | ||||
| -rw-r--r-- | src/mocking.h | 6 | ||||
| -rw-r--r-- | src/trace_output.c | 109 | ||||
| -rw-r--r-- | support/CMakeLists.txt | 40 | ||||
| -rw-r--r-- | support/cmocka-1.1.7.tar.xz | bin | 0 -> 84064 bytes | |||
| -rw-r--r-- | support/googletest-release-1.8.0.tar.gz | bin | 1281617 -> 0 bytes | |||
| -rw-r--r-- | test/CMakeLists.txt | 13 | ||||
| -rw-r--r-- | test/cmocka_test.c | 44 |
15 files changed, 320 insertions, 153 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index baa544c..1176ef1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,5 +15,8 @@ endif() add_definitions(-D_GNU_SOURCE -D__STDC_LIMIT_MACROS) +option(ENABLE_DEVELOP_MOCKING "enable develop mocking" FALSE) + add_subdirectory(${CMAKE_SOURCE_DIR}/support) -add_subdirectory(${CMAKE_SOURCE_DIR}/src)
\ No newline at end of file +add_subdirectory(${CMAKE_SOURCE_DIR}/src) +add_subdirectory(${CMAKE_SOURCE_DIR}/test)
\ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 829cbb6..3d9f6bb 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -7,7 +7,12 @@ set(DP_TELEMETRY_SRC ${CMAKE_CURRENT_SOURCE_DIR}/config.c ${CMAKE_CURRENT_SOURCE_DIR}/job_ctx.c ${CMAKE_CURRENT_SOURCE_DIR}/trace_output.c + ${CMAKE_CURRENT_SOURCE_DIR}/kafka.c + ${CMAKE_CURRENT_SOURCE_DIR}/mocking.c ${CMAKE_SOURCE_DIR}/support/mpack/mpack.c) add_executable(${PROJECT_NAME} ${DP_TELEMETRY_SRC}) -target_link_libraries(${PROJECT_NAME} libmarsio maatframe MESA_prof_load libevent-static rdkafka uuid pthread)
\ No newline at end of file +target_link_libraries(${PROJECT_NAME} libmarsio maatframe MESA_prof_load libevent-static rdkafka libcmocka uuid pthread) +if(ENABLE_DEVELOP_MOCKING) + target_link_options(${PROJECT_NAME} PRIVATE -Wl,--wrap=kafka_handle_create,--wrap=kafka_topic_new,--wrap=kafka_produce) +endif()
\ No newline at end of file diff --git a/src/config.c b/src/config.c index 2de6c45..0e458e2 100644 --- a/src/config.c +++ b/src/config.c @@ -52,6 +52,15 @@ void config_load() } g_conf->log_level = loglevel; + MESA_load_profile_string_def(g_conf->device_group, "global", "device_group", g_conf->device_group, + sizeof(g_conf->device_group), "unknow"); + + g_conf->sled_ip = getenv("SLED_IP"); + if (g_conf->sled_ip == NULL) + { + syslog(LOG_WARNING, "SLED_IP environment variable does not exist."); + } + MESA_load_profile_string_def(g_conf->config_path, "kafka", "borker_list", g_conf->broker_list, sizeof(g_conf->broker_list), ""); MESA_load_profile_string_def(g_conf->config_path, "kafka", "topic_name", g_conf->topic_name, diff --git a/src/config.h b/src/config.h index 22707d8..9757c42 100644 --- a/src/config.h +++ b/src/config.h @@ -20,6 +20,10 @@ struct config struct event_base * evbase; struct event * evsignal[8]; + // device Information + char * sled_ip; + char device_group[MR_SYMBOL_MAX]; + // kafka char topic_name[MR_SYMBOL_MAX]; char broker_list[1024]; diff --git a/src/job_ctx.c b/src/job_ctx.c index 2c8022e..10e5a30 100644 --- a/src/job_ctx.c +++ b/src/job_ctx.c @@ -56,14 +56,6 @@ void job_rule_apply(struct dp_trace_job_desc desc[], unsigned int nr_desc) job_bitmap_t cur_job_id = 1 << i; unsigned int cur_job_uesd = cur_job_id & jobs_id_used; -#if 0 - // The job that was not in the system originally is not in the configuration now. - if (cur_job_uesd == 0 && (desc[i].enable == false || strlen(desc[i].bpf_expr) == 0)) - { - continue; - } -#endif - // The job that was not originally in the system is now included in the configuration. if (cur_job_uesd == 0 && desc[i].enable && strlen(desc[i].bpf_expr) != 0) { @@ -72,38 +64,6 @@ void job_rule_apply(struct dp_trace_job_desc desc[], unsigned int nr_desc) continue; } -#if 0 - // Modification functionality is no longer available - if (cur_job_uesd == 1 && desc[i].enable && strlen(desc[i].bpf_expr) != 0) - { - struct dp_trace_job_desc * job_ctx_i_desc = &desc[i]; - if (strcmp(job_ctx_i_desc->bpf_expr, desc[i].bpf_expr) != 0) - { - syslog(LOG_INFO, " [mod rule %u] bpf_expr: %s;", i, desc[i].bpf_expr); - marsio_dp_trace_job_del(mr_instance, cur_job_id); - marsio_dp_trace_job_add(mr_instance, job_ctx_i_desc); - } - else - { - if (job_ctx_i_desc->pkt_cnt_max != desc[i].pkt_cnt_max) - { - job_ctx_i_desc->pkt_cnt_max = desc[i].pkt_cnt_max; - } - - if (job_ctx_i_desc->sampling != desc[i].sampling) - { - job_ctx_i_desc->sampling = desc[i].sampling; - } - - if (job_ctx_i_desc->snaplen != desc[i].snaplen) - { - job_ctx_i_desc->snaplen = desc[i].snaplen; - } - } - continue; - } -#endif - // The job that originally existed in the system is not in the configuration now. if (cur_job_uesd == 1 && (desc[i].enable == false || strlen(desc[i].bpf_expr) == 0)) { diff --git a/src/kafka.c b/src/kafka.c new file mode 100644 index 0000000..cf3a4d2 --- /dev/null +++ b/src/kafka.c @@ -0,0 +1,81 @@ +#include "kafka.h" +#include "common.h" + +rd_kafka_t * kafka_handle_create(const char * brokerlist, const char * sasl_username, const char * sasl_passwd) +{ + int ret; + char kafka_errstr[1024] = {0}; + rd_kafka_t * handle = NULL; + rd_kafka_conf_t * rconf = NULL; + + rconf = rd_kafka_conf_new(); + + ret = rd_kafka_conf_set(rconf, "queue.buffering.max.messages", "1000000", kafka_errstr, sizeof(kafka_errstr)); + if (ret != RD_KAFKA_CONF_OK) + { + syslog(LOG_ERR, "Error to set kafka \"queue.buffering.max.messages\", %s.", kafka_errstr); + goto error; + } + ret = rd_kafka_conf_set(rconf, "topic.metadata.refresh.interval.ms", "600000", kafka_errstr, sizeof(kafka_errstr)); + if (ret != RD_KAFKA_CONF_OK) + { + syslog(LOG_ERR, "Error to set kafka \"topic.metadata.refresh.interval.ms\", %s.", kafka_errstr); + goto error; + } + + assert(strlen(sasl_username) > 0); + assert(strlen(sasl_passwd) > 0); + + rd_kafka_conf_set(rconf, "security.protocol", "sasl_plaintext", kafka_errstr, sizeof(kafka_errstr)); + rd_kafka_conf_set(rconf, "sasl.mechanisms", "PLAIN", kafka_errstr, sizeof(kafka_errstr)); + ret = rd_kafka_conf_set(rconf, "sasl.username", sasl_username, kafka_errstr, sizeof(kafka_errstr)); + if (ret != RD_KAFKA_CONF_OK) + { + syslog(LOG_ERR, "Error to set kafka \"sasl.username\", %s.", kafka_errstr); + goto error; + } + ret = rd_kafka_conf_set(rconf, "sasl.password", sasl_passwd, kafka_errstr, sizeof(kafka_errstr)); + if (ret != RD_KAFKA_CONF_OK) + { + syslog(LOG_ERR, "Error to set kafka \"sasl.password\", %s.", kafka_errstr); + goto error; + } + + // The conf object is freed by this function and must not be used or destroyed by the application sub-sequently. + handle = rd_kafka_new(RD_KAFKA_PRODUCER, rconf, kafka_errstr, sizeof(kafka_errstr)); + rconf = NULL; + if (handle == NULL) + { + syslog(LOG_ERR, "Error to new kafka, %s.", kafka_errstr); + goto error; + } + + if (rd_kafka_brokers_add(handle, brokerlist) == 0) + { + syslog(LOG_ERR, "Error to add kakfa bokers."); + goto error; + } + + return handle; + +error: + if (rconf != NULL) + { + rd_kafka_conf_destroy(rconf); + } + if (handle != NULL) + { + rd_kafka_destroy(handle); + } + return NULL; +} + +rd_kafka_topic_t * kafka_topic_new(rd_kafka_t * rk, const char * topic, rd_kafka_topic_conf_t * conf) +{ + return rd_kafka_topic_new(rk, topic, conf); +} + +int kafka_produce(rd_kafka_topic_t * rkt, void * payload, size_t len) +{ + return rd_kafka_produce(rkt, RD_KAFKA_PARTITION_UA, RD_KAFKA_MSG_F_FREE, (void *)payload, len, NULL, 0, NULL); +}
\ No newline at end of file diff --git a/src/kafka.h b/src/kafka.h new file mode 100644 index 0000000..197c4f8 --- /dev/null +++ b/src/kafka.h @@ -0,0 +1,6 @@ +#pragma once +#include <librdkafka/rdkafka.h> + +rd_kafka_t * kafka_handle_create(const char * brokerlist, const char * sasl_username, const char * sasl_passwd); +rd_kafka_topic_t * kafka_topic_new(rd_kafka_t * rk, const char * topic, rd_kafka_topic_conf_t * conf); +int kafka_produce(rd_kafka_topic_t * rkt, void * payload, size_t len);
\ No newline at end of file diff --git a/src/mocking.c b/src/mocking.c new file mode 100644 index 0000000..63788a4 --- /dev/null +++ b/src/mocking.c @@ -0,0 +1,109 @@ +#include "mocking.h" +#include "common.h" +#include <mpack.h> + +rd_kafka_t * __wrap_kafka_handle_create(const char * brokerlist, const char * sasl_username, const char * sasl_passwd) +{ + return NULL; +} + +rd_kafka_topic_t * __wrap_kafka_topic_new(rd_kafka_t * rk, const char * topic, rd_kafka_topic_conf_t * conf) +{ + return NULL; +} + +int __wrap_kafka_produce(rd_kafka_topic_t * rkt, void * payload, size_t len) +{ + struct measurements + { + int32_t tv_sec; + int32_t tv_nsec; + const char * app; + uint32_t app_len; + const char * comments; + uint32_t comments_len; + }; + + struct dp_trace_message_pack + { + int64_t microseconds; + char job_id_str[MR_SYMBOL_MAX]; + char sled_ip[INET6_ADDRSTRLEN]; + char device_group[MR_SYMBOL_MAX]; + char source_ip[INET6_ADDRSTRLEN]; + int32_t source_port; + char server_ip[INET6_ADDRSTRLEN]; + int32_t server_port; + const char * packet; + int32_t packet_length; + int32_t measurements_num; + struct measurements record[128]; + }; + + struct dp_trace_message_pack packet = {}; + + mpack_tree_t tree; + mpack_tree_init_data(&tree, payload, len); + mpack_tree_parse(&tree); + + mpack_node_t root = mpack_tree_root(&tree); + packet.microseconds = mpack_node_i64(mpack_node_map_cstr(root, "timestamp")); + + mpack_node_copy_cstr(mpack_node_map_cstr(root, "job_id"), packet.job_id_str, sizeof(packet.job_id_str)); + + mpack_node_copy_cstr(mpack_node_map_cstr(root, "sled_ip"), packet.sled_ip, sizeof(packet.sled_ip)); + + mpack_node_copy_cstr(mpack_node_map_cstr(root, "device_group"), packet.device_group, sizeof(packet.device_group)); + + mpack_node_copy_cstr(mpack_node_map_cstr(root, "source_ip"), packet.source_ip, sizeof(packet.source_ip)); + + packet.source_port = mpack_node_i32(mpack_node_map_cstr(root, "source_port")); + + mpack_node_copy_cstr(mpack_node_map_cstr(root, "server_ip"), packet.server_ip, sizeof(packet.server_ip)); + + packet.server_port = mpack_node_i32(mpack_node_map_cstr(root, "server_port")); + + packet.packet = mpack_node_bin_data(mpack_node_map_cstr(root, "packet")); + + packet.packet_length = mpack_node_i32(mpack_node_map_cstr(root, "packet_length")); + + mpack_node_t measurements_val = mpack_node_map_cstr(root, "measurements"); + packet.measurements_num = mpack_node_array_length(mpack_node_map_cstr(root, "measurements")); + for (unsigned int i = 0; i < packet.measurements_num; i++) + { + if (i >= 128) + { + printf("too many measurements..."); + continue; + } + mpack_node_t measurement = mpack_node_array_at(measurements_val, i); + packet.record[i].tv_sec = mpack_node_i32(mpack_node_map_cstr(measurement, "tv_sec")); + packet.record[i].tv_nsec = mpack_node_i32(mpack_node_map_cstr(measurement, "tv_nsec")); + packet.record[i].app = mpack_node_str(mpack_node_map_cstr(measurement, "app")); + packet.record[i].app_len = mpack_node_strlen(mpack_node_map_cstr(measurement, "app")); + packet.record[i].comments = mpack_node_str(mpack_node_map_cstr(measurement, "comments")); + packet.record[i].comments_len = mpack_node_strlen(mpack_node_map_cstr(measurement, "comments")); + } + + // print + printf("microseconds %ld\n", packet.microseconds); + printf("job_id %s\n", packet.job_id_str); + printf("sled_ip %s\n", packet.sled_ip); + printf("device_group %s\n", packet.device_group); + printf("source_ip %s\n", packet.source_ip); + printf("source_port %d\n", packet.source_port); + printf("server_ip %s\n", packet.server_ip); + printf("server_port %d\n", packet.server_port); + printf("packet_length %d\n", packet.packet_length); + for (unsigned int i = 0; i < packet.measurements_num; i++) + { + printf("record %u:\n", i); + printf("tv_sec %d\n", packet.record[i].tv_sec); + printf("tv_nsec %d\n", packet.record[i].tv_nsec); + printf("app %.*s\n", packet.record[i].app_len, packet.record[i].app); + printf("comments %.*s\n", packet.record[i].comments_len, packet.record[i].comments); + } + + free(payload); + return 0; +}
\ No newline at end of file diff --git a/src/mocking.h b/src/mocking.h new file mode 100644 index 0000000..d509081 --- /dev/null +++ b/src/mocking.h @@ -0,0 +1,6 @@ +#pragma once +#include <librdkafka/rdkafka.h> + +rd_kafka_t * __wrap_kafka_handle_create(const char * brokerlist, const char * sasl_username, const char * sasl_passwd); +rd_kafka_topic_t * __wrap_kafka_topic_new(rd_kafka_t * rk, const char * topic, rd_kafka_topic_conf_t * conf); +int __wrap_kafka_produce(rd_kafka_topic_t * rkt, void * payload, size_t len);
\ No newline at end of file diff --git a/src/trace_output.c b/src/trace_output.c index 4f44070..f72d038 100644 --- a/src/trace_output.c +++ b/src/trace_output.c @@ -2,6 +2,8 @@ #include "common.h" #include "config.h" #include "job_ctx.h" +#include "kafka.h" +#include "mocking.h" #include <mpack.h> @@ -12,6 +14,8 @@ #define BURST_MAX 64 +extern struct mr_instance * mr_instance; + int dp_trace_file_mutex_lock(job_bitmap_t job_id); int dp_trace_file_mutex_unlock(job_bitmap_t job_id); bool dp_trace_file_reach_max_size(job_bitmap_t job_id); @@ -20,7 +24,6 @@ void dp_trace_file_rollbak(job_bitmap_t job_id); int dp_trace_classification(struct mr_instance * instance, marsio_buff_t * mbufs[], int nr_mbufs, marsio_buff_t * class_mbufs[], int nr_class_mbufs, int nr_jobs_mbufs[DP_TRACE_JOB_NUM_MAX]); static void dp_trace_decode_to_message_pack(marsio_buff_t * mr_mbuf, char ** data, size_t * size); -static rd_kafka_t * kafka_handle_create(const char * brokerlist, const char * sasl_username, const char * sasl_passwd); struct dp_trace_output { @@ -65,11 +68,8 @@ void dp_trace_output_init() } } - // kafka init -#if 0 g_conf->kafka_handle = kafka_handle_create(g_conf->broker_list, g_conf->sasl_password, g_conf->sasl_username); - g_conf->kafka_topic = rd_kafka_topic_new(g_conf->kafka_handle, g_conf->topic_name, NULL); -#endif + g_conf->kafka_topic = kafka_topic_new(g_conf->kafka_handle, g_conf->topic_name, NULL); } void * dp_trace_process_thread(void * arg) @@ -129,11 +129,7 @@ void * dp_trace_process_thread(void * arg) char * data; size_t size; dp_trace_decode_to_message_pack(rx_buff[j], &data, &size); - printf("%.*s\n", data, size); -#if 0 - rd_kafka_produce(g_conf->kafka_topic, RD_KAFKA_PARTITION_UA, RD_KAFKA_MSG_F_FREE, (void *)data, size, - NULL, 0, NULL); -#endif + kafka_produce(g_conf->kafka_topic, (void *)data, size); } } } @@ -403,17 +399,30 @@ static void dp_trace_decode_to_message_pack(marsio_buff_t * mr_mbuf, char ** dat mpack_build_map(&writer); mpack_write_cstr(&writer, "timestamp"); - mpack_write_u64(&writer, microseconds); + mpack_write_i64(&writer, microseconds); char job_id_str[10]; snprintf(job_id_str, sizeof(job_id_str), "%d", job_id); mpack_write_cstr(&writer, "job_id"); mpack_write_cstr(&writer, job_id_str); - mpack_write_cstr(&writer, "src_ip"); + mpack_write_cstr(&writer, "sled_ip"); + if (g_conf->sled_ip != NULL) + { + mpack_write_cstr(&writer, g_conf->sled_ip); + } + else + { + mpack_write_cstr(&writer, "0.0.0.0"); + } + + mpack_write_cstr(&writer, "device_group"); + mpack_write_cstr(&writer, g_conf->device_group); + + mpack_write_cstr(&writer, "source_ip"); mpack_write_cstr(&writer, pkt_info.src_addr_str); - mpack_write_cstr(&writer, "src_port"); + mpack_write_cstr(&writer, "source_port"); mpack_write_i32(&writer, pkt_info.src_port); mpack_write_cstr(&writer, "server_ip"); @@ -425,6 +434,9 @@ static void dp_trace_decode_to_message_pack(marsio_buff_t * mr_mbuf, char ** dat mpack_write_cstr(&writer, "packet"); mpack_write_bin(&writer, marsio_buff_mtod(mr_mbuf), marsio_buff_datalen(mr_mbuf)); + mpack_write_cstr(&writer, "packet_length"); + mpack_write_i32(&writer, marsio_buff_datalen(mr_mbuf)); + mpack_write_cstr(&writer, "measurements"); mpack_build_array(&writer); while (position < trace_buff_info.buffer_used) @@ -465,75 +477,4 @@ static void dp_trace_decode_to_message_pack(marsio_buff_t * mr_mbuf, char ** dat { syslog(LOG_ERR, "An error occurred during the data path decode to message pack!\n"); } -} - -static rd_kafka_t * kafka_handle_create(const char * brokerlist, const char * sasl_username, const char * sasl_passwd) -{ - int ret; - char kafka_errstr[1024] = {0}; - rd_kafka_t * handle = NULL; - rd_kafka_conf_t * rconf = NULL; - - rconf = rd_kafka_conf_new(); - - ret = rd_kafka_conf_set(rconf, "queue.buffering.max.messages", "1000000", kafka_errstr, sizeof(kafka_errstr)); - if (ret != RD_KAFKA_CONF_OK) - { - syslog(LOG_ERR, "Error to set kafka \"queue.buffering.max.messages\", %s.", kafka_errstr); - goto error; - } - ret = rd_kafka_conf_set(rconf, "topic.metadata.refresh.interval.ms", "600000", kafka_errstr, sizeof(kafka_errstr)); - if (ret != RD_KAFKA_CONF_OK) - { - syslog(LOG_ERR, "Error to set kafka \"topic.metadata.refresh.interval.ms\", %s.", kafka_errstr); - goto error; - } - -#if 0 - assert(strlen(sasl_username) > 0); - assert(strlen(sasl_passwd) > 0); -#endif - - rd_kafka_conf_set(rconf, "security.protocol", "sasl_plaintext", kafka_errstr, sizeof(kafka_errstr)); - rd_kafka_conf_set(rconf, "sasl.mechanisms", "PLAIN", kafka_errstr, sizeof(kafka_errstr)); - ret = rd_kafka_conf_set(rconf, "sasl.username", sasl_username, kafka_errstr, sizeof(kafka_errstr)); - if (ret != RD_KAFKA_CONF_OK) - { - syslog(LOG_ERR, "Error to set kafka \"sasl.username\", %s.", kafka_errstr); - goto error; - } - ret = rd_kafka_conf_set(rconf, "sasl.password", sasl_passwd, kafka_errstr, sizeof(kafka_errstr)); - if (ret != RD_KAFKA_CONF_OK) - { - syslog(LOG_ERR, "Error to set kafka \"sasl.password\", %s.", kafka_errstr); - goto error; - } - - // The conf object is freed by this function and must not be used or destroyed by the application sub-sequently. - handle = rd_kafka_new(RD_KAFKA_PRODUCER, rconf, kafka_errstr, sizeof(kafka_errstr)); - rconf = NULL; - if (handle == NULL) - { - syslog(LOG_ERR, "Error to new kafka, %s.", kafka_errstr); - goto error; - } - - if (rd_kafka_brokers_add(handle, brokerlist) == 0) - { - syslog(LOG_ERR, "Error to add kakfa bokers."); - goto error; - } - - return handle; - -error: - if (rconf != NULL) - { - rd_kafka_conf_destroy(rconf); - } - if (handle != NULL) - { - rd_kafka_destroy(handle); - } - return NULL; }
\ No newline at end of file diff --git a/support/CMakeLists.txt b/support/CMakeLists.txt index 7f45057..f42c82a 100644 --- a/support/CMakeLists.txt +++ b/support/CMakeLists.txt @@ -2,36 +2,22 @@ include(ExternalProject) -#### GoogleTest -ExternalProject_Add(googletest PREFIX googletest - URL ${CMAKE_CURRENT_SOURCE_DIR}/googletest-release-1.8.0.tar.gz - URL_MD5 16877098823401d1bf2ed7891d7dce36 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) +#### cmocka +ExternalProject_Add(cmocka PREFIX cmocka + URL ${CMAKE_CURRENT_SOURCE_DIR}/cmocka-1.1.7.tar.xz + URL_MD5 dc23f4870eb7dfa6da065f3056e815b0 + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) -ExternalProject_Get_Property(googletest INSTALL_DIR) +ExternalProject_Get_Property(cmocka INSTALL_DIR) file(MAKE_DIRECTORY ${INSTALL_DIR}/include) -add_library(gtest STATIC IMPORTED GLOBAL) -add_dependencies(gtest googletest) -set_property(TARGET gtest PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libgtest.a) -set_property(TARGET gtest PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) -set_property(TARGET gtest PROPERTY INTERFACE_LINK_LIBRARIES pthread) - -add_library(gtest_main STATIC IMPORTED GLOBAL) -add_dependencies(gtest_main googletest) -set_property(TARGET gtest_main PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libgtest_main.a) -set_property(TARGET gtest_main PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) -set_property(TARGET gtest_main PROPERTY INTERFACE_LINK_LIBRARIES pthread gtest) - -add_library(gmock STATIC IMPORTED GLOBAL) -add_dependencies(gmock googletest) -set_property(TARGET gmock PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libgmock.a) -set_property(TARGET gmock PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) - -add_library(gmock_main STATIC IMPORTED GLOBAL) -add_dependencies(gmock_main googletest) -set_property(TARGET gmock_main PROPERTY IMPORTED_LOCATION ${INSTALL_DIR}/lib/libgmock_main.a) -set_property(TARGET gmock_main PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) +add_library(libcmocka STATIC IMPORTED GLOBAL) +add_dependencies(libcmocka cmocka) +set_target_properties(libcmocka PROPERTIES + IMPORTED_LOCATION ${INSTALL_DIR}/lib64/libcmocka.a + INTERFACE_LINK_DIRECTORIES ${INSTALL_DIR}/lib64 + INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include +) #### libevent ExternalProject_Add(libevent PREFIX libevent diff --git a/support/cmocka-1.1.7.tar.xz b/support/cmocka-1.1.7.tar.xz Binary files differnew file mode 100644 index 0000000..42aedb0 --- /dev/null +++ b/support/cmocka-1.1.7.tar.xz diff --git a/support/googletest-release-1.8.0.tar.gz b/support/googletest-release-1.8.0.tar.gz Binary files differdeleted file mode 100644 index a40df33..0000000 --- a/support/googletest-release-1.8.0.tar.gz +++ /dev/null diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000..1ba8214 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,13 @@ +include_directories(${CMAKE_SOURCE_DIR}/support/mpack) +include_directories(${CMAKE_SOURCE_DIR}/src) + +set(DP_TRACE_TELEMETRY_SOURCES + ${CMAKE_SOURCE_DIR}/src/config.c + ${CMAKE_SOURCE_DIR}/src/job_ctx.c + ${CMAKE_SOURCE_DIR}/src/trace_output.c + ${CMAKE_SOURCE_DIR}/src/kafka.c + ${CMAKE_SOURCE_DIR}/src/mocking.c + ${CMAKE_SOURCE_DIR}/support/mpack/mpack.c) + +add_executable(cmocka_test cmocka_test.c ${DP_TRACE_TELEMETRY_SOURCES}) +target_link_libraries(cmocka_test libmarsio maatframe MESA_prof_load libevent-static rdkafka libcmocka uuid pthread) diff --git a/test/cmocka_test.c b/test/cmocka_test.c new file mode 100644 index 0000000..0c59699 --- /dev/null +++ b/test/cmocka_test.c @@ -0,0 +1,44 @@ +#include "common.h" +#include "config.h" + +#include <setjmp.h> +#include <stdarg.h> +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> + +#include <cmocka.h> + +struct mr_instance * mr_instance = NULL; + +int setup(void ** state) +{ + mr_instance = marsio_create(); + return 0; +} + +int teardown(void ** state) +{ + if (g_conf != NULL) + { + free(g_conf); + g_conf == NULL; + printf("free g_conf\n"); + } + return 0; +} + +void config_create_test(void ** state) +{ + config_create(); + assert_non_null(g_conf); +} + +int main(int argc, char * argv[]) +{ + const struct CMUnitTest config_tests[] = { + cmocka_unit_test_setup_teardown(config_create_test, setup, teardown), + }; + cmocka_run_group_tests(config_tests, NULL, NULL); + return 0; +}
\ No newline at end of file |
