Files
logos-messaging-module/tests/mocks/mock_liblogosdelivery.cpp
Iuri Matias 17f7935d96 fix library generation; add tests
fix library generation; add tests

add CI

update

ci fix
2026-04-15 17:12:38 -04:00

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"