@@ -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-
130107static 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-
156120static int
157121teardown_test_unlock_fail (void * * state )
158122{
@@ -170,13 +134,35 @@ static void
170134test_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