2 * Copyright (c) 2018-2019 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 #include <CppUTest/TestHarness.h>
19 #include <CppUTestExt/MockSupport.h>
27 #include "redismodule.h"
34 int RedisModule_CreateCommand(RedisModuleCtx *ctx, const char *name, RedisModuleCmdFunc cmdfunc, const char *strflags, int firstkey, int lastkey, int keystep)
43 return REDISMODULE_OK;
47 int RedisModule_WrongArity(RedisModuleCtx *ctx)
50 return REDISMODULE_ERR;
53 int RedisModule_ReplyWithLongLong(RedisModuleCtx *ctx, long long ll)
57 mock().setData("RedisModule_ReplyWithLongLong", (int)ll);
58 return REDISMODULE_OK;
61 void *RedisModule_OpenKey(RedisModuleCtx *ctx, RedisModuleString *keyname, int mode)
67 if (mock().hasData("RedisModule_OpenKey_no"))
72 if (mock().hasData("RedisModule_OpenKey_have"))
74 return (void*)(111111);
81 RedisModuleCallReply *RedisModule_Call(RedisModuleCtx *ctx, const char *cmdname, const char *fmt, ...)
87 if (!strcmp(cmdname, "GET"))
88 mock().setData("GET", 1);
89 else if (!strcmp(cmdname, "SET"))
90 mock().setData("SET", 1);
91 else if (!strcmp(cmdname, "MSET"))
92 mock().setData("MSET", 1);
93 else if (!strcmp(cmdname, "DEL"))
94 mock().setData("DEL", 1);
95 else if (!strcmp(cmdname, "UNLINK"))
96 mock().setData("UNLINK", 1);
97 else if (!strcmp(cmdname, "PUBLISH"))
98 mock().setData("PUBLISH", mock().getData("PUBLISH").getIntValue() + 1);
99 else if (!strcmp(cmdname, "KEYS"))
100 mock().setData("KEYS", 1);
101 else if (!strcmp(cmdname, "MGET"))
102 mock().setData("MGET", 1);
104 if (mock().hasData("RedisModule_Call_Return_Null"))
107 return (RedisModuleCallReply *)1;
110 void RedisModule_FreeCallReply(RedisModuleCallReply *reply)
113 mock().setData("RedisModule_FreeCallReply", mock().getData("RedisModule_FreeCallReply").getIntValue()+1);
116 int RedisModule_CallReplyType(RedisModuleCallReply *reply)
120 if (mock().hasData("RedisModule_CallReplyType_null"))
122 return REDISMODULE_REPLY_NULL;
125 if (mock().hasData("RedisModule_CallReplyType_inter"))
127 return REDISMODULE_REPLY_INTEGER;
130 if (mock().hasData("RedisModule_CallReplyType_str"))
132 return REDISMODULE_REPLY_STRING;
135 if (mock().hasData("RedisModule_CallReplyType_err"))
137 return REDISMODULE_REPLY_ERROR;
140 return REDISMODULE_REPLY_NULL;;
144 long long RedisModule_CallReplyInteger(RedisModuleCallReply *reply)
148 return mock().getData("RedisModule_CallReplyInteger").getIntValue();
151 const char *RedisModule_StringPtrLen(const RedisModuleString *str, size_t *len)
156 if (mock().hasData("RedisModule_String_same"))
161 if (mock().hasData("RedisModule_String_nosame"))
169 int RedisModule_ReplyWithError(RedisModuleCtx *ctx, const char *err)
173 mock().setData("RedisModule_ReplyWithError", 1);
174 return REDISMODULE_OK;
177 int RedisModule_ReplyWithString(RedisModuleCtx *ctx, RedisModuleString *str)
181 mock().setData("RedisModule_ReplyWithString", mock().getData("RedisModule_ReplyWithString").getIntValue()+1);
182 return REDISMODULE_OK;
185 int RedisModule_ReplyWithNull(RedisModuleCtx *ctx)
189 mock().setData("RedisModule_ReplyWithNull", 1);
190 return REDISMODULE_OK;
193 int RedisModule_ReplyWithCallReply(RedisModuleCtx *ctx, RedisModuleCallReply *reply)
197 mock().setData("RedisModule_ReplyWithCallReply", 1);
198 return REDISMODULE_OK;
201 const char *RedisModule_CallReplyStringPtr(RedisModuleCallReply *reply, size_t *len)
207 if (mock().hasData("RedisModule_String_same"))
213 if (mock().hasData("RedisModule_String_nosame"))
222 RedisModuleString *RedisModule_CreateStringFromCallReply(RedisModuleCallReply *reply)
225 return (RedisModuleString *)1;
229 int RedisModule_KeyType(RedisModuleKey *kp)
234 if (mock().hasData("RedisModule_KeyType_empty"))
236 return REDISMODULE_KEYTYPE_EMPTY;
239 if (mock().hasData("RedisModule_KeyType_str"))
241 return REDISMODULE_KEYTYPE_STRING;
244 if (mock().hasData("RedisModule_KeyType_set"))
247 return REDISMODULE_KEYTYPE_SET;
250 return REDISMODULE_KEYTYPE_EMPTY;
255 void RedisModule_CloseKey(RedisModuleKey *kp)
258 mock().actualCall("RedisModule_CloseKey");
261 /* This is included inline inside each Redis module. */
262 int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int apiver)
268 return REDISMODULE_OK;
271 size_t RedisModule_CallReplyLength(RedisModuleCallReply *reply)
274 return mock().getData("RedisModule_CallReplyLength").getIntValue();
278 RedisModuleCallReply *RedisModule_CallReplyArrayElement(RedisModuleCallReply *reply, size_t idx)
282 return (RedisModuleCallReply *)1;
285 int RedisModule_ReplyWithArray(RedisModuleCtx *ctx, long len)
288 mock().setData("RedisModule_ReplyWithArray", (int)len);
289 return REDISMODULE_OK;
292 int RedisModule_StringToLongLong(const RedisModuleString *str, long long *ll)
295 int call_no = mock().getData("RedisModule_StringToLongLongCallCount").getIntValue();
298 *ll = mock().getData("RedisModule_StringToLongLongCall_1").getIntValue();
301 *ll = mock().getData("RedisModule_StringToLongLongCall_2").getIntValue();
304 *ll = mock().getData("RedisModule_StringToLongLongCallDefault").getIntValue();
306 mock().setData("RedisModule_StringToLongLongCallCount", call_no + 1);
307 return REDISMODULE_OK;