This repository has been archived by the owner on Sep 5, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 56
/
Copy pathconn-send_with_imm.c
132 lines (114 loc) · 3.12 KB
/
conn-send_with_imm.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// SPDX-License-Identifier: BSD-3-Clause
/* Copyright (c) 2020 Fujitsu */
/*
* conn-send_with_imm.c -- the rpma_send_with_imm() unit tests
*
* APIs covered:
* - rpma_send_with_imm()
*/
#include "conn-common.h"
#include "mocks-ibverbs.h"
#include "mocks-rdma_cm.h"
/*
* send_with_imm__conn_NULL -- NULL conn is invalid
*/
static void
send_with_imm__conn_NULL(void **unused)
{
/* run test */
int ret = rpma_send_with_imm(NULL, MOCK_RPMA_MR_LOCAL,
MOCK_LOCAL_OFFSET, MOCK_LEN, MOCK_FLAGS,
MOCK_IMM_DATA, MOCK_OP_CONTEXT);
/* verify the results */
assert_int_equal(ret, RPMA_E_INVAL);
}
/*
* send_with_imm__src_NULL -- NULL src is invalid
*/
static void
send_with_imm__src_NULL(void **unused)
{
/* run test */
int ret = rpma_send_with_imm(MOCK_CONN, NULL, MOCK_LOCAL_OFFSET,
MOCK_LEN, MOCK_FLAGS, MOCK_IMM_DATA,
MOCK_OP_CONTEXT);
/* verify the results */
assert_int_equal(ret, RPMA_E_INVAL);
}
/*
* send_with_imm__flags_0 -- flags == 0 is invalid
*/
static void
send_with_imm__flags_0(void **unused)
{
/* run test */
int ret = rpma_send_with_imm(MOCK_CONN, MOCK_RPMA_MR_LOCAL,
MOCK_LOCAL_OFFSET, MOCK_LEN, 0, MOCK_IMM_DATA,
MOCK_OP_CONTEXT);
/* verify the results */
assert_int_equal(ret, RPMA_E_INVAL);
}
/*
* send_with_imm__conn_src_NULL_flags_0 -- NULL conn, src
* and flags == 0 are invalid
*/
static void
send_with_imm__conn_src_NULL_flags_0(void **unused)
{
/* run test */
int ret = rpma_send_with_imm(NULL, NULL, MOCK_LOCAL_OFFSET,
MOCK_LEN, 0, MOCK_IMM_DATA, MOCK_OP_CONTEXT);
/* verify the results */
assert_int_equal(ret, RPMA_E_INVAL);
}
/*
* send_with_imm__success -- happy day scenario
*/
static void
send_with_imm__success(void **cstate_ptr)
{
struct conn_test_state *cstate = *cstate_ptr;
/* configure mocks */
expect_value(rpma_mr_send, qp, MOCK_QP);
expect_value(rpma_mr_send, src, MOCK_RPMA_MR_LOCAL);
expect_value(rpma_mr_send, offset, MOCK_LOCAL_OFFSET);
expect_value(rpma_mr_send, len, MOCK_LEN);
expect_value(rpma_mr_send, flags, MOCK_FLAGS);
expect_value(rpma_mr_send, operation, IBV_WR_SEND_WITH_IMM);
expect_value(rpma_mr_send, imm, MOCK_IMM_DATA);
expect_value(rpma_mr_send, op_context, MOCK_OP_CONTEXT);
will_return(rpma_mr_send, MOCK_OK);
/* run test */
int ret = rpma_send_with_imm(cstate->conn,
MOCK_RPMA_MR_LOCAL, MOCK_LOCAL_OFFSET,
MOCK_LEN, MOCK_FLAGS, MOCK_IMM_DATA,
MOCK_OP_CONTEXT);
/* verify the results */
assert_int_equal(ret, MOCK_OK);
}
/*
* group_setup_send -- prepare resources for all tests in the group
*/
static int
group_setup_send(void **unused)
{
/* set value of QP in mock of CM ID */
Cm_id.qp = MOCK_QP;
return 0;
}
static const struct CMUnitTest tests_send_with_imm[] = {
/* rpma_read_with_imm() unit tests */
cmocka_unit_test(send_with_imm__conn_NULL),
cmocka_unit_test(send_with_imm__src_NULL),
cmocka_unit_test(send_with_imm__flags_0),
cmocka_unit_test(send_with_imm__conn_src_NULL_flags_0),
cmocka_unit_test_setup_teardown(send_with_imm__success,
setup__conn_new, teardown__conn_delete),
cmocka_unit_test(NULL)
};
int
main(int argc, char *argv[])
{
return cmocka_run_group_tests(tests_send_with_imm,
group_setup_send, NULL);
}