mirror of
https://github.com/logos-co/logos-messaging-module.git
synced 2026-08-31 12:41:13 +00:00
100 lines
3.8 KiB
C++
100 lines
3.8 KiB
C++
// Mock implementation of liblogosdelivery C functions.
|
|
// Replaces the real Nim library at link time during unit tests.
|
|
//
|
|
// All callback-taking functions invoke the callback synchronously so that the
|
|
// semaphore inside callApiRetVoid / callApiRetValue is released before
|
|
// try_acquire_for starts waiting - matching the storage module mock pattern.
|
|
//
|
|
// Return values and callback messages are controlled via LogosCMockStore:
|
|
// t.mockCFunction("logosdelivery_start_node").returns(1); // make it fail
|
|
|
|
#include <logos_clib_mock.h>
|
|
#include <cstring>
|
|
|
|
#define RET_OK 0
|
|
#define RET_ERR 1
|
|
|
|
typedef void (*logosdelivery_callback)(int callerRet, const char* msg, size_t len, void* userData);
|
|
|
|
// Sentinel address used as a fake non-null delivery context.
|
|
static char s_fakeCtx = 0;
|
|
|
|
// Helper: invoke callback with RET_OK and the string configured in the mock store.
|
|
static void invokeOk(const char* funcName, logosdelivery_callback cb, void* userData) {
|
|
if (!cb) return;
|
|
const char* msg = LogosCMockStore::instance().getReturnString(funcName);
|
|
cb(RET_OK, msg ? msg : "", msg ? strlen(msg) : 0, userData);
|
|
}
|
|
|
|
extern "C" {
|
|
|
|
void* logosdelivery_create_node(const char* /*cfg*/, logosdelivery_callback cb, void* userData) {
|
|
LOGOS_CMOCK_RECORD("logosdelivery_create_node");
|
|
int ok = LOGOS_CMOCK_RETURN(int, "logosdelivery_create_node");
|
|
if (ok && cb) {
|
|
cb(RET_OK, "", 0, userData);
|
|
} else if (!ok && cb) {
|
|
cb(RET_ERR, "mock: create_node fail", 22, userData);
|
|
}
|
|
return ok ? static_cast<void*>(&s_fakeCtx) : nullptr;
|
|
}
|
|
|
|
void logosdelivery_set_event_callback(void* /*ctx*/, logosdelivery_callback /*cb*/, void* /*userData*/) {
|
|
LOGOS_CMOCK_RECORD("logosdelivery_set_event_callback");
|
|
}
|
|
|
|
int logosdelivery_destroy(void* /*ctx*/, logosdelivery_callback /*cb*/, void* /*userData*/) {
|
|
LOGOS_CMOCK_RECORD("logosdelivery_destroy");
|
|
return RET_OK;
|
|
}
|
|
|
|
int logosdelivery_start_node(void* /*ctx*/, logosdelivery_callback cb, void* userData) {
|
|
LOGOS_CMOCK_RECORD("logosdelivery_start_node");
|
|
invokeOk("logosdelivery_start_node", cb, userData);
|
|
return RET_OK;
|
|
}
|
|
|
|
int logosdelivery_stop_node(void* /*ctx*/, logosdelivery_callback cb, void* userData) {
|
|
LOGOS_CMOCK_RECORD("logosdelivery_stop_node");
|
|
invokeOk("logosdelivery_stop_node", cb, userData);
|
|
return RET_OK;
|
|
}
|
|
|
|
int logosdelivery_send(void* /*ctx*/, logosdelivery_callback cb, void* userData, const char* /*msg*/) {
|
|
LOGOS_CMOCK_RECORD("logosdelivery_send");
|
|
invokeOk("logosdelivery_send", cb, userData);
|
|
return RET_OK;
|
|
}
|
|
|
|
int logosdelivery_subscribe(void* /*ctx*/, logosdelivery_callback cb, void* userData, const char* /*topic*/) {
|
|
LOGOS_CMOCK_RECORD("logosdelivery_subscribe");
|
|
invokeOk("logosdelivery_subscribe", cb, userData);
|
|
return RET_OK;
|
|
}
|
|
|
|
int logosdelivery_unsubscribe(void* /*ctx*/, logosdelivery_callback cb, void* userData, const char* /*topic*/) {
|
|
LOGOS_CMOCK_RECORD("logosdelivery_unsubscribe");
|
|
invokeOk("logosdelivery_unsubscribe", cb, userData);
|
|
return RET_OK;
|
|
}
|
|
|
|
int logosdelivery_get_node_info(void* /*ctx*/, logosdelivery_callback cb, void* userData, const char* /*attributeName*/) {
|
|
LOGOS_CMOCK_RECORD("logosdelivery_get_node_info");
|
|
invokeOk("logosdelivery_get_node_info", cb, userData);
|
|
return RET_OK;
|
|
}
|
|
|
|
int logosdelivery_get_available_node_info_ids(void* /*ctx*/, logosdelivery_callback cb, void* userData) {
|
|
LOGOS_CMOCK_RECORD("logosdelivery_get_available_node_info_ids");
|
|
invokeOk("logosdelivery_get_available_node_info_ids", cb, userData);
|
|
return RET_OK;
|
|
}
|
|
|
|
int logosdelivery_get_available_configs(void* /*ctx*/, logosdelivery_callback cb, void* userData) {
|
|
LOGOS_CMOCK_RECORD("logosdelivery_get_available_configs");
|
|
invokeOk("logosdelivery_get_available_configs", cb, userData);
|
|
return RET_OK;
|
|
}
|
|
|
|
} // extern "C"
|