/* * Copyright (c) 2018-2020 Nokia. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * This source code is part of the near-RT RIC (RAN Intelligent Controller) * platform project (RICP). */ #include #include extern "C" { #include "redismodule.h" #include #include #include } #include #include #include "ut_helpers.hpp" RedisModuleCallReply *RedisModule_Call(RedisModuleCtx *ctx, const char *cmdname, const char *fmt, ...) { (void)ctx; (void)fmt; return (RedisModuleCallReply *)mock().actualCall("RedisModule_Call") .withParameter("cmdname", cmdname) .returnPointerValueOrDefault(malloc(UT_DUMMY_BUFFER_SIZE)); } int RedisModule_ReplyWithString(RedisModuleCtx *ctx, RedisModuleString *str) { (void)ctx; (void)str; return mock() .actualCall("RedisModule_ReplyWithString") .returnIntValueOrDefault(REDISMODULE_OK); } RedisModuleString *RedisModule_CreateStringFromCallReply(RedisModuleCallReply *reply) { (void)reply; return (RedisModuleString *)mock().actualCall("RedisModule_CreateStringFromCallReply") .returnPointerValue(); } void RedisModule_CloseKey(RedisModuleKey *kp) { (void)kp; mock().actualCall("RedisModule_CloseKey"); } size_t RedisModule_CallReplyLength(RedisModuleCallReply *reply) { (void)reply; return (size_t)mock().actualCall("RedisModule_CallReplyLength") .returnIntValue(); } int RedisModule_ReplyWithArray(RedisModuleCtx *ctx, long len) { (void)ctx; return (int)mock().actualCall("RedisModule_ReplyWithArray") .withParameter("len", len) .returnIntValueOrDefault(REDISMODULE_OK); } void RedisModule_ReplySetArrayLength(RedisModuleCtx *ctx, long len) { (void)ctx; mock().actualCall("RedisModule_ReplySetArrayLength") .withParameter("len", len); } RedisModuleString *RedisModule_CreateString(RedisModuleCtx *ctx, const char *ptr, size_t len) { (void)ctx; (void)ptr; (void)len; void* buf = malloc(UT_DUMMY_BUFFER_SIZE); return (RedisModuleString *) mock() .actualCall("RedisModule_CreateString") .returnPointerValueOrDefault(buf); } RedisModuleString *RedisModule_CreateStringFromLongLong(RedisModuleCtx *ctx, long long ll) { (void)ctx; (void)ll; void* buf = malloc(UT_DUMMY_BUFFER_SIZE); return (RedisModuleString *)mock() .actualCall("RedisModule_CreateStringFromLongLong") .returnPointerValueOrDefault(buf); } void RedisModule_AutoMemory(RedisModuleCtx *ctx) { (void)ctx; mock().actualCall("RedisModule_AutoMemory"); } void RedisModule_FreeString(RedisModuleCtx *ctx, RedisModuleString *str) { (void)ctx; free(str); mock().actualCall("RedisModule_FreeString"); } int RedisModule_StringToLongLong(const RedisModuleString *str, long long *ll) { (void)str; return (int)mock().actualCall("RedisModule_StringToLongLong") .withOutputParameter("ll", ll) .returnIntValueOrDefault(REDISMODULE_OK); } void RedisModule_FreeCallReply(RedisModuleCallReply *reply) { free(reply); mock().actualCall("RedisModule_FreeCallReply"); } RedisModuleCallReply *RedisModule_CallReplyArrayElement(RedisModuleCallReply *reply, size_t idx) { (void)reply; (void)idx; return (RedisModuleCallReply *)mock() .actualCall("RedisModule_CallReplyArrayElement") .returnPointerValueOrDefault(NULL); } int RedisModule_ReplyWithLongLong(RedisModuleCtx *ctx, long long ll) { (void)ctx; return (int)mock() .actualCall("RedisModule_ReplyWithLongLong") .withParameter("ll", (int)ll) .returnIntValueOrDefault(REDISMODULE_OK); } long long RedisModule_CallReplyInteger(RedisModuleCallReply *reply) { (void)reply; return (long long)mock() .actualCall("RedisModule_CallReplyInteger") .returnIntValue(); } int RedisModule_CallReplyType(RedisModuleCallReply *reply) { (void)reply; return (int)mock() .actualCall("RedisModule_CallReplyType") .returnIntValue(); } int RedisModule_WrongArity(RedisModuleCtx *ctx) { (void)ctx; return (int)mock() .actualCall("RedisModule_WrongArity") .returnIntValueOrDefault(REDISMODULE_ERR); } int RedisModule_ReplyWithError(RedisModuleCtx *ctx, const char *err) { (void)ctx; (void)err; return (int)mock() .actualCall("RedisModule_ReplyWithError") .returnIntValueOrDefault(REDISMODULE_OK); } int RedisModule_ReplyWithCallReply(RedisModuleCtx *ctx, RedisModuleCallReply *reply) { (void)ctx; (void)reply; return (int)mock() .actualCall("RedisModule_ReplyWithCallReply") .returnIntValueOrDefault(REDISMODULE_OK); } void *RedisModule_OpenKey(RedisModuleCtx *ctx, RedisModuleString *keyname, int mode) { (void)ctx; (void)keyname; (void)mode; return (void *)mock() .actualCall("RedisModule_OpenKey") .returnPointerValue(); } int RedisModule_KeyType(RedisModuleKey *kp) { (void)kp; return (int)mock() .actualCall("RedisModule_KeyType") .returnIntValue(); } const char *RedisModule_StringPtrLen(const RedisModuleString *str, size_t *len) { (void)str; if (len != NULL) { return (const char *)mock() .actualCall("RedisModule_StringPtrLen") .withOutputParameter("len", len) .returnPointerValue(); } else { return (const char *)mock() .actualCall("RedisModule_StringPtrLen") .returnPointerValue(); } } RedisModuleBlockedClient *RedisModule_BlockClient(RedisModuleCtx *ctx, RedisModuleCmdFunc reply_callback, RedisModuleCmdFunc timeout_callback, void (*free_privdata)(RedisModuleCtx*,void*), long long timeout_ms) { (void)ctx; (void)reply_callback; (void)timeout_callback; (void)free_privdata; (void)timeout_ms; void *buf = malloc(UT_DUMMY_BUFFER_SIZE); return (RedisModuleBlockedClient *)mock() .actualCall("RedisModule_BlockClient") .returnPointerValueOrDefault(buf); } int RedisModule_UnblockClient(RedisModuleBlockedClient *bc, void *privdata) { (void)privdata; free(bc); return (int)mock() .actualCall("RedisModule_UnblockClient") .returnIntValueOrDefault(REDISMODULE_OK); } const char *RedisModule_CallReplyStringPtr(RedisModuleCallReply *reply, size_t *len) { (void)reply; (void)len; static char cursor_zero_literal[] = "0"; return (const char *)mock() .actualCall("RedisModule_CallReplyStringPtr") .returnPointerValueOrDefault(cursor_zero_literal); } int RedisModule_AbortBlock(RedisModuleBlockedClient *bc) { free(bc); return mock() .actualCall("RedisModule_AbortBlock") .returnIntValueOrDefault(REDISMODULE_OK); } int RedisModule_ReplyWithNull(RedisModuleCtx *ctx) { (void)ctx; return mock() .actualCall("RedisModule_ReplyWithNull") .returnIntValueOrDefault(REDISMODULE_OK); } void RedisModule_ThreadSafeContextUnlock(RedisModuleCtx *ctx) { (void)ctx; int tmp = mock().getData("TimesThreadSafeContextWasUnlocked").getIntValue(); mock().setData("TimesThreadSafeContextWasUnlocked", tmp + 1); mock() .actualCall("RedisModule_ThreadSafeContextUnlock"); } void RedisModule_ThreadSafeContextLock(RedisModuleCtx *ctx) { (void)ctx; int tmp = mock().getData("TimesThreadSafeContextWasLocked").getIntValue(); mock().setData("TimesThreadSafeContextWasLocked", tmp + 1); mock() .actualCall("RedisModule_ThreadSafeContextLock"); } RedisModuleCtx *RedisModule_GetThreadSafeContext(RedisModuleBlockedClient *bc) { (void)bc; return (RedisModuleCtx *)mock() .actualCall("RedisModule_GetThreadSafeContext") .returnPointerValueOrDefault(0); } void RedisModule_FreeThreadSafeContext(RedisModuleCtx *ctx) { (void)ctx; mock() .actualCall("RedisModule_FreeThreadSafeContext"); } /* This is included inline inside each Redis module. */ int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int apiver) { (void)ctx; (void)name; (void)ver; (void)apiver; return mock() .actualCall("RedisModule_Init") .returnIntValueOrDefault(REDISMODULE_OK); } int RedisModule_CreateCommand(RedisModuleCtx *ctx, const char *name, RedisModuleCmdFunc cmdfunc, const char *strflags, int firstkey, int lastkey, int keystep) { (void)ctx; (void)name; (void)cmdfunc; (void)strflags; (void)firstkey; (void)lastkey; (void)keystep; return mock() .actualCall("RedisModule_CreateCommand") .returnIntValueOrDefault(REDISMODULE_OK); } void *RedisModule_Alloc(size_t bytes) { void *buf = malloc(bytes); return mock() .actualCall("RedisModule_Alloc") .returnPointerValueOrDefault(buf); } void RedisModule_Free(void *ptr) { free(ptr); mock() .actualCall("RedisModule_Free"); }