Motr  M0
rmapi.c
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2013-2020 Seagate Technology LLC and/or its Affiliates
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * For any questions about this software or licensing,
18  * please email opensource@seagate.com or cortx-questions@seagate.com.
19  *
20  */
21 
22 
23 #include "lib/types.h" /* uint64_t */
24 #include "lib/memory.h"
25 #include "lib/misc.h"
26 #include "ut/ut.h"
27 #include "lib/ub.h"
28 #include "lib/finject.h"
29 
30 #include "rm/rm.h"
31 
32 #include "rm/ut/rings.h"
33 #include "rm/ut/rmut.h"
34 
35 extern bool res_tlist_is_empty(const struct m0_tl *list);
36 extern bool res_tlist_contains(const struct m0_tl *list,
37  const struct m0_rm_resource *res);
38 extern bool m0_rm_ur_tlist_contains(const struct m0_tl *list,
39  const struct m0_rm_credit *credit);
40 extern bool m0_rm_ur_tlist_is_empty(const struct m0_tl *list);
41 
42 /*
43  * Please note that this is basic API testing.
44  * Detailed scenario testing is in another file.
45  */
46 static void credits_api_test (void)
47 {
48  int rc;
49 
52 
53  /* 1. Test m0_rm_incoming_init() */
62 
63  /* 2. Test m0_rm_credit_init */
67 
68  /* 3. Test m0_rm_owner_selfadd. Test memory failure */
70  m0_fi_enable_once("rings_credit_copy", "fail_copy");
73  M0_UT_ASSERT(rc == -ENOMEM);
74 
75  /* 4. Test m0_rm_owner_selfadd. Indirectly tests m0_rm_loan_init */
78  M0_UT_ASSERT(rc == 0);
83 
84  /*
85  * 5. Test m0_rm_credit_get for memory failure.
86  */
90  m0_fi_enable_once("rings_credit_copy", "fail_copy");
94  /* Test m0_rm_incoming_fini */
96 
97  /*
98  * 6. Test m0_rm_credit_get - Success case.
99  * Indirectly tests owner_balance, incoming_check, incoming_check_with,
100  * incoming_complete, m0_pin_pin_add.
101  */
109 
110  /* Test m0_rm_credit_put. Indirectly tests incoming_release, pin_del */
112 
113  /* Test m0_rm_incoming_fini */
115 
116  /*
117  * 7. Test m0_rm_credit_get(), incorrect owner state.
118  */
121  M0_TIME_NEVER);
122  M0_ASSERT(rc == 0);
131 
133 }
134 
135 static void owner_api_test (void)
136 {
138 
139  /*
140  * 1. Test m0_rm_owner_init
141  * Indirectly tests resource_get(), owner_internal_init(),
142  * owner_invariant(), owner_invariant_state().
143  */
148 
149  /* 2. Test m0_rm_owner_windup - on newly initialised owner */
154 
155  /* 3. Test m0_rm_owner_fini. Indirectly tests resource_put(). */
161 
164 }
165 
166 static void res_api_test(void)
167 {
169  /* 1. Test m0_rm_resource_add. Resource is added during init */
171 
177 
179 
180  /* 2. Test m0_rm_resource_del */
182 
187 
189 }
190 
191 static void rt_api_test(void)
192 {
195 
198 
199  /* Test m0_rm_type_deregister */
202 
204 }
205 
206 static void dom_api_test(void)
207 {
208  /* Initialise rm_test_data.rd_domain */
210 
211  /* Make sure that all resource entries are NULL */
214 
215  /* Finalise domain - Nothing to test - make sure it does not crash */
217 }
218 
219 void rm_api_test(void)
220 {
221  /* Test domain APIs */
222  dom_api_test();
223 
224  /* Test resource type APIs */
225  rt_api_test();
226 
227  /* Test resource APIs */
228  res_api_test();
229 
230  /* Test owner API s*/
231  owner_api_test();
232 
233  /* Test credits, incoming APIs */
235 
236 }
237 
238 /*
239  * Local variables:
240  * c-indentation-style: "K&R"
241  * c-basic-offset: 8
242  * tab-width: 8
243  * fill-column: 80
244  * scroll-step: 1
245  * End:
246  */
M0_INTERNAL int m0_rm_owner_selfadd(struct m0_rm_owner *owner, struct m0_rm_credit *r)
Definition: rm.c:732
struct m0_rm_resource_type * r_type
Definition: rm.h:304
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
Definition: mutex.c:66
static struct m0_list list
Definition: list.c:144
uint64_t cr_datum
Definition: rm.h:514
#define NULL
Definition: misc.h:38
enum m0_rm_incoming_type rin_type
Definition: rm.h:1435
struct m0_rm_remote * ro_creditor
Definition: rm.h:1026
bool res_tlist_is_empty(const struct m0_tl *list)
struct rm_ut_data rm_test_data
Definition: rmut.c:53
const m0_time_t M0_TIME_NEVER
Definition: time.c:108
enum m0_rm_incoming_policy rin_policy
Definition: rm.h:1447
const struct m0_rm_incoming_ops rings_incoming_ops
Definition: rings.c:296
Definition: rmut.h:39
struct m0_rm_owner * rd_owner
Definition: rmut.h:112
struct m0_rm_resource_type * rd_rt
Definition: rmut.h:110
struct m0_rm_resource_type * rd_types[M0_RM_RESOURCE_TYPE_ID_MAX]
Definition: rm.h:286
M0_INTERNAL void m0_rm_domain_init(struct m0_rm_domain *dom)
Definition: rm.c:215
#define M0_BITS(...)
Definition: misc.h:236
struct m0_rm_credit rin_want
Definition: rm.h:1450
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
Definition: mutex.c:49
bool m0_rm_ur_tlist_contains(const struct m0_tl *list, const struct m0_rm_credit *credit)
struct m0_rm_domain * rt_dom
Definition: rm.h:428
struct m0_rm_credit rd_credit
Definition: rmut.h:114
struct m0_rm_owner * cr_owner
Definition: rm.h:501
M0_INTERNAL int m0_rm_owner_timedwait(struct m0_rm_owner *owner, uint64_t state, const m0_time_t abs_timeout)
Definition: rm.c:892
uint32_t r_ref
Definition: rm.h:330
int i
Definition: dir.c:1033
struct m0_sm rin_sm
Definition: rm.h:1436
struct m0_sm ro_sm
Definition: rm.h:1005
struct m0_tl ro_borrowed
Definition: rm.h:1033
M0_INTERNAL void m0_rm_incoming_init(struct m0_rm_incoming *in, struct m0_rm_owner *owner, enum m0_rm_incoming_type type, enum m0_rm_incoming_policy policy, uint64_t flags)
Definition: rm.c:1060
uint32_t rt_nr_resources
Definition: rm.h:415
#define m0_free0(pptr)
Definition: memory.h:77
#define M0_ASSERT(cond)
bool res_tlist_contains(const struct m0_tl *list, const struct m0_rm_resource *res)
Definition: rm.h:828
Definition: rings.h:96
M0_INTERNAL void m0_rm_owner_fini(struct m0_rm_owner *owner)
Definition: rm.c:943
Definition: tlist.h:251
const struct m0_rm_incoming_ops * rin_ops
Definition: rm.h:1471
int32_t rin_rc
Definition: rm.h:1446
static void dom_api_test(void)
Definition: rmapi.c:206
static void rt_api_test(void)
Definition: rmapi.c:191
struct m0_mutex rt_lock
Definition: rm.h:404
void rm_utdata_init(struct rm_ut_data *data, enum obj_type type)
Definition: rmut.c:96
struct m0_rm_domain rd_dom
Definition: rmut.h:109
void(* rtype_unset)(struct rm_ut_data *self)
Definition: rmut.h:97
#define m0_forall(var, nr,...)
Definition: misc.h:112
const struct rm_ut_data_ops * rd_ops
Definition: rmut.h:115
M0_INTERNAL void m0_rm_credit_put(struct m0_rm_incoming *in)
Definition: rm.c:1797
M0_INTERNAL void m0_rm_credit_init(struct m0_rm_credit *credit, struct m0_rm_owner *owner)
Definition: rm.c:964
void(* resource_unset)(struct rm_ut_data *self)
Definition: rmut.h:99
void rm_api_test(void)
Definition: rmapi.c:219
bool m0_rm_ur_tlist_is_empty(const struct m0_tl *list)
uint64_t rin_flags
Definition: rm.h:1448
Definition: rm.h:863
M0_INTERNAL void m0_rm_owner_windup(struct m0_rm_owner *owner)
Definition: rm.c:930
Definition: rmut.h:38
struct m0_tl ro_owned[OWOS_NR]
Definition: rm.h:1047
static void m0_fi_enable_once(const char *func, const char *tag)
Definition: finject.h:301
M0_INTERNAL void m0_rm_incoming_fini(struct m0_rm_incoming *in)
Definition: rm.c:1099
struct m0_rm_incoming rd_in
Definition: rmut.h:113
void rings_utdata_ops_set(struct rm_ut_data *data)
Definition: rings.c:375
struct m0_rm_resource * rd_res
Definition: rmut.h:111
uint32_t sm_state
Definition: sm.h:307
static void res_api_test(void)
Definition: rmapi.c:166
int32_t rc
Definition: trigger_fop.h:47
static void owner_api_test(void)
Definition: rmapi.c:135
#define ARRAY_SIZE(a)
Definition: misc.h:45
M0_INTERNAL void m0_rm_domain_fini(struct m0_rm_domain *dom)
Definition: rm.c:227
#define M0_UT_ASSERT(a)
Definition: ut.h:46
static void credits_api_test(void)
Definition: rmapi.c:46
M0_INTERNAL void m0_rm_credit_get(struct m0_rm_incoming *in)
Definition: rm.c:1758
struct m0_rm_resource * ro_resource
Definition: rm.h:1015
struct m0_tl rt_resources
Definition: rm.h:409
void rm_utdata_fini(struct rm_ut_data *data, enum obj_type type)
Definition: rmut.c:128
Definition: rm.h:1156