Skip to content

Commit 57b14c6

Browse files
committed
tests UPDATE do not leave unlock RPCs to timeout
1 parent 904fe28 commit 57b14c6

File tree

1 file changed

+26
-42
lines changed

1 file changed

+26
-42
lines changed

tests/test_rpc.c

Lines changed: 26 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -104,31 +104,8 @@ test_lock_basic(void **state)
104104
FREE_TEST_VARS(st);
105105
}
106106

107-
static void
108-
test_lock_fail(void **state)
109-
{
110-
struct np2_test *st = *state;
111-
112-
/* Lock from first session */
113-
st->rpc = nc_rpc_lock(NC_DATASTORE_RUNNING);
114-
assert_non_null(st->rpc);
115-
st->msgtype = nc_send_rpc(st->nc_sess, st->rpc, 1000, &st->msgid);
116-
assert_int_equal(st->msgtype, NC_MSG_RPC);
117-
ASSERT_OK_REPLY(st);
118-
FREE_TEST_VARS(st);
119-
120-
/* Request to lock from another session should fail when locked already */
121-
st->rpc = nc_rpc_lock(NC_DATASTORE_RUNNING);
122-
st->msgtype = nc_send_rpc(st->nc_sess2, st->rpc, 1000, &st->msgid);
123-
assert_int_equal(st->msgtype, NC_MSG_RPC);
124-
st->msgtype = nc_recv_reply(st->nc_sess2, st->rpc, st->msgid, 100, &st->envp, &st->op);
125-
assert_int_equal(st->msgtype, NC_MSG_WOULDBLOCK);
126-
127-
FREE_TEST_VARS(st);
128-
}
129-
130107
static int
131-
setup_test_unlock(void **state)
108+
setup_test_unlock_fail(void **state)
132109
{
133110
struct np2_test *st = *state;
134111

@@ -140,19 +117,6 @@ setup_test_unlock(void **state)
140117
return 0;
141118
}
142119

143-
static void
144-
test_unlock(void **state)
145-
{
146-
struct np2_test *st = *state;
147-
148-
/* Check if unlock RPC succeeds */
149-
st->rpc = nc_rpc_unlock(NC_DATASTORE_RUNNING);
150-
st->msgtype = nc_send_rpc(st->nc_sess, st->rpc, 1000, &st->msgid);
151-
assert_int_equal(NC_MSG_RPC, st->msgtype);
152-
ASSERT_OK_REPLY(st);
153-
FREE_TEST_VARS(st);
154-
}
155-
156120
static int
157121
teardown_test_unlock_fail(void **state)
158122
{
@@ -170,13 +134,35 @@ static void
170134
test_unlock_fail(void **state)
171135
{
172136
struct np2_test *st = *state;
137+
const char *template;
138+
char *error;
173139

174140
/* Try unlocking a lock by a different session, should fail */
175141
st->rpc = nc_rpc_unlock(NC_DATASTORE_RUNNING);
176142
st->msgtype = nc_send_rpc(st->nc_sess2, st->rpc, 1000, &st->msgid);
177143
assert_int_equal(st->msgtype, NC_MSG_RPC);
178-
st->msgtype = nc_recv_reply(st->nc_sess2, st->rpc, st->msgid, 100, &st->envp, &st->op);
179-
assert_int_equal(st->msgtype, NC_MSG_WOULDBLOCK);
144+
145+
/* Check error message */
146+
ASSERT_ERROR_REPLY_SESS2(st);
147+
assert_int_equal(LY_SUCCESS, lyd_print_mem(&st->str, st->envp, LYD_XML, 0));
148+
template =
149+
"<rpc-reply "
150+
"xmlns=\"urn:ietf:params:xml:ns:netconf:base:1.0\" "
151+
"message-id=\"%" PRIu64 "\">\n"
152+
" <rpc-error>\n"
153+
" <error-type>protocol</error-type>\n"
154+
" <error-tag>lock-denied</error-tag>\n"
155+
" <error-severity>error</error-severity>\n"
156+
" <error-message xml:lang=\"en\">Access to the requested lock is denied"
157+
" because the lock is currently held by another entity.</error-message>\n"
158+
" <error-info>\n"
159+
" <session-id>%" PRIu32 "</session-id>\n"
160+
" </error-info>\n"
161+
" </rpc-error>\n"
162+
"</rpc-reply>\n";
163+
assert_int_not_equal(-1, asprintf(&error, template, st->msgid, nc_session_get_id(st->nc_sess)));
164+
assert_string_equal(st->str, error);
165+
free(error);
180166

181167
FREE_TEST_VARS(st);
182168
}
@@ -338,9 +324,7 @@ main(int argc, char **argv)
338324
{
339325
const struct CMUnitTest tests[] = {
340326
cmocka_unit_test_teardown(test_lock_basic, teardown_test_lock),
341-
cmocka_unit_test_teardown(test_lock_fail, teardown_test_lock),
342-
cmocka_unit_test_setup(test_unlock, setup_test_unlock),
343-
cmocka_unit_test_setup_teardown(test_unlock_fail, setup_test_unlock, teardown_test_unlock_fail),
327+
cmocka_unit_test_setup_teardown(test_unlock_fail, setup_test_unlock_fail, teardown_test_unlock_fail),
344328
cmocka_unit_test(test_get),
345329
cmocka_unit_test(test_kill),
346330
cmocka_unit_test(test_commit),

0 commit comments

Comments
 (0)