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  /*
146  * Cannot be precise, because of concurrent allocations in other
147  * threads.
148  */
149  M0_UT_ASSERT(M0_IN(rc, (-ENOENT, -ENOMEM)));
150 
151  m0_fi_enable_off_n_on_m("m0_alloc", "fail_allocation", 3, 1);
152  rc = (*native_create)(fop, out, reqh);
153  M0_UT_ASSERT(M0_IN(rc, (-ENOENT, -ENOMEM)));
154 
155  m0_fi_disable("m0_alloc", "fail_allocation");
156 
157  rc = (*native_create)(fop, out, reqh);
159  ? rc == 0
160  : rc == -ENOMEM);
161 
162  if (rc != 0) {
164  return rc;
165  }
166 
167  M0_UT_ASSERT(out != NULL);
168 
169  fom = *out;
170  M0_UT_ASSERT(fom != NULL);
171 
172  pd_fom = container_of(fom, struct pdock_fom, pf_fom);
174 
175  frec = m0_fop_data(fop);
176  M0_UT_ASSERT(frec != NULL);
178  M0_UT_ASSERT(rreg != NULL);
179 
180  return M0_RC(rc);
181 }
182 
184 
185 
186 #define FID_CTN 0xDEA110C
187 #define FID_KEY 0xDA221ED
188 #define FID_CTN1 0x1FA11ED
189 #define FID_KEY1 0x1A110CA
190 #define M0_FID(c_, k_) { .f_container = c_, .f_key = k_ }
191 
193 struct m0_uint128 frid = M0_UINT128(0xBEC02, 0xF11ED);
194 
195 static void ut_pd_fom_fini(struct m0_fom *fom)
196 {
197  struct m0_fop_fdmi_record *frec;
198  struct m0_fdmi_record_reg *rreg;
199 
200  M0_ENTRY();
201 
203  m0_fi_disable("m0_fdmi__pdock_record_reg_find", "fail_find");
204 
205  frec = m0_fop_data(fom->fo_fop);
207 
209  if (rreg != NULL)
210  m0_ref_put(&rreg->frr_ref);
211 
212  /* detach fop from fom */
213  m0_free0(&fom->fo_fop);
214 
215  /* kill fom */
216  m0_fom_fini(fom);
217 
219 
220 
221  M0_LEAVE();
222 }
223 
224 struct m0_fid ffids[2] = {
225  [0] = M0_FID(FID_CTN, FID_KEY),
226  [1] = M0_FID(FID_CTN1, FID_KEY1)
227 };
229  .fmf_flt_id = ffids,
230  .fmf_count = ARRAY_SIZE(ffids)
231 };
232 
233 static int pd_ut_pcb_fdmi_rec(struct m0_uint128 *rec_id,
234  struct m0_buf fdmi_rec,
235  struct m0_fid filter_id)
236 {
237  struct m0_fdmi_record_reg *rreg;
238 
239  M0_ENTRY("fdmi record arrived: id " U128X_F
240  ", filter id = " FID_SF,
241  U128_P(rec_id),
242  FID_P(&filter_id));
243 
245  M0_UT_ASSERT(m0_fid_eq(&ffids[0], &filter_id) ||
246  m0_fid_eq(&ffids[1], &filter_id));
247 
248  rreg = m0_fdmi__pdock_record_reg_find(rec_id);
249  M0_UT_ASSERT(rreg != NULL);
250 
251  if (m0_uint128_eq(&frid_new, &rreg->frr_rec->fr_rec_id)) {
252  m0_fi_enable_off_n_on_m("m0_fdmi__pdock_record_reg_find",
253  "fail_find", 0, 1);
254  }
255 
256  return 0;
257 }
258 
260 {
261  struct m0_reqh *reqh;
262  struct m0_fop *fop;
263  struct m0_fop_fdmi_record *rec;
264  struct m0_fop_type fopt;
265  int rc;
266 
267  struct m0_fdmi_filter_reg *freg;
268  const struct m0_fdmi_plugin_ops pcb = {
270  };
271  const struct m0_fdmi_filter_desc fd;
272  const struct m0_fdmi_pd_ops *pdo = m0_fdmi_plugin_dock_api_get();
273  struct m0_fid all_fids[3] = {
274  [0] = ffid,
275  [1] = ffids[1],
276  [2] = { 0, 0 } };
277 
278  M0_ENTRY();
279 
280  if (register_filter) {
281  /* add filter */
282  rc = (pdo->fpo_register_filter)(&ffid, &fd, &pcb);
283  M0_UT_ASSERT(rc == 0);
285  M0_UT_ASSERT(freg != NULL);
286  M0_UT_ASSERT(freg->ffr_flags &
288  (pdo->fpo_enable_filters)(true, ffids, ARRAY_SIZE(ffids));
289  M0_UT_ASSERT(!(freg->ffr_flags &
291  rc = (pdo->fpo_register_filter)(&ffids[1], &fd, &pcb);
292  M0_UT_ASSERT(rc == 0);
294  M0_UT_ASSERT(freg != NULL);
295  /*
296  * Intentionally free it, otherwise memleak, because we
297  * are manually set it to NULL.
298  */
299  m0_free(freg->ffr_pcb);
300  freg->ffr_pcb = NULL;
301  }
302 
303  /* intercept fom create */
306  fopt.ft_fom_type = (struct m0_fom_type) {
307 /* hook it up*/
308  .ft_ops =
309  &fomt_ops,
310 /* keep native*/
311  .ft_conf =
313  .ft_state_conf =
315  .ft_rstype =
317  };
318 
320 
322 
324 
325  /* try with known fdmi record id */
326  frid_watch = &frid;
327  M0_ALLOC_PTR(rec);
328  M0_UT_ASSERT(rec != NULL);
329  M0_SET0(rec);
330  rec->fr_rec_id = *frid_watch;
332  rec->fr_matched_flts = farr;
333 
334  fop = m0_fop_alloc(&fopt, rec, (void*)1);
335  M0_UT_ASSERT(fop != NULL);
337 
339  M0_UT_ASSERT(rc == 0);
340 
341  /* wait for fom finishing */
343  m0_free(rec);
344 
345  /* try with another fdmi record id */
346  frid_watch = &frid_new;
347  M0_ALLOC_PTR(rec);
348  M0_UT_ASSERT(rec != NULL);
349  M0_SET0(rec);
350  rec->fr_rec_id = *frid_watch;
352  rec->fr_matched_flts = farr;
353 
354  fop = m0_fop_alloc(&fopt, rec, (void*)1);
355  M0_UT_ASSERT(fop != NULL);
357 
359  M0_UT_ASSERT(rc == 0);
360 
361  /* wait for fom finishing */
363  m0_free(rec);
364 
366 
368  if (register_filter) {
369  /* deregister filter */
370  (pdo->fpo_deregister_plugin)(all_fids, ARRAY_SIZE(all_fids));
371  }
372  M0_LEAVE();
373 }
374 
376 {
377  __fdmi_pd_fom_norpc(false);
378  __fdmi_pd_fom_norpc(true);
379 }
380 
381 /*----------------------------------------
382  fdmi_pd_rec_inject_fini
383  ----------------------------------------*/
384 
386  struct m0_fop *fop;
387  struct m0_fdmi_record_reg *rreg;
388  struct m0_fop_fdmi_record *rec;
389 
390  M0_ALLOC_PTR(rec);
391  M0_UT_ASSERT(rec != NULL);
392  M0_SET0(rec);
393  rec->fr_rec_id = frid;
395  rec->fr_matched_flts = farr;
396 
397  fop = m0_fop_alloc(&m0_fop_fdmi_rec_not_fopt, rec, (void*)1);
398  M0_UT_ASSERT(fop != NULL);
400 
402  M0_UT_ASSERT(rreg != NULL);
403 
404  rreg->frr_ep_addr = m0_strdup("test");
405 
407  m0_free(rec);
408  m0_free(fop);
409 
410  /* Init pd back, its used in other tests. */
412 }
413 
414 /*----------------------------------------
415  fdmi_pd_fake_rec_reg
416  ----------------------------------------*/
417 
418 static
422 } g_cc;
423 static struct test_rpc_env g_rpc_env;
425 
426 static void my_item_done(struct m0_rpc_packet *p,
427  struct m0_rpc_item *item, int rc)
428 {
432 }
433 
434 static int my_packet_ready(struct m0_rpc_packet *p)
435 {
436  g_rpc_packet = p;
438  return 0;
439 }
440 
441 
442 const struct m0_rpc_frm_ops frm_ops = {
444 };
445 
446 
447 extern struct fdmi_sd_ut_ctx g_sd_ut;
448 extern const struct m0_filterc_ops filterc_send_notif_ops;
449 
450 
452 {
453  struct m0_fop *fop;
454 
455  M0_ENTRY();
456 
459  &frm_ops, true, &g_cc.pc_conn, &g_cc.pc_sess);
462  M0_UT_ASSERT(fop != 0);
464  m0_free(fop);
467 
468  M0_LEAVE();
469 }
470 
471 /*----------------------------------------
472  fdmi_pd_fake_rec_release
473  ----------------------------------------*/
474 
476 {
477  struct m0_fop *fop;
478  struct m0_fdmi_record_reg *rreg;
479  struct m0_fop_fdmi_record *rec;
480  const struct m0_fdmi_pd_ops *pdo = m0_fdmi_plugin_dock_api_get();
481  struct m0_uint128 zero_frid = M0_UINT128(0, 0);
482 
483  M0_ENTRY();
484 
485  M0_ALLOC_PTR(rec);
486  M0_UT_ASSERT(rec != NULL);
487  M0_SET0(rec);
488  rec->fr_rec_id = frid;
490  rec->fr_matched_flts = farr;
491 
493 
495  &frm_ops, true, &g_cc.pc_conn, &g_cc.pc_sess);
496 
499  M0_UT_ASSERT(fop != 0);
500 
502 
503  m0_fi_enable_off_n_on_m("m0_fdmi__pdock_fdmi_record_register",
504  "fail_fdmi_rec_reg", 0, 1);
506  M0_UT_ASSERT(rreg == NULL);
507  m0_fi_disable("m0_fdmi__pdock_fdmi_record_register",
508  "fail_fdmi_rec_reg");
509 
511  M0_UT_ASSERT(rreg != NULL);
512 
513  /* lock reg to not allow release to happen */
514  m0_ref_get(&rreg->frr_ref);
515  M0_UT_ASSERT(m0_ref_read(&rreg->frr_ref) == 2);
516 
517  /* unknown record id */
518  (*pdo->fpo_release_fdmi_rec)(&zero_frid, &ffid);
519  M0_UT_ASSERT(m0_ref_read(&rreg->frr_ref) == 2);
520 
521  /* known record id */
522  (*pdo->fpo_release_fdmi_rec)(&frid, &ffid);
523  M0_UT_ASSERT(m0_ref_read(&rreg->frr_ref) == 1);
524 
525  m0_free(fop);
526  m0_free(rec);
527 
530 
531  M0_LEAVE();
532 }
533 
534 /*----------------------------------------
535  fdmi_pd_fake_release_rep
536  ----------------------------------------*/
537 
538 extern struct m0_rpc_item_ops release_ri_ops;
540 
542 {
543  struct m0_fop *fop;
544  struct m0_fop *rep_fop;
545  struct m0_fdmi_record_reg *rreg;
546  struct m0_fop_fdmi_record *rec;
547  struct m0_rpc_item *item;
548 
549  struct m0_fop_fdmi_rec_release rr;
550 
551  M0_ENTRY();
552 
553  M0_ALLOC_PTR(rec);
554  M0_UT_ASSERT(rec != NULL);
555  M0_SET0(rec);
556  rec->fr_rec_id = frid;
558  rec->fr_matched_flts = farr;
559 
561 
563  &frm_ops, true, &g_cc.pc_conn, &g_cc.pc_sess);
564 
565  /* imitate fdmi rec notification fop */
568  M0_UT_ASSERT(fop != 0);
569 
572 
574  M0_UT_ASSERT(rreg != NULL);
575 
576  rreg->frr_fop = fop;
577  rreg->frr_sess = item->ri_session;
579 
580  /* imitate reply fop */
581  rr.frr_frid = frid;
582 
585  M0_UT_ASSERT(fop != 0);
586 
589 
591 
592  /* imitate successful rpc reply */
593  rreg->frr_sess = NULL;
595 
596  /* imitate failed rpc reply */
599 
601 
602  m0_free(rep_fop);
603 
606 
607  M0_LEAVE();
608 }
609 
610 /*----------------------------------------
611  fdmi_pd_fake_release_nomem
612  ----------------------------------------*/
614 
616 {
617  struct m0_fop *fop;
618  struct m0_fdmi_record_reg *rreg;
619  struct m0_fdmi_record_reg *rreg_test;
620  struct m0_fop_fdmi_record *rec;
621  const struct m0_fdmi_pd_ops *pdo = m0_fdmi_plugin_dock_api_get();
622  struct m0_rpc_conn_pool *conn_pool = ut_pdock_conn_pool();
623  struct m0_rpc_conn_pool_item *pool_item;
624 
625  m0_fi_disable("m0_alloc", "fail_allocation");
626 
627  M0_ALLOC_PTR(rec);
628  M0_UT_ASSERT(rec != NULL);
629  M0_SET0(rec);
630  rec->fr_rec_id = M0_UINT128(0x1111, 0x2222);
632  rec->fr_matched_flts = farr;
633 
634 
636 
637  /* injecting fake conn */
638  M0_ALLOC_PTR(pool_item);
639  rpc_conn_pool_items_tlink_init_at_tail(pool_item,
640  &conn_pool->cp_items);
641 
644  M0_UT_ASSERT(fop != 0);
645 
648 
650  &frm_ops, true,
651  &pool_item->cpi_rpc_link.rlk_conn,
652  &pool_item->cpi_rpc_link.rlk_sess);
653 
655  M0_UT_ASSERT(rreg != NULL);
656 
657  /* lock reg to not allow release to happen */
658  M0_UT_ASSERT(m0_ref_read(&rreg->frr_ref) == 1);
659 
660  m0_fi_enable_off_n_on_m("m0_alloc", "fail_allocation", 1, 1);
661  (*pdo->fpo_release_fdmi_rec)(&rec->fr_rec_id, &ffid);
662 
663  /* record remains registered */
664  rreg_test = m0_fdmi__pdock_record_reg_find(&rec->fr_rec_id);
665  M0_UT_ASSERT(rreg_test != NULL);
666  M0_UT_ASSERT(m0_ref_read(&rreg_test->frr_ref) == 0);
667 
668  m0_fi_disable("m0_alloc", "fail_allocation");
669 
670 
671  m0_fi_enable_off_n_on_m("m0_rpc_conn_pool_get", "fail_conn_get", 0, 1);
672  m0_ref_get(&rreg->frr_ref);
673  (*pdo->fpo_release_fdmi_rec)(&rec->fr_rec_id, &ffid);
674 
675  /* record remains registered */
676  rreg_test = m0_fdmi__pdock_record_reg_find(&rec->fr_rec_id);
677  M0_UT_ASSERT(rreg_test != NULL);
678  M0_UT_ASSERT(m0_ref_read(&rreg_test->frr_ref) == 0);
679 
680  m0_fi_disable("m0_rpc_conn_pool_get", "fail_conn_get");
681 
682 
683  m0_fi_enable_off_n_on_m("m0_alloc", "fail_allocation", 0, 1);
684  m0_ref_get(&rreg->frr_ref);
685  (*pdo->fpo_release_fdmi_rec)(&rec->fr_rec_id, &ffid);
686 
687  /* record remains registered */
688  rreg_test = m0_fdmi__pdock_record_reg_find(&rec->fr_rec_id);
689  M0_UT_ASSERT(rreg_test != NULL);
690  M0_UT_ASSERT(m0_ref_read(&rreg_test->frr_ref) == 0);
691 
692  m0_fi_disable("m0_alloc", "fail_allocation");
693 
694 
695  m0_ref_get(&rreg->frr_ref);
696 
697  m0_free(fop);
698 
700 
701  rpc_conn_pool_items_tlink_del_fini(pool_item);
702  m0_free(pool_item);
703  pool_item = NULL;
704 
706 }
707 
709  .ts_name = "fdmi-pd-ut",
710  .ts_tests = {
711  { "fdmi-pd-register-filter", fdmi_pd_register_filter },
712  { "fdmi-pd-fom-norpc", fdmi_pd_fom_norpc },
713  { "fdmi-pd-rec-inject-fini", fdmi_pd_rec_inject_fini },
714  { "fdmi-pd-fake-release-nomem", fdmi_pd_fake_release_nomem },
715  { "fdmi-pd-fake-release-rep", fdmi_pd_fake_release_rep },
716  { "fdmi-pd-fake-rec-release", fdmi_pd_fake_rec_release },
717  { "fdmi-pd-fake-rec-reg", fdmi_pd_fake_rec_reg },
718  { NULL, NULL },
719  },
720 };
721 
722 #undef M0_TRACE_SUBSYSTEM
723 
724 /*
725  * Local variables:
726  * c-indentation-style: "K&R"
727  * c-basic-offset: 8
728  * tab-width: 8
729  * fill-column: 80
730  * scroll-step: 1
731  * End:
732  */
733 /*
734  * vim: tabstop=8 shiftwidth=8 noexpandtab textwidth=80 nowrap
735  */
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:426
static struct m0_addb2_philter p
Definition: consumer.c:40
#define M0_PRE(cond)
#define FID_CTN
Definition: pd_ut.c:186
static struct m0_rpc_packet * g_rpc_packet
Definition: pd_ut.c:424
#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:442
struct m0_uint128 * frid_watch
Definition: pd_ut.c:116
void __fdmi_pd_fom_norpc(bool register_filter)
Definition: pd_ut.c:259
struct fdmi_sd_ut_ctx g_sd_ut
Definition: sd_common.c:41
struct m0_fid ffids[2]
Definition: pd_ut.c:224
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:190
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:195
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:219
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:188
#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:183
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:233
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:193
void fdmi_pd_fake_rec_reg(void)
Definition: pd_ut.c:451
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:233
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:541
struct m0_fid ffid
Definition: pd_ut.c:192
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:375
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:615
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:187
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:385
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:423
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:228
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:420
#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:337
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:708
struct m0_ref frr_ref
Definition: plugin_dock.h:112
struct m0_rpc_session pc_sess
Definition: pd_ut.c:421
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:434
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:189
struct m0_rpc_item f_item
Definition: fop.h:84
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:80
struct m0_sm_conf ft_state_conf
Definition: fom.h:616
void fdmi_pd_fake_rec_release(void)
Definition: pd_ut.c:475
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:95
const struct m0_fdmi_pd_ops * m0_fdmi_plugin_dock_api_get(void)
Definition: plugin_dock.c:563