Add refactored ndel command and UT
[ric-plt/dbaas.git] / redismodule / tst / src / exstrings_ndel_test.cpp
1 /*
2  * Copyright (c) 2018-2020 Nokia.
3  *
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
7  *
8  *       http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 /*
18  * This source code is part of the near-RT RIC (RAN Intelligent Controller)
19  * platform project (RICP).
20  */
21
22 extern "C" {
23 #include "exstringsStub.h"
24 #include "redismodule.h"
25 }
26
27 #include "CppUTest/TestHarness.h"
28 #include "CppUTestExt/MockSupport.h"
29
30 #include "ut_helpers.hpp"
31
32 void nDelReturnNKeysFromUnlink(int count)
33 {
34     mock()
35         .expectOneCall("RedisModule_CallReplyInteger")
36         .andReturnValue(count);
37
38 }
39
40 TEST_GROUP(exstrings_ndel)
41 {
42     void setup()
43     {
44         mock().enable();
45         mock().ignoreOtherCalls();
46     }
47
48     void teardown()
49     {
50         mock().clear();
51         mock().disable();
52     }
53
54 };
55
56 TEST(exstrings_ndel, ndel_atomic_automemory_enabled)
57 {
58     RedisModuleCtx ctx;
59     RedisModuleString ** redisStrVec = createRedisStrVec(2);
60
61     mock().ignoreOtherCalls();
62     mock().expectOneCall("RedisModule_AutoMemory");
63     int ret = NDel_Atomic_RedisCommand(&ctx, redisStrVec,  3);
64     mock().checkExpectations();
65     CHECK_EQUAL(ret, REDISMODULE_ERR);
66
67     delete []redisStrVec;
68 }
69
70 TEST(exstrings_ndel, ndel_atomic_command_parameter_parameter_number_incorrect)
71 {
72     RedisModuleCtx ctx;
73     RedisModuleString ** redisStrVec = createRedisStrVec(2);
74
75     mock().ignoreOtherCalls();
76     mock().expectOneCall("RedisModule_WrongArity");
77     int ret = NDel_Atomic_RedisCommand(&ctx, redisStrVec,  3);
78     mock().checkExpectations();
79     CHECK_EQUAL(ret, REDISMODULE_ERR);
80
81     delete []redisStrVec;
82 }
83
84 TEST(exstrings_ndel, ndel_atomic_command_scan_0_keys_found)
85 {
86     RedisModuleCtx ctx;
87     RedisModuleString ** redisStrVec = createRedisStrVec(2);
88
89     mock().ignoreOtherCalls();
90     returnNKeysFromScanSome(0);
91     mock().expectOneCall("RedisModule_ReplyWithLongLong")
92           .withParameter("ll", 0);
93     int ret = NDel_Atomic_RedisCommand(&ctx, redisStrVec,  2);
94     mock().checkExpectations();
95     CHECK_EQUAL(ret, REDISMODULE_OK);
96
97     delete []redisStrVec;
98 }
99
100 TEST(exstrings_ndel, ndel_atomic_command_scan_3_keys_found_3_keys_deleted)
101 {
102     RedisModuleCtx ctx;
103     RedisModuleString ** redisStrVec = createRedisStrVec(2);
104
105     mock().ignoreOtherCalls();
106     mock().expectOneCall("RedisModule_Call")
107           .withParameter("cmdname", "SCAN");
108     returnNKeysFromScanSome(3);
109     mock()
110         .expectOneCall("RedisModule_Call")
111         .withParameter("cmdname", "UNLINK");
112     nDelReturnNKeysFromUnlink(3);
113     mock().expectOneCall("RedisModule_ReplyWithLongLong")
114           .withParameter("ll", 3);
115     int ret = NDel_Atomic_RedisCommand(&ctx, redisStrVec,  2);
116     mock().checkExpectations();
117     CHECK_EQUAL(ret, REDISMODULE_OK);
118
119     delete []redisStrVec;
120 }
121
122 TEST(exstrings_ndel, ndel_atomic_command_scan_3_keys_found_0_keys_deleted)
123 {
124     RedisModuleCtx ctx;
125     RedisModuleString ** redisStrVec = createRedisStrVec(2);
126
127     mock().ignoreOtherCalls();
128     mock().expectOneCall("RedisModule_Call")
129           .withParameter("cmdname", "SCAN");
130     returnNKeysFromScanSome(3);
131     mock()
132         .expectOneCall("RedisModule_Call")
133         .withParameter("cmdname", "UNLINK");
134     nDelReturnNKeysFromUnlink(0);
135     mock().expectOneCall("RedisModule_ReplyWithLongLong")
136           .withParameter("ll", 0);
137     int ret = NDel_Atomic_RedisCommand(&ctx, redisStrVec,  2);
138     mock().checkExpectations();
139     CHECK_EQUAL(ret, REDISMODULE_OK);
140
141     delete []redisStrVec;
142 }
143
144 TEST(exstrings_ndel, ndel_atomic_command_scan_3_keys_found_1_keys_deleted)
145 {
146     RedisModuleCtx ctx;
147     RedisModuleString ** redisStrVec = createRedisStrVec(2);
148
149     mock().ignoreOtherCalls();
150     mock().expectOneCall("RedisModule_Call")
151           .withParameter("cmdname", "SCAN");
152     returnNKeysFromScanSome(3);
153     mock()
154         .expectOneCall("RedisModule_Call")
155         .withParameter("cmdname", "UNLINK");
156     nDelReturnNKeysFromUnlink(1);
157     mock().expectOneCall("RedisModule_ReplyWithLongLong")
158           .withParameter("ll", 1);
159     int ret = NDel_Atomic_RedisCommand(&ctx, redisStrVec,  2);
160     mock().checkExpectations();
161     CHECK_EQUAL(ret, REDISMODULE_OK);
162
163     delete []redisStrVec;
164 }