diff options
author | Aris Adamantiadis <aris@0xbadc0de.be> | 2015-07-22 09:29:44 +0200 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2016-05-02 16:56:50 +0200 |
commit | 5c67530f1ee1e688d50ca11e8fb7620d9e142fe8 (patch) | |
tree | 3e300144df594ce8364a25f8cf8292ac9ea76e07 | |
parent | e40e6e86865053e342e4f1cd93fc595d47722b86 (diff) | |
download | libssh-5c67530f1ee1e688d50ca11e8fb7620d9e142fe8.tar.gz libssh-5c67530f1ee1e688d50ca11e8fb7620d9e142fe8.tar.xz libssh-5c67530f1ee1e688d50ca11e8fb7620d9e142fe8.zip |
tests: Add test for ssh_callbacks_iterate()
Signed-off-by: Aris Adamantiadis <aris@0xbadc0de.be>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
-rw-r--r-- | tests/unittests/torture_callbacks.c | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/tests/unittests/torture_callbacks.c b/tests/unittests/torture_callbacks.c index a21e6898..4f88ec62 100644 --- a/tests/unittests/torture_callbacks.c +++ b/tests/unittests/torture_callbacks.c @@ -187,13 +187,64 @@ static void torture_callbacks_execute_list(void **state){ } +static int cb3(ssh_session session, ssh_channel channel, void *userdata){ + int *v = userdata; + (void)session; + (void)channel; + *v = 1; + return 10; +} + +static void torture_callbacks_iterate(void **state){ + struct ssh_list *list = ssh_list_new(); + int v = 0, w = 0; + struct ssh_channel_callbacks_struct c1 = { + .channel_eof_function = cb1, + .channel_shell_request_function = cb3, + .userdata = &v + }; + struct ssh_channel_callbacks_struct c2 = { + .channel_eof_function = cb1, + .channel_shell_request_function = cb3, + .userdata = &v + }; + + (void)state; /* unused */ + + ssh_callbacks_init(&c1); + ssh_callbacks_init(&c2); + + ssh_list_append(list, &c1); + ssh_list_append(list, &c2); + + ssh_callbacks_iterate(list, ssh_channel_callbacks, channel_eof_function){ + ssh_callbacks_iterate_exec(NULL, NULL); + } + ssh_callbacks_iterate_end(); + + assert_int_equal(v, 2); + + v = 0; + ssh_callbacks_iterate(list, ssh_channel_callbacks, channel_shell_request_function){ + w = ssh_callbacks_iterate_exec(NULL, NULL); + if (w) { + break; + } + } + ssh_callbacks_iterate_end(); + + assert_int_equal(w, 10); + assert_int_equal(v, 1); +} + int torture_run_tests(void) { int rc; struct CMUnitTest tests[] = { cmocka_unit_test_setup_teardown(torture_callbacks_size, setup, teardown), cmocka_unit_test_setup_teardown(torture_callbacks_exists, setup, teardown), cmocka_unit_test(torture_log_callback), - cmocka_unit_test(torture_callbacks_execute_list) + cmocka_unit_test(torture_callbacks_execute_list), + cmocka_unit_test(torture_callbacks_iterate) }; ssh_init(); |