Motr  M0
pd_ut.c
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2017-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 
24 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_FDMI
25 #include "lib/trace.h"
26 
27 #include "ut/ut.h"
28 #include "fdmi/module.h"
29 #include "fdmi/fdmi.h"
30 #include "fdmi/fops.h"
31 #include "fdmi/service.h"
33 #include "fdmi/ut/sd_common.h"
34 #include "lib/string.h"
35 #include "lib/finject.h"
36 #include "rpc/item_internal.h" /* m0_rpc_item_change_state */
37 #include "rpc/packet_internal.h" /* m0_rpc_packet_traverse_items */
38 #include "rpc/rpc_internal.h" /* item2conn */
40 #include "rpc/conn_pool_internal.h"
41 
42 /*----------------------------------------
43  fdmi_pd_register_filter
44  ----------------------------------------*/
45 
46 static
47 int pd_ut_pcb_fdmi_rec(struct m0_uint128 *rec_id,
48  struct m0_buf fdmi_rec,
49  struct m0_fid filter_id);
50 
52 {
53  const struct m0_fid ffid = {
54  .f_container = 0xDEA110C,
55  .f_key = 0xDA221ED,
56  };
57  const struct m0_fdmi_plugin_ops pcb = {
59  };
60  const struct m0_fdmi_filter_desc fd;
61  const struct m0_fdmi_pd_ops *pdo = m0_fdmi_plugin_dock_api_get();
62  struct m0_fdmi_filter_reg *freg;
63  struct m0_fid fids[2] = { [0] = ffid, [1] = { 0, 0 } };
64  int rc;
65 
66  rc = (pdo->fpo_register_filter)(&ffid, &fd, NULL);
67  M0_UT_ASSERT(rc == -EINVAL);
68 
69  m0_fi_enable_off_n_on_m("m0_alloc", "fail_allocation", 0, 1);
70  rc = (pdo->fpo_register_filter)(&ffid, &fd, &pcb);
71  M0_UT_ASSERT(rc == -ENOMEM);
72 
73  m0_fi_enable_off_n_on_m("m0_alloc", "fail_allocation", 1, 1);
74  rc = (pdo->fpo_register_filter)(&ffid, &fd, &pcb);
75  M0_UT_ASSERT(rc == -ENOMEM);
76 
77  m0_fi_enable_off_n_on_m("m0_alloc", "fail_allocation", 2, 1);
78  rc = (pdo->fpo_register_filter)(&ffid, &fd, &pcb);
79  M0_UT_ASSERT(rc == -ENOMEM);
80 
81  m0_fi_disable("m0_alloc", "fail_allocation");
82 
83  (pdo->fpo_enable_filters)(true, fids, ARRAY_SIZE(fids));
84 
85  /* add filter */
86  rc = (pdo->fpo_register_filter)(&ffid, &fd, &pcb);
87  M0_UT_ASSERT(rc == 0);
88 
89  /* find filter and see if it's disabled */
91  M0_UT_ASSERT(freg != NULL);
93 
94  /* toggle active flag back and forth */
96 
97  (pdo->fpo_enable_filters)(true, fids, ARRAY_SIZE(fids));
98  M0_UT_ASSERT(!(freg->ffr_flags &
100 
101  (pdo->fpo_enable_filters)(false, fids, ARRAY_SIZE(fids));
102  M0_UT_ASSERT(!!(freg->ffr_flags &
104  }
105 
106  /* deregister filter */
108 }
109 
110 /*----------------------------------------
111  fdmi_pd_fom_norpc
112  ----------------------------------------*/
113 
114 static struct m0_semaphore g_sem;
115 struct m0_uint128 frid_new = M0_UINT128(0xEEEE, 0xEEEE);
117 
118 
119 static void ut_pd_fom_fini(struct m0_fom *fom);
120 
122  struct m0_fom **out,
123  struct m0_reqh *reqh) = NULL;
124 
125 int detour_create(struct m0_fop *fop, struct m0_fom **out, struct m0_reqh *reqh)
126 {
127  int rc;
128  struct pdock_fom *pd_fom;
129  struct m0_fom *fom;
130  struct m0_fdmi_record_reg *rreg;
131  struct m0_fop_fdmi_record *frec;
132 
133  M0_ENTRY();
134 
135  m0_fi_enable_off_n_on_m("m0_alloc", "fail_allocation", 0, 1);
136  rc = (*native_create)(fop, out, reqh);
137  M0_UT_ASSERT(rc == -ENOMEM);
138 
139  m0_fi_enable_off_n_on_m("m0_alloc", "fail_allocation", 1, 1);
140  rc = (*native_create)(fop, out, reqh);
141  M0_UT_ASSERT(rc == -ENOMEM);
142 
143  m0_fi_enable_off_n_on_m("m0_alloc", "fail_allocation", 2, 1);
144  rc = (*native_create)(fop, out, reqh);
145  M0_UT_ASSERT(rc == -ENOENT);
146 
147  m0_fi_enable_off_n_on_m("m0_alloc", "fail_allocation", 3, 1);
148  rc = (*native_create)(fop, out, reqh);
149  M0_UT_ASSERT(rc == -ENOMEM);
150 
151  m0_fi_disable("m0_alloc", "fail_allocation");
152 
153  rc = (*native_create)(fop, out, reqh);
155  ? rc == 0
156  : rc == -ENOMEM);
157 
158  if (rc != 0) {
160  return rc;
161  }
162 
163  M0_UT_ASSERT(out != NULL);
164 
165  fom = *out;
166  M0_UT_ASSERT(fom != NULL);
167 
168  pd_fom = container_of(fom, struct pdock_fom, pf_fom);
170 
171  frec = m0_fop_data(fop);
172  M0_UT_ASSERT(frec != NULL);
174  M0_UT_ASSERT(rreg != NULL);
175 
176  return M0_RC(rc);
177 }
178 
180 
181 
182 #define FID_CTN 0xDEA110C
183 #define FID_KEY 0xDA221ED
184 #define FID_CTN1 0x1FA11ED
185 #define FID_KEY1 0x1A110CA
186 #define M0_FID(c_, k_) { .f_container = c_, .f_key = k_ }
187 
189 struct m0_uint128 frid = M0_UINT128(0xBEC02, 0xF11ED);
190 
191 static void ut_pd_fom_fini(struct m0_fom *fom)
192 {
193  struct m0_fop_fdmi_record *frec;
194  struct m0_fdmi_record_reg *rreg;
195 
196  M0_ENTRY();
197 
199  m0_fi_disable("m0_fdmi__pdock_record_reg_find", "fail_find");
200 
201  frec = m0_fop_data(fom->fo_fop);
203 
205  if (rreg != NULL)
206  m0_ref_put(&rreg->frr_ref);
207 
208  /* detach fop from fom */
209  m0_free0(&fom->fo_fop);
210 
211  /* kill fom */
212  m0_fom_fini(fom);
213 
215 
216 
217  M0_LEAVE();
218 }
219 
220 struct m0_fid ffids[2] = {
221  [0] = M0_FID(FID_CTN, FID_KEY),
222  [1] = M0_FID(FID_CTN1, FID_KEY1)
223 };
225  .fmf_flt_id = ffids,
226  .fmf_count = ARRAY_SIZE(ffids)
227 };
228 
229 static int pd_ut_pcb_fdmi_rec(struct m0_uint128 *rec_id,
230  struct m0_buf fdmi_rec,
231  struct m0_fid filter_id)
232 {
233  struct m0_fdmi_record_reg *rreg;
234 
235  M0_ENTRY("fdmi record arrived: id " U128X_F
236  ", filter id = " FID_SF,
237  U128_P(rec_id),
238  FID_P(&filter_id));
239 
241  M0_UT_ASSERT(m0_fid_eq(&ffids[0], &filter_id) ||
242  m0_fid_eq(&ffids[1], &filter_id));
243 
244  rreg = m0_fdmi__pdock_record_reg_find(rec_id);
245  M0_UT_ASSERT(rreg != NULL);
246 
247  if (m0_uint128_eq(&frid_new, &rreg->frr_rec->fr_rec_id)) {
248  m0_fi_enable_off_n_on_m("m0_fdmi__pdock_record_reg_find",
249  "fail_find", 0, 1);
250  }
251 
252  return 0;
253 }
254 
256 {
257  struct m0_reqh *reqh;
258  struct m0_fop *fop;
259  struct m0_fop_fdmi_record *rec;
260  struct m0_fop_type fopt;
261  int rc;
262 
263  struct m0_fdmi_filter_reg *freg;
264  const struct m0_fdmi_plugin_ops pcb = {
266  };
267  const struct m0_fdmi_filter_desc fd;
268  const struct m0_fdmi_pd_ops *pdo = m0_fdmi_plugin_dock_api_get();
269  struct m0_fid all_fids[3] = {
270  [0] = ffid,
271  [1] = ffids[1],
272  [2] = { 0, 0 } };
273 
274  M0_ENTRY();
275 
276  if (register_filter) {
277  /* add filter */
278  rc = (pdo->fpo_register_filter)(&ffid, &fd, &pcb);
279  M0_UT_ASSERT(rc == 0);
281  M0_UT_ASSERT(freg != NULL);
282  M0_UT_ASSERT(freg->ffr_flags &
284  (pdo->fpo_enable_filters)(true, ffids, ARRAY_SIZE(ffids));
285  M0_UT_ASSERT(!(freg->ffr_flags &
287  rc = (pdo->fpo_register_filter)(&ffids[1], &fd, &pcb);
288  M0_UT_ASSERT(rc == 0);
290  M0_UT_ASSERT(freg != NULL);
291  /*
292  * Intentionally free it, otherwise memleak, because we
293  * are manually set it to NULL.
294  */
295  m0_free(freg->ffr_pcb);
296  freg->ffr_pcb = NULL;
297  }
298 
299  /* intercept fom create */
302  fopt.ft_fom_type = (struct m0_fom_type) {
303 /* hook it up*/
304  .ft_ops =
305  &fomt_ops,
306 /* keep native*/
307  .ft_conf =
309  .ft_state_conf =
311  .ft_rstype =
313  };
314 
316 
318 
320 
321  /* try with known fdmi record id */
322  frid_watch = &frid;
323  M0_ALLOC_PTR(rec);
324  M0_UT_ASSERT(rec != NULL);
325  M0_SET0(rec);
326  rec->fr_rec_id = *frid_watch;
328  rec->fr_matched_flts = farr;
329 
330  fop = m0_fop_alloc(&fopt, rec, (void*)1);
331  M0_UT_ASSERT(fop != NULL);
333 
335  M0_UT_ASSERT(rc == 0);
336 
337  /* wait for fom finishing */
339  m0_free(rec);
340 
341  /* try with another fdmi record id */
342  frid_watch = &frid_new;
343  M0_ALLOC_PTR(rec);
344  M0_UT_ASSERT(rec != NULL);
345  M0_SET0(rec);
346  rec->fr_rec_id = *frid_watch;
348  rec->fr_matched_flts = farr;
349 
350  fop = m0_fop_alloc(&fopt, rec, (void*)1);
351  M0_UT_ASSERT(fop != NULL);
353 
355  M0_UT_ASSERT(rc == 0);
356 
357  /* wait for fom finishing */
359  m0_free(rec);
360 
362 
364  if (register_filter) {
365  /* deregister filter */
366  (pdo->fpo_deregister_plugin)(all_fids, ARRAY_SIZE(all_fids));
367  }
368  M0_LEAVE();
369 }
370 
372 {
373  __fdmi_pd_fom_norpc(false);
374  __fdmi_pd_fom_norpc(true);
375 }
376 
377 /*----------------------------------------
378  fdmi_pd_rec_inject_fini
379  ----------------------------------------*/
380 
382  struct m0_fop *fop;
383  struct m0_fdmi_record_reg *rreg;
384  struct m0_fop_fdmi_record *rec;
385 
386  M0_ALLOC_PTR(rec);
387  M0_UT_ASSERT(rec != NULL);
388  M0_SET0(rec);
389  rec->fr_rec_id = frid;
391  rec->fr_matched_flts = farr;
392 
393  fop = m0_fop_alloc(&m0_fop_fdmi_rec_not_fopt, rec, (void*)1);
394  M0_UT_ASSERT(fop != NULL);
396 
398  M0_UT_ASSERT(rreg != NULL);
399 
400  rreg->frr_ep_addr = m0_strdup("test");
401 
403  m0_free(rec);
404  m0_free(fop);
405 
406  /* Init pd back, its used in other tests. */
408 }
409 
410 /*----------------------------------------
411  fdmi_pd_fake_rec_reg
412  ----------------------------------------*/
413 
414 static
418 } g_cc;
419 static struct test_rpc_env g_rpc_env;
421 
422 static void my_item_done(struct m0_rpc_packet *p,
423  struct m0_rpc_item *item, int rc)
424 {
428 }
429 
430 static int my_packet_ready(struct m0_rpc_packet *p)
431 {
432  g_rpc_packet = p;
434  return 0;
435 }
436 
437 
438 const struct m0_rpc_frm_ops frm_ops = {
440 };
441 
442 
443 extern struct fdmi_sd_ut_ctx g_sd_ut;
444 extern const struct m0_filterc_ops filterc_send_notif_ops;
445 
446 
448 {
449  struct m0_fop *fop;
450 
451  M0_ENTRY();
452 
455  &frm_ops, true, &g_cc.pc_conn, &g_cc.pc_sess);
458  M0_UT_ASSERT(fop != 0);
460  m0_free(fop);
463 
464  M0_LEAVE();
465 }
466 
467 /*----------------------------------------
468  fdmi_pd_fake_rec_release
469  ----------------------------------------*/
470 
472 {
473  struct m0_fop *fop;
474  struct m0_fdmi_record_reg *rreg;
475  struct m0_fop_fdmi_record *rec;
476  const struct m0_fdmi_pd_ops *pdo = m0_fdmi_plugin_dock_api_get();
477  struct m0_uint128 zero_frid = M0_UINT128(0, 0);
478 
479  M0_ENTRY();
480 
481  M0_ALLOC_PTR(rec);
482  M0_UT_ASSERT(rec != NULL);
483  M0_SET0(rec);
484  rec->fr_rec_id = frid;
486  rec->fr_matched_flts = farr;
487 
489 
491  &frm_ops, true, &g_cc.pc_conn, &g_cc.pc_sess);
492 
495  M0_UT_ASSERT(fop != 0);
496 
498 
499  m0_fi_enable_off_n_on_m("m0_fdmi__pdock_fdmi_record_register",
500  "fail_fdmi_rec_reg", 0, 1);
502  M0_UT_ASSERT(rreg == NULL);
503  m0_fi_disable("m0_fdmi__pdock_fdmi_record_register",
504  "fail_fdmi_rec_reg");
505 
507  M0_UT_ASSERT(rreg != NULL);
508 
509  /* lock reg to not allow release to happen */
510  m0_ref_get(&rreg->frr_ref);
511  M0_UT_ASSERT(m0_ref_read(&rreg->frr_ref) == 2);
512 
513  /* unknown record id */
514  (*pdo->fpo_release_fdmi_rec)(&zero_frid, &ffid);
515  M0_UT_ASSERT(m0_ref_read(&rreg->frr_ref) == 2);
516 
517  /* known record id */
518  (*pdo->fpo_release_fdmi_rec)(&frid, &ffid);
519  M0_UT_ASSERT(m0_ref_read(&rreg->frr_ref) == 1);
520 
521  m0_free(fop);
522  m0_free(rec);
523 
526 
527  M0_LEAVE();
528 }
529 
530 /*----------------------------------------
531  fdmi_pd_fake_release_rep
532  ----------------------------------------*/
533 
534 extern struct m0_rpc_item_ops release_ri_ops;
536 
538 {
539  struct m0_fop *fop;
540  struct m0_fop *rep_fop;
541  struct m0_fdmi_record_reg *rreg;
542  struct m0_fop_fdmi_record *rec;
543  struct m0_rpc_item *item;
544 
545  struct m0_fop_fdmi_rec_release rr;
546 
547  M0_ENTRY();
548 
549  M0_ALLOC_PTR(rec);
550  M0_UT_ASSERT(rec != NULL);
551  M0_SET0(rec);
552  rec->fr_rec_id = frid;
554  rec->fr_matched_flts = farr;
555 
557 
559  &frm_ops, true, &g_cc.pc_conn, &g_cc.pc_sess);
560 
561  /* imitate fdmi rec notification fop */
564  M0_UT_ASSERT(fop != 0);
565 
568 
570  M0_UT_ASSERT(rreg != NULL);
571 
572  rreg->frr_fop = fop;
573  rreg->frr_sess = item->ri_session;
575 
576  /* imitate reply fop */
577  rr.frr_frid = frid;
578 
581  M0_UT_ASSERT(fop != 0);
582 
585 
587 
588  /* imitate successful rpc reply */
589  rreg->frr_sess = NULL;
591 
592  /* imitate failed rpc reply */
595 
597 
598  m0_free(rep_fop);
599 
602 
603  M0_LEAVE();
604 }
605 
606 /*----------------------------------------
607  fdmi_pd_fake_release_nomem
608  ----------------------------------------*/
610 
612 {
613  struct m0_fop *fop;
614  struct m0_fdmi_record_reg *rreg;
615  struct m0_fdmi_record_reg *rreg_test;
616  struct m0_fop_fdmi_record *rec;
617  const struct m0_fdmi_pd_ops *pdo = m0_fdmi_plugin_dock_api_get();
618  struct m0_rpc_conn_pool *conn_pool = ut_pdock_conn_pool();
619  struct m0_rpc_conn_pool_item *pool_item;
620 
621  m0_fi_disable("m0_alloc", "fail_allocation");
622 
623  M0_ALLOC_PTR(rec);
624  M0_UT_ASSERT(rec != NULL);
625  M0_SET0(rec);
626  rec->fr_rec_id = M0_UINT128(0x1111, 0x2222);
628  rec->fr_matched_flts = farr;
629 
630 
632 
633  /* injecting fake conn */
634  M0_ALLOC_PTR(pool_item);
635  rpc_conn_pool_items_tlink_init_at_tail(pool_item,
636  &conn_pool->cp_items);
637 
640  M0_UT_ASSERT(fop != 0);
641 
644 
646  &frm_ops, true,
647  &pool_item->cpi_rpc_link.rlk_conn,
648  &pool_item->cpi_rpc_link.rlk_sess);
649 
651  M0_UT_ASSERT(rreg != NULL);
652 
653  /* lock reg to not allow release to happen */
654  M0_UT_ASSERT(m0_ref_read(&rreg->frr_ref) == 1);
655 
656  m0_fi_enable_off_n_on_m("m0_alloc", "fail_allocation", 1, 1);
657  (*pdo->fpo_release_fdmi_rec)(&rec->fr_rec_id, &ffid);
658 
659  /* record remains registered */
660  rreg_test = m0_fdmi__pdock_record_reg_find(&rec->fr_rec_id);
661  M0_UT_ASSERT(rreg_test != NULL);
662  M0_UT_ASSERT(m0_ref_read(&rreg_test->frr_ref) == 0);
663 
664  m0_fi_disable("m0_alloc", "fail_allocation");
665 
666 
667  m0_fi_enable_off_n_on_m("m0_rpc_conn_pool_get", "fail_conn_get", 0, 1);
668  m0_ref_get(&rreg->frr_ref);
669  (*pdo->fpo_release_fdmi_rec)(&rec->fr_rec_id, &ffid);
670 
671  /* record remains registered */
672  rreg_test = m0_fdmi__pdock_record_reg_find(&rec->fr_rec_id);
673  M0_UT_ASSERT(rreg_test != NULL);
674  M0_UT_ASSERT(m0_ref_read(&rreg_test->frr_ref) == 0);
675 
676  m0_fi_disable("m0_rpc_conn_pool_get", "fail_conn_get");
677 
678 
679  m0_fi_enable_off_n_on_m("m0_alloc", "fail_allocation", 0, 1);
680  m0_ref_get(&rreg->frr_ref);
681  (*pdo->fpo_release_fdmi_rec)(&rec->fr_rec_id, &ffid);
682 
683  /* record remains registered */
684  rreg_test = m0_fdmi__pdock_record_reg_find(&rec->fr_rec_id);
685  M0_UT_ASSERT(rreg_test != NULL);
686  M0_UT_ASSERT(m0_ref_read(&rreg_test->frr_ref) == 0);
687 
688  m0_fi_disable("m0_alloc", "fail_allocation");
689 
690 
691  m0_ref_get(&rreg->frr_ref);
692 
693  m0_free(fop);
694 
696 
697  rpc_conn_pool_items_tlink_del_fini(pool_item);
698  m0_free(pool_item);
699  pool_item = NULL;
700 
702 }
703 
705  .ts_name = "fdmi-pd-ut",
706  .ts_tests = {
707  { "fdmi-pd-register-filter", fdmi_pd_register_filter },
708  { "fdmi-pd-fom-norpc", fdmi_pd_fom_norpc },
709  { "fdmi-pd-rec-inject-fini", fdmi_pd_rec_inject_fini },
710  { "fdmi-pd-fake-release-nomem", fdmi_pd_fake_release_nomem },
711  { "fdmi-pd-fake-release-rep", fdmi_pd_fake_release_rep },
712  { "fdmi-pd-fake-rec-release", fdmi_pd_fake_rec_release },
713  { "fdmi-pd-fake-rec-reg", fdmi_pd_fake_rec_reg },
714  { NULL, NULL },
715  },
716 };
717 
718 #undef M0_TRACE_SUBSYSTEM
719 
720 /*
721  * Local variables:
722  * c-indentation-style: "K&R"
723  * c-basic-offset: 8
724  * tab-width: 8
725  * fill-column: 80
726  * scroll-step: 1
727  * End:
728  */
729 /*
730  * vim: tabstop=8 shiftwidth=8 noexpandtab textwidth=80 nowrap
731  */
struct m0_motr motr
Definition: sd_common.h:41
static void my_item_done(struct m0_rpc_packet *p, struct m0_rpc_item *item, int rc)
Definition: pd_ut.c:422
static struct m0_addb2_philter p
Definition: consumer.c:40
#define M0_PRE(cond)
#define FID_CTN
Definition: pd_ut.c:182
static struct m0_rpc_packet * g_rpc_packet
Definition: pd_ut.c:420
#define FID_SF
Definition: fid.h:76
struct m0_fdmi_flt_id_arr fr_matched_flts
Definition: fops.h:78
#define m0_strdup(s)
Definition: string.h:43
M0_INTERNAL void m0_rpc_item_change_state(struct m0_rpc_item *item, enum m0_rpc_item_state state)
Definition: item.c:728
struct m0_rpc_link cpi_rpc_link
Definition: conn_pool.h:36
#define NULL
Definition: misc.h:38
const struct m0_rpc_frm_ops frm_ops
Definition: pd_ut.c:438
struct m0_uint128 * frid_watch
Definition: pd_ut.c:116
void __fdmi_pd_fom_norpc(bool register_filter)
Definition: pd_ut.c:255
struct fdmi_sd_ut_ctx g_sd_ut
Definition: sd_common.c:41
struct m0_fid ffids[2]
Definition: pd_ut.c:220
M0_INTERNAL bool m0_uint128_eq(const struct m0_uint128 *u0, const struct m0_uint128 *u1)
Definition: misc.c:39
struct m0_fdmi_record_reg * m0_fdmi__pdock_record_reg_find(const struct m0_uint128 *rid)
Definition: plugin_dock.c:135
#define M0_FID(c_, k_)
Definition: pd_ut.c:186
M0_LEAVE()
M0_INTERNAL int m0_reqh_fop_handle(struct m0_reqh *reqh, struct m0_fop *fop)
Definition: reqh.c:546
M0_INTERNAL void m0_rpc_packet_traverse_items(struct m0_rpc_packet *p, item_visit_fn *visit, int opaque_data)
Definition: packet.c:524
struct m0_rpc_machine tre_rpc_machine
Definition: sd_common.h:56
void(* pf_custom_fom_fini)(struct m0_fom *fom)
int(* fto_create)(struct m0_fop *fop, struct m0_fom **out, struct m0_reqh *reqh)
Definition: fom.h:650
static void ut_pd_fom_fini(struct m0_fom *fom)
Definition: pd_ut.c:191
M0_INTERNAL struct m0_fdmi_record_reg * m0_fdmi__pdock_fdmi_record_register(struct m0_fop *fop)
Definition: plugin_dock.c:353
struct m0_fdmi_plugin_ops * ffr_pcb
Definition: plugin_dock.h:84
int32_t ri_error
Definition: item.h:161
void * m0_fop_data(const struct m0_fop *fop)
Definition: fop.c:220
int detour_create(struct m0_fop *fop, struct m0_fom **out, struct m0_reqh *reqh)
Definition: pd_ut.c:125
#define M0_BITS(...)
Definition: misc.h:236
#define FID_CTN1
Definition: pd_ut.c:184
#define container_of(ptr, type, member)
Definition: misc.h:33
#define M0_SET0(obj)
Definition: misc.h:64
Definition: ut.h:77
static struct m0_rpc_item * item
Definition: item.c:56
struct m0_fom_type_ops fomt_ops
Definition: pd_ut.c:179
m0_fom_phase
Definition: fom.h:372
uint32_t ffr_flags
Definition: plugin_dock.h:91
struct m0_fom_type ft_fom_type
Definition: fop.h:232
void fdmi_pd_register_filter(void)
Definition: pd_ut.c:51
int(* po_fdmi_rec)(struct m0_uint128 *rec_id, struct m0_buf fdmi_rec, struct m0_fid filter_id)
Definition: plugin_dock.h:62
struct m0_sm_group rm_sm_grp
Definition: rpc_machine.h:82
int(* native_create)(struct m0_fop *fop, struct m0_fom **out, struct m0_reqh *reqh)
Definition: pd_ut.c:121
return M0_RC(rc)
void fdmi_serv_start_ut(const struct m0_filterc_ops *filterc_ops)
Definition: sd_common.c:66
#define M0_ENTRY(...)
Definition: trace.h:170
Definition: buf.h:37
M0_INTERNAL void m0_sm_group_unlock(struct m0_sm_group *grp)
Definition: sm.c:96
static struct m0_semaphore g_sem
Definition: pd_ut.c:114
void(* fpo_deregister_plugin)(struct m0_fid *filter_ids, uint64_t filter_count)
Definition: plugin_dock.h:157
struct m0_uint128 frid
Definition: pd_ut.c:189
void fdmi_pd_fake_rec_reg(void)
Definition: pd_ut.c:447
static int pd_ut_pcb_fdmi_rec(struct m0_uint128 *rec_id, struct m0_buf fdmi_rec, struct m0_fid filter_id)
Definition: pd_ut.c:229
M0_INTERNAL void m0_ref_put(struct m0_ref *ref)
Definition: refs.c:38
struct m0_uint128 frr_frid
Definition: fops.h:94
void fdmi_pd_fake_release_rep(void)
Definition: pd_ut.c:537
struct m0_fid ffid
Definition: pd_ut.c:188
M0_INTERNAL void m0_ref_get(struct m0_ref *ref)
Definition: refs.c:32
M0_INTERNAL void m0_rpc_item_timer_stop(struct m0_rpc_item *item)
Definition: item.c:1018
M0_INTERNAL void m0_fi_disable(const char *fp_func, const char *fp_tag)
Definition: finject.c:485
void m0_fom_fini(struct m0_fom *fom)
Definition: fom.c:1324
#define m0_free0(pptr)
Definition: memory.h:77
void fdmi_pd_fom_norpc(void)
Definition: pd_ut.c:371
struct m0_uint128 frid_new
Definition: pd_ut.c:115
struct m0_fop * frr_fop
Definition: plugin_dock.h:114
M0_INTERNAL void m0_rpc_conn_ha_timer_stop(struct m0_rpc_conn *conn)
Definition: conn.c:1438
#define U128_P(x)
Definition: types.h:45
void fdmi_pd_fake_release_nomem()
Definition: pd_ut.c:611
M0_INTERNAL int m0_fdmi__plugin_dock_init(void)
Definition: plugin_dock.c:568
struct m0_fop_type m0_fop_fdmi_rec_release_rep_fopt
Definition: fops.c:50
struct m0_reqh rc_reqh
Definition: setup.h:312
struct m0_tl cp_items
Definition: conn_pool.h:47
M0_INTERNAL int m0_semaphore_init(struct m0_semaphore *semaphore, unsigned value)
Definition: semaphore.c:38
uint32_t fr_rec_type
Definition: fops.h:72
uint64_t f_container
Definition: fid.h:39
int(* fo_packet_ready)(struct m0_rpc_packet *p)
Definition: reqh.h:94
Definition: dump.c:103
static const struct m0_fid fids[]
Definition: diter.c:76
#define FID_KEY
Definition: pd_ut.c:183
static int register_filter(const struct m0_fid *fid, const struct m0_fdmi_filter_desc *desc, const struct m0_fdmi_plugin_ops *pcb)
Definition: plugin_dock.c:159
void fdmi_serv_stop_ut(void)
Definition: sd_common.c:121
#define FID_P(f)
Definition: fid.h:77
const struct m0_filterc_ops filterc_send_notif_ops
Definition: sd_send_not.c:79
void fdmi_pd_rec_inject_fini(void)
Definition: pd_ut.c:381
const struct m0_fom_type_ops * ft_ops
Definition: fom.h:614
void(* fpo_enable_filters)(bool enable, struct m0_fid *filter_ids, uint32_t filter_count)
Definition: plugin_dock.h:138
static void m0_fi_enable_off_n_on_m(const char *func, const char *tag, uint32_t n, uint32_t m)
Definition: finject.h:346
#define U128X_F
Definition: types.h:42
static struct test_rpc_env g_rpc_env
Definition: pd_ut.c:419
void(* rio_replied)(struct m0_rpc_item *item)
Definition: item.h:300
M0_INTERNAL bool m0_fid_eq(const struct m0_fid *fid0, const struct m0_fid *fid1)
Definition: fid.c:164
Definition: fom.h:481
struct m0_fop_type m0_fop_fdmi_rec_not_fopt
Definition: fops.c:47
const char * ts_name
Definition: ut.h:99
M0_INTERNAL int64_t m0_ref_read(const struct m0_ref *ref)
Definition: refs.c:44
struct m0_reqh reqh
Definition: rm_foms.c:48
struct m0_fdmi_flt_id_arr farr
Definition: pd_ut.c:224
void prepare_rpc_env(struct test_rpc_env *env, struct m0_reqh *reqh, const struct m0_rpc_frm_ops *frm_ops, bool sender, struct m0_rpc_conn *rpc_conn, struct m0_rpc_session *rpc_session)
Definition: sd_common.c:171
struct m0_reqh_context cc_reqh_ctx
Definition: setup.h:361
Definition: fid.h:38
struct m0_rpc_conn pc_conn
Definition: pd_ut.c:416
#define M0_ALLOC_PTR(ptr)
Definition: memory.h:86
M0_INTERNAL void m0_semaphore_fini(struct m0_semaphore *semaphore)
Definition: semaphore.c:45
void unprepare_rpc_env(struct test_rpc_env *env)
Definition: sd_common.c:241
struct m0_rpc_session * ri_session
Definition: item.h:147
int(* fpo_register_filter)(const struct m0_fid *fid, const struct m0_fdmi_filter_desc *desc, const struct m0_fdmi_plugin_ops *pcb)
Definition: plugin_dock.h:131
struct m0_rpc_item * m0_fop_to_rpc_item(const struct m0_fop *fop)
Definition: fop.c:338
struct m0_sm_conf ft_conf
Definition: fom.h:615
static struct m0_fop * fop
Definition: item.c:57
struct m0_fdmi_filter_reg * m0_fdmi__pdock_filter_reg_find(const struct m0_fid *fid)
Definition: plugin_dock.c:118
struct m0_fid * fmf_flt_id
Definition: fops.h:61
struct m0_uint128 fr_rec_id
Definition: fops.h:69
M0_INTERNAL void m0_sm_group_lock(struct m0_sm_group *grp)
Definition: sm.c:83
struct m0t1fs_filedata * fd
Definition: dir.c:1030
#define M0_UINT128(hi, lo)
Definition: types.h:40
const struct m0_filterc_ops filterc_stub_ops
Definition: filterc_stub.c:43
struct m0_rpc_conn_pool * ut_pdock_conn_pool(void)
Definition: plugin_dock.c:57
struct m0_rpc_session * frr_sess
Definition: plugin_dock.h:110
struct m0_ut_suite fdmi_pd_ut
Definition: pd_ut.c:704
struct m0_ref frr_ref
Definition: plugin_dock.h:112
struct m0_rpc_session pc_sess
Definition: pd_ut.c:417
M0_INTERNAL void m0_semaphore_down(struct m0_semaphore *semaphore)
Definition: semaphore.c:49
#define out(...)
Definition: gen.c:41
M0_INTERNAL void m0_semaphore_up(struct m0_semaphore *semaphore)
Definition: semaphore.c:65
struct m0_fop_fdmi_record * frr_rec
Definition: plugin_dock.h:103
struct m0_rpc_machine * ri_rmachine
Definition: item.h:160
static int my_packet_ready(struct m0_rpc_packet *p)
Definition: pd_ut.c:430
M0_INTERNAL void m0_fdmi__plugin_dock_fini(void)
Definition: plugin_dock.c:619
void m0_free(void *data)
Definition: memory.c:146
struct m0_rpc_item_ops release_ri_ops
Definition: plugin_dock.c:321
#define FID_KEY1
Definition: pd_ut.c:185
struct m0_rpc_item f_item
Definition: fop.h:83
const struct m0_reqh_service_type * ft_rstype
Definition: fom.h:617
void(* fpo_release_fdmi_rec)(struct m0_uint128 *rec_id, struct m0_fid *filter_id)
Definition: plugin_dock.h:148
int32_t rc
Definition: trigger_fop.h:47
#define ARRAY_SIZE(a)
Definition: misc.h:45
#define M0_UT_ASSERT(a)
Definition: ut.h:46
static struct pdock_client_conn g_cc
Definition: fop.h:79
struct m0_sm_conf ft_state_conf
Definition: fom.h:616
void fdmi_pd_fake_rec_release(void)
Definition: pd_ut.c:471
static struct m0_rpc_conn * item2conn(const struct m0_rpc_item *item)
Definition: rpc_internal.h:95
struct m0_fop * rep_fop
Definition: dir.c:334
M0_INTERNAL const char * m0_rpc_item_remote_ep_addr(const struct m0_rpc_item *item)
Definition: item.c:1188
struct m0_fop * m0_fop_alloc(struct m0_fop_type *fopt, void *data, struct m0_rpc_machine *mach)
Definition: fop.c:96
const struct m0_fdmi_pd_ops * m0_fdmi_plugin_dock_api_get(void)
Definition: plugin_dock.c:563