libamxb  4.8.2
Bus Agnostic C API
test_amxb_ba_invoke.c
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** SPDX-License-Identifier: BSD-2-Clause-Patent
4 **
5 ** SPDX-FileCopyrightText: Copyright (c) 2023 SoftAtHome
6 **
7 ** Redistribution and use in source and binary forms, with or without modification,
8 ** are permitted provided that the following conditions are met:
9 **
10 ** 1. Redistributions of source code must retain the above copyright notice,
11 ** this list of conditions and the following disclaimer.
12 **
13 ** 2. Redistributions in binary form must reproduce the above copyright notice,
14 ** this list of conditions and the following disclaimer in the documentation
15 ** and/or other materials provided with the distribution.
16 **
17 ** Subject to the terms and conditions of this license, each copyright holder
18 ** and contributor hereby grants to those receiving rights under this license
19 ** a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
20 ** (except for failure to satisfy the conditions of this license) patent license
21 ** to make, have made, use, offer to sell, sell, import, and otherwise transfer
22 ** this software, where such license applies only to those patent claims, already
23 ** acquired or hereafter acquired, licensable by such copyright holder or contributor
24 ** that are necessarily infringed by:
25 **
26 ** (a) their Contribution(s) (the licensed copyrights of copyright holders and
27 ** non-copyrightable additions of contributors, in source or binary form) alone;
28 ** or
29 **
30 ** (b) combination of their Contribution(s) with the work of authorship to which
31 ** such Contribution(s) was added by such copyright holder or contributor, if,
32 ** at the time the Contribution is added, such addition causes such combination
33 ** to be necessarily infringed. The patent license shall not apply to any other
34 ** combinations which include the Contribution.
35 **
36 ** Except as expressly stated above, no rights or licenses from any copyright
37 ** holder or contributor is granted under this license, whether expressly, by
38 ** implication, estoppel or otherwise.
39 **
40 ** DISCLAIMER
41 **
42 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
43 ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
44 ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
45 ** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
46 ** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
47 ** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
48 ** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
49 ** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
50 ** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
51 ** USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
52 **
53 ****************************************************************************/
54 
55 #include <stdlib.h>
56 #include <stdarg.h>
57 #include <stddef.h>
58 #include <string.h>
59 #include <unistd.h>
60 #include <setjmp.h>
61 #include <cmocka.h>
62 
63 #include <amxc/amxc_variant.h>
64 #include <amxc/amxc_htable.h>
65 #include <amxc/amxc_lqueue.h>
66 
67 #include <amxp/amxp_signal.h>
68 #include <amxp/amxp_slot.h>
69 
70 #include <amxd/amxd_dm.h>
71 
72 #include <amxb/amxb_be.h>
73 #include <amxb/amxb.h>
74 
75 #include "test_amxb_ba_invoke.h"
76 
77 #include <amxc/amxc_macros.h>
78 static char* dummy_ctx = "xbus";
79 static char* dummy_bus_data = "xbus dummy data";
80 static char verify_host[64];
81 static char verify_port[64];
82 static char verify_path[64];
83 static int return_val;
84 
85 int __wrap_dlclose(void* handle);
86 
87 static void* dummy_connect(const char* host,
88  const char* port,
89  const char* path,
90  UNUSED amxp_signal_mngr_t* sigmngr) {
91  strcpy(verify_host, host);
92  strcpy(verify_port, port);
93  strcpy(verify_path, path);
94 
95  return dummy_ctx;
96 }
97 
98 static int dummy_disconnect(void* ctx) {
99  assert_ptr_equal(ctx, dummy_ctx);
100  return return_val;
101 }
102 
103 static int dummy_get_fd(void* ctx) {
104  assert_ptr_equal(ctx, dummy_ctx);
105  return return_val;
106 }
107 
108 static void dummy_free(void* ctx) {
109  assert_ptr_equal(ctx, dummy_ctx);
110 }
111 
112 static int dummy_read(void* const ctx) {
113  assert_ptr_equal(ctx, dummy_ctx);
114  return return_val;
115 }
116 
117 static int dummy_new_invoke(amxb_invoke_t* invoke_ctx) {
118  assert_ptr_not_equal(invoke_ctx, NULL);
119  return return_val;
120 }
121 
122 static void dummy_free_invoke(amxb_invoke_t* invoke_ctx) {
123  assert_ptr_not_equal(invoke_ctx, NULL);
124  return;
125 }
126 
127 static int dummy_invoke(void* const ctx,
128  amxb_invoke_t* invoke_ctx,
129  UNUSED amxc_var_t* args,
130  amxb_request_t* request,
131  int timeout) {
132  assert_ptr_equal(ctx, dummy_ctx);
133  assert_string_equal(invoke_ctx->object, "object");
134  assert_string_equal(invoke_ctx->method, "method");
135  assert_ptr_not_equal(request, NULL);
136  assert_int_equal(timeout, 10);
137  return return_val;
138 }
139 
140 static int dummy_async_invoke(void* const ctx,
141  amxb_invoke_t* invoke_ctx,
142  UNUSED amxc_var_t* args,
143  amxb_request_t* request) {
144  assert_ptr_equal(ctx, dummy_ctx);
145  assert_string_equal(invoke_ctx->object, "object");
146  assert_string_equal(invoke_ctx->method, "method");
147  request->bus_data = dummy_bus_data;
148  return return_val;
149 }
150 
151 static int dummy_wait_request(void* const ctx,
152  amxb_request_t* request,
153  UNUSED int timeout) {
154  assert_ptr_equal(ctx, dummy_ctx);
155  assert_ptr_equal(request->bus_data, dummy_bus_data);
156 
157  return return_val;
158 }
159 
160 static int dummy_close_request(void* const ctx,
161  amxb_request_t* request) {
162  assert_ptr_equal(ctx, dummy_ctx);
163  assert_ptr_equal(request->bus_data, dummy_bus_data);
164  return return_val;
165 }
166 
169  .disconnect = dummy_disconnect,
170  .get_fd = dummy_get_fd,
171  .read = dummy_read,
172  .new_invoke = dummy_new_invoke,
173  .free_invoke = dummy_free_invoke,
174  .invoke = dummy_invoke,
175  .async_invoke = dummy_async_invoke,
176  .wait_request = dummy_wait_request,
177  .close_request = dummy_close_request,
178  .free = dummy_free,
179  .name = "xbus",
180  .size = sizeof(amxb_be_funcs_t),
181 };
182 
185  .name = "zbus",
186  .size = sizeof(amxb_be_funcs_t),
187 };
188 
191  .async_invoke = dummy_async_invoke,
192  .name = "abus",
193  .size = sizeof(amxb_be_funcs_t),
194 };
195 
196 int __wrap_dlclose(UNUSED void* handle) {
197  return 0;
198 }
199 
200 void test_amxb_new_free_invoke(UNUSED void** state) {
201  amxb_bus_ctx_t* ctx = NULL;
202  amxb_invoke_t* invoke_ctx = NULL;
203 
204  assert_int_equal(amxb_be_register(&dummy_be1), 0);
205  assert_int_equal(amxb_be_register(&dummy_be3), 0);
206 
207  assert_int_not_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), 0);
208  return_val = 0;
209  assert_int_equal(amxb_connect(&ctx, "xbus://test:80/var/run/xbus.sock"), 0);
210  assert_int_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), 0);
211  assert_int_not_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), 0);
212  amxb_free_invoke(&invoke_ctx);
213 
214  assert_int_not_equal(amxb_new_invoke(NULL, NULL, "object", NULL, "method"), 0);
215  assert_int_not_equal(amxb_new_invoke(&invoke_ctx, NULL, "object", NULL, "method"), 0);
216  assert_int_not_equal(amxb_new_invoke(&invoke_ctx, ctx, NULL, NULL, NULL), 0);
217  assert_int_not_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, NULL), 0);
218  assert_int_not_equal(amxb_new_invoke(&invoke_ctx, ctx, "", NULL, ""), 0);
219  assert_int_not_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, ""), 0);
220  assert_int_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", "interface", "method"), 0);
221  assert_string_equal(invoke_ctx->object, "object");
222  assert_string_equal(invoke_ctx->interface, "interface");
223  assert_string_equal(invoke_ctx->method, "method");
224  assert_ptr_equal(invoke_ctx->it.llist, &ctx->invoke_ctxs);
225  amxb_free_invoke(&invoke_ctx);
226  amxb_free_invoke(&invoke_ctx);
227  amxb_free_invoke(NULL);
228 
229  return_val = -1;
230  assert_int_not_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), 0);
231  assert_ptr_equal(invoke_ctx, NULL);
232 
233  return_val = 0;
234  assert_int_equal(amxb_disconnect(ctx), 0);
235  assert_int_not_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), 0);
236  assert_ptr_equal(invoke_ctx, NULL);
237 
238  amxb_free(&ctx);
239 
240  assert_int_equal(amxb_be_unregister(&dummy_be1), 0);
241  assert_int_equal(amxb_be_unregister(&dummy_be3), 0);
242 }
243 
244 void test_amxb_invoke(UNUSED void** state) {
245  amxb_bus_ctx_t* ctx = NULL;
246  amxc_var_t ret;
247  amxc_var_t args;
248  amxb_invoke_t* invoke_ctx = NULL;
249 
250  amxc_var_init(&ret);
251  amxc_var_init(&args);
252  assert_int_equal(amxb_be_register(&dummy_be1), 0);
253  assert_int_equal(amxb_be_register(&dummy_be3), 0);
254 
255  return_val = 0;
256  assert_int_equal(amxb_connect(&ctx, "xbus://test:80/var/run/xbus.sock"), 0);
257  assert_int_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), 0);
258 
259  assert_int_equal(amxb_invoke(invoke_ctx, NULL, NULL, NULL, NULL, 10), return_val);
260  assert_int_equal(amxb_invoke(invoke_ctx, NULL, &ret, NULL, NULL, 10), return_val);
261  assert_int_equal(amxb_invoke(invoke_ctx, &args, &ret, NULL, NULL, 10), return_val);
262  amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
263  assert_int_equal(amxb_invoke(invoke_ctx, &args, &ret, NULL, NULL, 10), return_val);
264  assert_int_not_equal(amxb_invoke(NULL, NULL, NULL, NULL, NULL, 0), 0);
265  return_val = -1;
266  assert_int_equal(amxb_invoke(invoke_ctx, NULL, NULL, NULL, NULL, 10), return_val);
267  return_val = 0;
268  assert_int_equal(amxb_disconnect(ctx), 0);
269  amxb_free_invoke(&invoke_ctx);
270  amxb_free(&ctx);
271  assert_ptr_equal(ctx, NULL);
272 
273  assert_int_equal(amxb_connect(&ctx, "zbus://test:80/var/run/zbus.sock"), 0);
274  assert_int_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), 0);
275 
276  return_val = 0;
277  assert_int_equal(amxb_invoke(invoke_ctx, NULL, NULL, NULL, NULL, 0), AMXB_ERROR_NOT_SUPPORTED_OP);
278  return_val = -1;
279  assert_int_equal(amxb_invoke(invoke_ctx, NULL, NULL, NULL, NULL, 0), AMXB_ERROR_NOT_SUPPORTED_OP);
280  return_val = 0;
281  amxb_free(&ctx);
282  amxb_free_invoke(&invoke_ctx);
283 
284  return_val = 0;
285  assert_int_equal(amxb_connect(&ctx, "xbus://test:80/var/run/xbus.sock"), 0);
286  assert_int_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method()"), 0);
287  assert_int_equal(amxb_invoke(invoke_ctx, NULL, NULL, NULL, NULL, 10), return_val);
288  assert_int_equal(amxb_invoke(invoke_ctx, NULL, &ret, NULL, NULL, 10), return_val);
289  assert_int_equal(amxb_invoke(invoke_ctx, &args, &ret, NULL, NULL, 10), return_val);
290  amxb_free(&ctx);
291  amxb_free_invoke(&invoke_ctx);
292 
293  assert_int_equal(amxb_be_unregister(&dummy_be1), 0);
294  assert_int_equal(amxb_be_unregister(&dummy_be3), 0);
295  amxc_var_clean(&ret);
296  amxc_var_clean(&args);
297 }
298 
299 void test_amxb_async_invoke_and_close(UNUSED void** state) {
300  amxb_bus_ctx_t* ctx = NULL;
301  amxc_var_t args;
302  amxb_request_t* request = NULL;
303  amxb_invoke_t* invoke_ctx = NULL;
304 
305  amxc_var_init(&args);
306  assert_int_equal(amxb_be_register(&dummy_be1), 0);
307  assert_int_equal(amxb_be_register(&dummy_be3), 0);
308  assert_int_equal(amxb_be_register(&dummy_be4), 0);
309 
310 
311  return_val = 0;
312  assert_int_equal(amxb_connect(&ctx, "xbus://test:80/var/run/xbus.sock"), 0);
313  assert_int_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), 0);
314 
315  assert_int_equal(amxb_async_invoke(invoke_ctx, NULL, NULL, NULL, NULL, &request), return_val);
316  assert_ptr_not_equal(request, NULL);
317  assert_int_equal(amxb_close_request(&request), 0);
318  assert_int_not_equal(amxb_close_request(&request), 0);
319 
320  assert_int_not_equal(amxb_async_invoke(invoke_ctx, NULL, NULL, NULL, NULL, NULL), return_val);
321  assert_ptr_equal(request, NULL);
322 
323  assert_int_equal(amxb_async_invoke(invoke_ctx, &args, NULL, NULL, NULL, &request), return_val);
324  assert_ptr_not_equal(request, NULL);
325  assert_int_equal(amxb_close_request(&request), 0);
326  assert_ptr_equal(request, NULL);
327 
328  amxc_var_set_type(&args, AMXC_VAR_ID_HTABLE);
329  assert_int_equal(amxb_async_invoke(invoke_ctx, &args, NULL, NULL, NULL, &request), return_val);
330  assert_ptr_not_equal(request, NULL);
331  assert_int_equal(amxb_close_request(&request), 0);
332  assert_ptr_equal(request, NULL);
333 
334  assert_int_not_equal(amxb_async_invoke(NULL, NULL, NULL, NULL, NULL, &request), 0);
335  assert_ptr_equal(request, NULL);
336 
337  return_val = -1;
338  assert_int_equal(amxb_async_invoke(invoke_ctx, NULL, NULL, NULL, NULL, &request), return_val);
339  assert_ptr_equal(request, NULL);
340 
341  return_val = 0;
342  amxb_free_invoke(&invoke_ctx);
343  assert_int_equal(amxb_disconnect(ctx), 0);
344  amxb_free(&ctx);
345  assert_ptr_equal(ctx, NULL);
346 
347  assert_int_equal(amxb_connect(&ctx, "abus://atest:8080/var/run/abus.sock"), 0);
348  assert_int_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), 0);
349 
350  return_val = 0;
351  assert_int_equal(amxb_async_invoke(invoke_ctx, NULL, NULL, NULL, NULL, &request), 0);
352  assert_ptr_not_equal(request, NULL);
353  assert_int_equal(amxb_close_request(&request), AMXB_ERROR_NOT_SUPPORTED_OP);
354  assert_ptr_equal(request, NULL);
355  assert_int_not_equal(amxb_disconnect(ctx), 0);
356  amxb_free_invoke(&invoke_ctx);
357  amxb_free(&ctx);
358 
359  assert_int_equal(amxb_connect(&ctx, "zbus://test:80/var/run/zbus.sock"), 0);
360  assert_int_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), 0);
361 
362  return_val = 0;
363  assert_int_equal(amxb_async_invoke(invoke_ctx, NULL, NULL, NULL, NULL, &request), AMXB_ERROR_NOT_SUPPORTED_OP);
364  assert_ptr_equal(request, NULL);
365  return_val = -1;
366  assert_int_equal(amxb_async_invoke(invoke_ctx, NULL, NULL, NULL, NULL, &request), AMXB_ERROR_NOT_SUPPORTED_OP);
367  assert_ptr_equal(request, NULL);
368  return_val = 0;
369  amxb_free(&ctx);
370 
371  assert_int_equal(amxb_be_unregister(&dummy_be1), 0);
372  assert_int_equal(amxb_be_unregister(&dummy_be3), 0);
373  assert_int_equal(amxb_be_unregister(&dummy_be4), 0);
374  amxc_var_clean(&args);
375 
376  assert_int_not_equal(amxb_async_invoke(invoke_ctx, NULL, NULL, NULL, NULL, &request), 0);
377  assert_ptr_equal(request, NULL);
378  assert_int_not_equal(amxb_close_request(NULL), 0);
379  amxb_free_invoke(&invoke_ctx);
380 }
381 
382 void test_amxb_api_after_backend_removal(UNUSED void** state) {
383  amxb_bus_ctx_t* ctx = NULL;
384  amxb_request_t* request = NULL;
385  amxb_invoke_t* invoke_ctx = NULL;
386 
387  assert_int_equal(amxb_be_register(&dummy_be1), 0);
388 
389  return_val = 0;
390  assert_int_equal(amxb_connect(&ctx, "xbus://test:80/var/run/xbus.sock"), 0);
391  assert_int_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), 0);
392  assert_int_equal(amxb_async_invoke(invoke_ctx, NULL, NULL, NULL, NULL, &request), return_val);
393 
394  assert_int_equal(amxb_be_unregister(&dummy_be1), 0);
395  ctx = NULL;
396 
397  assert_int_not_equal(amxb_disconnect(ctx), 0);
398  assert_int_not_equal(amxb_read(ctx), 0);
399  assert_int_equal(amxb_get_fd(ctx), -1);
400  assert_int_equal(amxb_close_request(&request), 0);
401  assert_ptr_equal(request, NULL);
402  assert_int_not_equal(amxb_async_invoke(invoke_ctx, NULL, NULL, NULL, NULL, &request), 0);
403  assert_ptr_equal(request, NULL);
404  assert_int_not_equal(amxb_invoke(invoke_ctx, NULL, NULL, NULL, NULL, 10), 0);
405 
406  amxb_free_invoke(&invoke_ctx);
407  amxb_free(&ctx);
408 }
409 
410 void test_amxb_wait_for_request(UNUSED void** state) {
411  amxb_bus_ctx_t* ctx = NULL;
412  amxb_request_t* request = NULL;
413  amxb_invoke_t* invoke_ctx = NULL;
414 
415  assert_int_equal(amxb_be_register(&dummy_be1), 0);
416  assert_int_equal(amxb_be_register(&dummy_be4), 0);
417 
418  assert_int_equal(amxb_connect(&ctx, "xbus://atest:8080/var/run/xbus.sock"), 0);
419  return_val = 0;
420  assert_int_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), NULL);
421  assert_int_equal(amxb_async_invoke(invoke_ctx, NULL, NULL, NULL, NULL, &request), 0);
422  assert_ptr_not_equal(request, NULL);
423 
424  assert_int_equal(amxb_wait_for_request(request, 5), 0);
425  assert_int_equal(amxb_close_request(&request), 0);
426  assert_ptr_equal(request, NULL);
427 
428  assert_int_not_equal(amxb_wait_for_request(request, 5), 0);
429 
430  amxb_free_invoke(&invoke_ctx);
431  assert_int_equal(amxb_disconnect(ctx), 0);
432  amxb_free(&ctx);
433 
434  assert_int_equal(amxb_connect(&ctx, "abus://atest:8080/var/run/abus.sock"), 0);
435  return_val = 0;
436  assert_int_equal(amxb_new_invoke(&invoke_ctx, ctx, "object", NULL, "method"), 0);
437  assert_int_equal(amxb_async_invoke(invoke_ctx, NULL, NULL, NULL, NULL, &request), 0);
438  assert_ptr_not_equal(request, NULL);
439 
440  assert_int_equal(amxb_wait_for_request(request, 5), AMXB_ERROR_NOT_SUPPORTED_OP);
441  assert_int_equal(amxb_close_request(&request), AMXB_ERROR_NOT_SUPPORTED_OP);
442 
443  amxb_free_invoke(&invoke_ctx);
444  amxb_free(&ctx);
445 
446  assert_int_equal(amxb_be_unregister(&dummy_be1), 0);
447  assert_int_equal(amxb_be_unregister(&dummy_be4), 0);
448 }
449 
450 void test_amxb_async_call(UNUSED void** state) {
451  amxb_bus_ctx_t* ctx = NULL;
452  amxb_request_t* request = NULL;
453 
454  assert_int_equal(amxb_be_register(&dummy_be1), 0);
455  assert_int_equal(amxb_be_register(&dummy_be4), 0);
456 
457  assert_int_equal(amxb_connect(&ctx, "xbus://atest:8080/var/run/xbus.sock"), 0);
458  return_val = 0;
459  request = amxb_async_call(ctx, "object", "method", NULL, NULL, NULL);
460  assert_non_null(request);
461 
462  assert_int_equal(amxb_wait_for_request(request, 5), 0);
463  assert_int_equal(amxb_close_request(&request), 0);
464  assert_ptr_equal(request, NULL);
465 
466  assert_int_not_equal(amxb_wait_for_request(request, 5), 0);
467 
468  assert_int_equal(amxb_disconnect(ctx), 0);
469  amxb_free(&ctx);
470 
471  assert_int_equal(amxb_connect(&ctx, "abus://atest:8080/var/run/abus.sock"), 0);
472  return_val = 0;
473  request = amxb_async_call(ctx, "object", "method", NULL, NULL, NULL);
474  assert_non_null(request);
475 
476  assert_int_equal(amxb_wait_for_request(request, 5), AMXB_ERROR_NOT_SUPPORTED_OP);
477  assert_int_equal(amxb_close_request(&request), AMXB_ERROR_NOT_SUPPORTED_OP);
478 
479  amxb_free(&ctx);
480 
481  assert_int_equal(amxb_be_unregister(&dummy_be1), 0);
482  assert_int_equal(amxb_be_unregister(&dummy_be4), 0);
483 }
Ambiorix bus agnostic API header file.
Ambiorix bus agnostic API header file.
struct _amxb_be_funcs amxb_be_funcs_t
Definition: amxb_types.h:79
int amxb_be_unregister(amxb_be_funcs_t *const funcs)
Unregisters a backend interface.
int amxb_be_register(amxb_be_funcs_t *const funcs)
Registers backend interface.
int amxb_connect(amxb_bus_ctx_t **ctx, const char *uri)
Create a bus connection.
void amxb_free(amxb_bus_ctx_t **ctx)
Frees allocated memory.
int amxb_get_fd(const amxb_bus_ctx_t *const ctx)
Get the connection file descriptor.
int amxb_disconnect(amxb_bus_ctx_t *ctx)
Disconnects a bus connection.
int amxb_read(const amxb_bus_ctx_t *const ctx)
Reads data from the file descriptor.
#define AMXB_ERROR_NOT_SUPPORTED_OP
Function/operation not supported.
Definition: amxb_error.h:110
int amxb_wait_for_request(amxb_request_t *req, int timeout)
Waits for an asynchronous remote function invoke to finish.
int amxb_close_request(amxb_request_t **req)
Closes a previously create remote function called context.
int amxb_new_invoke(amxb_invoke_t **invoke_ctx, amxb_bus_ctx_t *const ctx, const char *object, const char *interface, const char *method)
Prepares a remote function invocation.
void amxb_free_invoke(amxb_invoke_t **invoke_ctx)
Deletes a function invoke context, and frees allocated memory.
int amxb_async_invoke(amxb_invoke_t *invoke_ctx, amxc_var_t *args, amxb_be_cb_fn_t fn, amxb_be_done_cb_fn_t done_fn, void *priv, amxb_request_t **req)
Invokes a remote function, as defined by the function invoke context.
int amxb_invoke(amxb_invoke_t *invoke_ctx, amxc_var_t *args, amxc_var_t *ret, amxb_be_cb_fn_t fn, void *priv, int timeout)
Invokes a remote function, as defined by the function invoke context.
amxb_request_t * amxb_async_call(amxb_bus_ctx_t *const bus_ctx, const char *object, const char *method, amxc_var_t *args, amxb_be_done_cb_fn_t done_fn, void *priv)
Invokes a data model function.
The back-end interface structure.
amxb_be_connect_fn_t connect
amxc_llist_t invoke_ctxs
Definition: amxb_types.h:119
amxc_llist_it_t it
Definition: amxb_types.h:150
char * interface
Definition: amxb_types.h:152
char * method
Definition: amxb_types.h:153
char * object
Definition: amxb_types.h:151
A request structure.
Definition: amxb_types.h:138
void * bus_data
Definition: amxb_types.h:144
static amxb_be_funcs_t dummy_be1
static int return_val
static char * dummy_bus_data
static int dummy_wait_request(void *const ctx, amxb_request_t *request, UNUSED int timeout)
static void * dummy_connect(const char *host, const char *port, const char *path, UNUSED amxp_signal_mngr_t *sigmngr)
static char verify_port[64]
static void dummy_free_invoke(amxb_invoke_t *invoke_ctx)
static int dummy_get_fd(void *ctx)
static int dummy_invoke(void *const ctx, amxb_invoke_t *invoke_ctx, UNUSED amxc_var_t *args, amxb_request_t *request, int timeout)
static char verify_host[64]
static amxb_be_funcs_t dummy_be4
static int dummy_new_invoke(amxb_invoke_t *invoke_ctx)
int __wrap_dlclose(void *handle)
void test_amxb_async_call(UNUSED void **state)
static int dummy_disconnect(void *ctx)
static void dummy_free(void *ctx)
void test_amxb_api_after_backend_removal(UNUSED void **state)
void test_amxb_wait_for_request(UNUSED void **state)
static amxb_be_funcs_t dummy_be3
static char verify_path[64]
void test_amxb_async_invoke_and_close(UNUSED void **state)
static int dummy_close_request(void *const ctx, amxb_request_t *request)
void test_amxb_invoke(UNUSED void **state)
void test_amxb_new_free_invoke(UNUSED void **state)
static int dummy_read(void *const ctx)
static char * dummy_ctx
static int dummy_async_invoke(void *const ctx, amxb_invoke_t *invoke_ctx, UNUSED amxc_var_t *args, amxb_request_t *request)