2 * Copyright (c) 2018-2020 Nokia.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * This source code is part of the near-RT RIC (RAN Intelligent Controller)
19 * platform project (RICP).
27 #include "redismodule.h"
33 #include <CppUTest/TestHarness.h>
34 #include <CppUTestExt/MockSupport.h>
37 int RedisModule_CreateCommand(RedisModuleCtx *ctx, const char *name, RedisModuleCmdFunc cmdfunc, const char *strflags, int firstkey, int lastkey, int keystep)
46 return REDISMODULE_OK;
50 int RedisModule_WrongArity(RedisModuleCtx *ctx)
53 mock().setData("RedisModule_WrongArity", 1);
54 return REDISMODULE_ERR;
57 int RedisModule_ReplyWithLongLong(RedisModuleCtx *ctx, long long ll)
61 mock().setData("RedisModule_ReplyWithLongLong", (int)ll);
62 return REDISMODULE_OK;
65 void *RedisModule_OpenKey(RedisModuleCtx *ctx, RedisModuleString *keyname, int mode)
71 if (mock().hasData("RedisModule_OpenKey_no"))
76 if (mock().hasData("RedisModule_OpenKey_have"))
78 return (void*)(111111);
85 RedisModuleCallReply *RedisModule_Call(RedisModuleCtx *ctx, const char *cmdname, const char *fmt, ...)
91 if (!strcmp(cmdname, "GET"))
92 mock().setData("GET", 1);
93 else if (!strcmp(cmdname, "SET"))
94 mock().setData("SET", 1);
95 else if (!strcmp(cmdname, "MSET"))
96 mock().setData("MSET", 1);
97 else if (!strcmp(cmdname, "DEL"))
98 mock().setData("DEL", 1);
99 else if (!strcmp(cmdname, "UNLINK"))
100 mock().setData("UNLINK", 1);
101 else if (!strcmp(cmdname, "PUBLISH"))
102 mock().setData("PUBLISH", mock().getData("PUBLISH").getIntValue() + 1);
103 else if (!strcmp(cmdname, "KEYS"))
104 mock().setData("KEYS", 1);
105 else if (!strcmp(cmdname, "MGET"))
106 mock().setData("MGET", 1);
107 else if (!strcmp(cmdname, "SCAN"))
108 mock().setData("SCAN", 1);
110 if (mock().hasData("RedisModule_Call_Return_Null"))
113 return (RedisModuleCallReply *)1;
116 void RedisModule_FreeCallReply(RedisModuleCallReply *reply)
119 mock().setData("RedisModule_FreeCallReply", mock().getData("RedisModule_FreeCallReply").getIntValue()+1);
122 int RedisModule_CallReplyType(RedisModuleCallReply *reply)
126 if (mock().hasData("RedisModule_CallReplyType_null"))
128 return REDISMODULE_REPLY_NULL;
131 if (mock().hasData("RedisModule_CallReplyType_inter"))
133 return REDISMODULE_REPLY_INTEGER;
136 if (mock().hasData("RedisModule_CallReplyType_str"))
138 return REDISMODULE_REPLY_STRING;
141 if (mock().hasData("RedisModule_CallReplyType_err"))
143 return REDISMODULE_REPLY_ERROR;
146 return REDISMODULE_REPLY_NULL;;
150 long long RedisModule_CallReplyInteger(RedisModuleCallReply *reply)
154 return mock().getData("RedisModule_CallReplyInteger").getIntValue();
157 const char *RedisModule_StringPtrLen(const RedisModuleString *str, size_t *len)
162 if (mock().hasData("RedisModule_String_same"))
167 if (mock().hasData("RedisModule_String_nosame"))
172 if (mock().hasData("RedisModule_String_count"))
177 if (mock().hasData("RedisModule_String_count1"))
186 int RedisModule_ReplyWithError(RedisModuleCtx *ctx, const char *err)
190 mock().setData("RedisModule_ReplyWithError", 1);
191 return REDISMODULE_OK;
194 int RedisModule_ReplyWithString(RedisModuleCtx *ctx, RedisModuleString *str)
198 mock().setData("RedisModule_ReplyWithString", mock().getData("RedisModule_ReplyWithString").getIntValue()+1);
199 return REDISMODULE_OK;
202 int RedisModule_ReplyWithNull(RedisModuleCtx *ctx)
206 mock().setData("RedisModule_ReplyWithNull", 1);
207 return REDISMODULE_OK;
210 int RedisModule_ReplyWithCallReply(RedisModuleCtx *ctx, RedisModuleCallReply *reply)
214 mock().setData("RedisModule_ReplyWithCallReply", 1);
215 return REDISMODULE_OK;
218 const char *RedisModule_CallReplyStringPtr(RedisModuleCallReply *reply, size_t *len)
222 if (mock().hasData("RedisModule_String_same"))
229 if (mock().hasData("RedisModule_String_nosame"))
239 RedisModuleString *RedisModule_CreateStringFromCallReply(RedisModuleCallReply *reply)
242 return (RedisModuleString *)1;
246 int RedisModule_KeyType(RedisModuleKey *kp)
251 if (mock().hasData("RedisModule_KeyType_empty"))
253 return REDISMODULE_KEYTYPE_EMPTY;
256 if (mock().hasData("RedisModule_KeyType_str"))
258 return REDISMODULE_KEYTYPE_STRING;
261 if (mock().hasData("RedisModule_KeyType_set"))
264 return REDISMODULE_KEYTYPE_SET;
267 return REDISMODULE_KEYTYPE_EMPTY;
272 void RedisModule_CloseKey(RedisModuleKey *kp)
275 mock().actualCall("RedisModule_CloseKey");
278 /* This is included inline inside each Redis module. */
279 int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int apiver)
285 return REDISMODULE_OK;
288 size_t RedisModule_CallReplyLength(RedisModuleCallReply *reply)
291 return mock().getData("RedisModule_CallReplyLength").getIntValue();
295 RedisModuleCallReply *RedisModule_CallReplyArrayElement(RedisModuleCallReply *reply, size_t idx)
299 return (RedisModuleCallReply *)1;
302 int RedisModule_ReplyWithArray(RedisModuleCtx *ctx, long len)
305 mock().setData("RedisModule_ReplyWithArray", (int)len);
306 return REDISMODULE_OK;
309 void RedisModule_FreeString(RedisModuleCtx *ctx, RedisModuleString *str)
313 mock().setData("RedisModule_FreeString", mock().getData("RedisModule_FreeString").getIntValue()+1);
317 RedisModuleBlockedClient *RedisModule_BlockClient(RedisModuleCtx *ctx, RedisModuleCmdFunc reply_callback, RedisModuleCmdFunc timeout_callback, void (*free_privdata)(RedisModuleCtx*,void*), long long timeout_ms)
320 (void)reply_callback;
321 (void)timeout_callback;
324 RedisModuleBlockedClient *bc = (RedisModuleBlockedClient*)malloc(sizeof(RedisModuleBlockedClient));
325 mock().setData("RedisModule_BlockClient", 1);
329 int RedisModule_UnblockClient(RedisModuleBlockedClient *bc, void *privdata)
333 mock().setData("RedisModule_UnblockClient", mock().getData("RedisModule_UnblockClient").getIntValue()+1);
334 return REDISMODULE_OK;
337 int RedisModule_AbortBlock(RedisModuleBlockedClient *bc)
340 mock().setData("RedisModule_AbortBlock", 1);
341 return REDISMODULE_OK;
344 RedisModuleString *RedisModule_CreateString(RedisModuleCtx *ctx, const char *ptr, size_t len)
349 RedisModuleString *rms = (RedisModuleString*)malloc(sizeof(RedisModuleString));
350 mock().setData("RedisModule_CreateString", mock().getData("RedisModule_CreateString").getIntValue()+1);
354 void RedisModule_FreeThreadSafeContext(RedisModuleCtx *ctx)
357 mock().setData("RedisModule_FreeThreadSafeContext", 1);
361 int RedisModule_StringToLongLong(const RedisModuleString *str, long long *ll)
365 int call_no = mock().getData("RedisModule_StringToLongLongCallCount").getIntValue();
368 *ll = mock().getData("RedisModule_StringToLongLongCall_1").getIntValue();
371 *ll = mock().getData("RedisModule_StringToLongLongCall_2").getIntValue();
374 *ll = mock().getData("RedisModule_StringToLongLongCallDefault").getIntValue();
376 mock().setData("RedisModule_StringToLongLongCallCount", call_no + 1);
377 return REDISMODULE_OK;
380 void RedisModule_ThreadSafeContextLock(RedisModuleCtx *ctx)
383 mock().setData("RedisModule_ThreadSafeContextLock", 1);
387 void RedisModule_ThreadSafeContextUnlock(RedisModuleCtx *ctx)
390 mock().setData("RedisModule_ThreadSafeContextUnlock", 1);
394 void RedisModule_ReplySetArrayLength(RedisModuleCtx *ctx, long len)
397 mock().setData("RedisModule_ReplySetArrayLength", (int)len);
401 RedisModuleCtx *RedisModule_GetThreadSafeContext(RedisModuleBlockedClient *bc)
404 mock().setData("RedisModule_GetThreadSafeContext", 1);
408 RedisModuleString *RedisModule_CreateStringFromLongLong(RedisModuleCtx *ctx, long long ll)
412 RedisModuleString *rms = (RedisModuleString*)malloc(sizeof(RedisModuleString));
413 mock().setData("RedisModule_CreateStringFromLongLong", mock().getData("RedisModule_CreateStringFromLongLong").getIntValue()+1);
417 void RedisModule_AutoMemory(RedisModuleCtx *ctx)
420 int old = mock().getData("RedisModule_AutoMemory").getIntValue();
421 mock().setData("RedisModule_AutoMemory", old + 1);
425 void *RedisModule_Alloc(size_t bytes)
428 .actualCall("RedisModule_Alloc");
429 return malloc(bytes);
432 void RedisModule_Free(void *ptr)
435 .actualCall("RedisModule_Free");