Free resources when 'nget.noatomic' thread terminates
[ric-plt/dbaas.git] / redismodule / tst / mock / src / commonStub.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
23 #include <unistd.h>
24 #include <string.h>
25
26 extern "C" {
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <ctype.h>
30
31 #include "redismodule.h"
32 #include "commonStub.h"
33 }
34
35 #include <CppUTest/TestHarness.h>
36 #include <CppUTestExt/MockSupport.h>
37 #include <CppUTest/MemoryLeakDetectorMallocMacros.h>
38
39 typedef struct RedisModuleBlockedClientArgs {
40     RedisModuleBlockedClient *bc;
41     RedisModuleString **argv;
42     int argc;
43 } RedisModuleBlockedClientArgs;
44
45 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
46                    void *(*start_routine) (void *), void *arg)
47 {
48     (void)thread;
49     (void)attr;
50     (void)start_routine;
51     if (mock().getData("pthread_create_free_block_client_args").getIntValue()) {
52         RedisModuleBlockedClientArgs* bca = (RedisModuleBlockedClientArgs*)arg;
53         free(bca->bc);
54         free(bca);
55     }
56
57     return mock()
58         .actualCall("pthread_create")
59         .returnIntValueOrDefault(0);
60 }
61
62 int pthread_detach(pthread_t thread)
63 {
64     (void)thread;
65
66     return mock()
67         .actualCall("pthread_detach")
68         .returnIntValueOrDefault(0);
69 }
70
71 pthread_t pthread_self(void)
72 {
73     return mock()
74         .actualCall("pthread_self")
75         .returnIntValueOrDefault(UT_DUMMY_THREAD_ID);
76 }