@@ -127,61 +127,7 @@ run_dtor(void **state)
127127}
128128
129129static void
130- list_signals_cb (struct ubus_request * req , int type , struct blob_attr * msg )
131- {
132- // ubus output
133- char * str = blobmsg_format_json (msg , true);
134- assert_non_null (str );
135-
136- // add result
137- char * * out_str = (char * * )req -> priv ;
138- * out_str = str ;
139- }
140-
141- static void
142- run_signal_w_static_output_cb (struct ubus_request * req ,
143- int type ,
144- struct blob_attr * msg )
145- {
146- // ubus output
147- char * str = blobmsg_format_json (msg , true);
148- assert_non_null (str );
149-
150- // add result
151- char * * out_str = (char * * )req -> priv ;
152- * out_str = str ;
153- }
154-
155- static void
156- run_missing_signal_cb (struct ubus_request * req , int type , struct blob_attr * msg )
157- {
158- // ubus output
159- char * str = blobmsg_format_json (msg , true);
160- assert_non_null (str );
161-
162- // add result
163- char * * out_str = (char * * )req -> priv ;
164- * out_str = str ;
165- }
166-
167- static void
168- run_signal_w_args_return_named_arg_cb (struct ubus_request * req ,
169- int type ,
170- struct blob_attr * msg )
171- {
172- // ubus output
173- char * str = blobmsg_format_json (msg , true);
174- assert_non_null (str );
175-
176- // add result
177- char * * out_str = (char * * )req -> priv ;
178- * out_str = str ;
179- }
180-
181- static void
182- run_signal_w_id_missing_cb (struct ubus_request * req ,
183- int type ,
184- struct blob_attr * msg )
130+ ubus_cb (struct ubus_request * req , int type , struct blob_attr * msg )
185131{
186132 // ubus output
187133 char * str = blobmsg_format_json (msg , true);
@@ -209,7 +155,7 @@ call_list_signals(void **state)
209155 id ,
210156 "list_signals" ,
211157 b .head ,
212- list_signals_cb ,
158+ ubus_cb ,
213159 & out_str ,
214160 2000 );
215161 assert_int_equal (r , 0 );
@@ -258,7 +204,7 @@ call_run_signal_w_static_output(void **state)
258204 id ,
259205 "run_signal" ,
260206 b .head ,
261- run_signal_w_static_output_cb ,
207+ ubus_cb ,
262208 & out_str ,
263209 2000 );
264210 assert_int_equal (r , 0 );
@@ -289,7 +235,7 @@ call_run_missing_signal(void **state)
289235 id ,
290236 "run_signal" ,
291237 b .head ,
292- run_missing_signal_cb ,
238+ ubus_cb ,
293239 & out_str ,
294240 2000 );
295241 assert_int_equal (r , 0 );
@@ -323,7 +269,7 @@ call_run_signal_w_args_return_named_arg(void **state)
323269 id ,
324270 "run_signal" ,
325271 b .head ,
326- run_signal_w_args_return_named_arg_cb ,
272+ ubus_cb ,
327273 & out_str ,
328274 2000 );
329275 assert_int_equal (r , 0 );
@@ -353,7 +299,7 @@ call_run_signal_w_id_missing(void **state)
353299 id ,
354300 "run_signal" ,
355301 b .head ,
356- run_signal_w_id_missing_cb ,
302+ ubus_cb ,
357303 & out_str ,
358304 2000 );
359305 assert_int_equal (r , 0 );
@@ -366,6 +312,87 @@ call_run_signal_w_id_missing(void **state)
366312 free (out_str );
367313}
368314
315+ static void
316+ signal_match_cb (umplg_sh_t * shd , void * args )
317+ {
318+ shd -> min_auth_lvl = shd -> min_auth_lvl ? 0 : 1 ;
319+ }
320+
321+ static void
322+ call_run_signal_w_sufficient_authentication_level (void * * state )
323+ {
324+ uint32_t id ;
325+
326+ // look for umink object
327+ int r = ubus_lookup_id (ctx , "umink" , & id );
328+ assert_int_equal (r , 0 );
329+
330+ blob_buf_init (& b , 0 );
331+ blobmsg_add_u32 (& b , "id" , id );
332+ blobmsg_add_json_from_string (
333+ & b ,
334+ "{\"id\": \"TEST_EVENT_01\", \"auth\": \"{\\\"flags\\\": 0}\"}" );
335+ char * out_str = NULL ;
336+
337+ r = ubus_invoke (ctx ,
338+ id ,
339+ "run_signal" ,
340+ b .head ,
341+ ubus_cb ,
342+ & out_str ,
343+ 2000 );
344+ assert_int_equal (r , 0 );
345+ assert_non_null (out_str );
346+
347+ // get result from ubus call
348+ assert_string_equal (out_str , "{\"result\":\"test_data\"}" );
349+
350+ // free
351+ free (out_str );
352+ }
353+
354+ static void
355+ call_run_signal_w_insufficient_authentication_level (void * * state )
356+ {
357+ // get pm
358+ test_t * data = * state ;
359+ assert_non_null (data );
360+ umplg_mngr_t * m = data -> m ;
361+
362+ uint32_t id ;
363+
364+ // set min user role level for signal to 1 (admin)
365+ umplg_match_signal (m , "TEST_EVENT_01" , & signal_match_cb , NULL );
366+
367+ // look for umink object
368+ int r = ubus_lookup_id (ctx , "umink" , & id );
369+ assert_int_equal (r , 0 );
370+
371+ blob_buf_init (& b , 0 );
372+ blobmsg_add_u32 (& b , "id" , id );
373+ blobmsg_add_json_from_string (
374+ & b ,
375+ "{\"id\": \"TEST_EVENT_01\", \"auth\": \"{\\\"flags\\\": 0}\"}" );
376+ char * out_str = NULL ;
377+
378+ r = ubus_invoke (ctx ,
379+ id ,
380+ "run_signal" ,
381+ b .head ,
382+ ubus_cb ,
383+ & out_str ,
384+ 2000 );
385+ assert_int_equal (r , 0 );
386+ assert_non_null (out_str );
387+
388+ // get result from ubus call
389+ assert_string_equal (out_str , "{\"result\":\"authentication error\"}" );
390+
391+ // free
392+ free (out_str );
393+ }
394+
395+
369396int
370397main (int argc , char * * argv )
371398{
@@ -377,6 +404,8 @@ main(int argc, char **argv)
377404 cmocka_unit_test (call_run_missing_signal ),
378405 cmocka_unit_test (call_run_signal_w_id_missing ),
379406 cmocka_unit_test (call_run_signal_w_args_return_named_arg ),
407+ cmocka_unit_test (call_run_signal_w_sufficient_authentication_level ),
408+ cmocka_unit_test (call_run_signal_w_insufficient_authentication_level ),
380409 };
381410
382411 int r = cmocka_run_group_tests (tests , run_init , run_dtor );
0 commit comments