summaryrefslogtreecommitdiff
path: root/src/mocking.c
diff options
context:
space:
mode:
author童宗振 <[email protected]>2024-04-10 10:31:44 +0000
committer童宗振 <[email protected]>2024-04-10 10:31:44 +0000
commitedba7626edd0130d5b866e0d6b331995b8786ff4 (patch)
tree429f6f7f7fa437e0b93855aaa7f62c2a529dfd71 /src/mocking.c
parentd53b662b63ea023a9dfd5a550e730d312c14e836 (diff)
Cmocka add
Diffstat (limited to 'src/mocking.c')
-rw-r--r--src/mocking.c109
1 files changed, 109 insertions, 0 deletions
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