aboutsummaryrefslogtreecommitdiff
path: root/tests/client/torture_sftp_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/client/torture_sftp_init.c')
-rw-r--r--tests/client/torture_sftp_init.c106
1 files changed, 106 insertions, 0 deletions
diff --git a/tests/client/torture_sftp_init.c b/tests/client/torture_sftp_init.c
new file mode 100644
index 00000000..a17f01fe
--- /dev/null
+++ b/tests/client/torture_sftp_init.c
@@ -0,0 +1,106 @@
+#include "config.h"
+
+#define LIBSSH_STATIC
+
+#include "torture.h"
+#include "sftp.c"
+
+#include <sys/types.h>
+#include <pwd.h>
+#include <errno.h>
+
+static int sshd_setup(void **state)
+{
+ torture_setup_sshd_server(state, false);
+
+ return 0;
+}
+
+static int sshd_teardown(void **state) {
+ torture_teardown_sshd_server(state);
+
+ return 0;
+}
+
+static void session_setup(void **state)
+{
+ struct torture_state *s = *state;
+ struct passwd *pwd;
+ int rc;
+
+ pwd = getpwnam("bob");
+ assert_non_null(pwd);
+
+ rc = setuid(pwd->pw_uid);
+ assert_return_code(rc, errno);
+
+ s->ssh.session = torture_ssh_session(s,
+ TORTURE_SSH_SERVER,
+ NULL,
+ TORTURE_SSH_USER_ALICE,
+ NULL);
+ assert_non_null(s->ssh.session);
+
+ s->ssh.tsftp = torture_sftp_session(s->ssh.session);
+ assert_non_null(s->ssh.tsftp);
+}
+
+static void session_setup_channel(void **state)
+{
+ struct torture_state *s = *state;
+ struct passwd *pwd = NULL;
+ ssh_channel c = NULL;
+ int rc;
+
+ pwd = getpwnam("bob");
+ assert_non_null(pwd);
+
+ rc = setuid(pwd->pw_uid);
+ assert_return_code(rc, errno);
+
+ s->ssh.session = torture_ssh_session(s,
+ TORTURE_SSH_SERVER,
+ NULL,
+ TORTURE_SSH_USER_ALICE,
+ NULL);
+ assert_non_null(s->ssh.session);
+
+ c = ssh_channel_new(s->ssh.session);
+ assert_non_null(c);
+
+ s->ssh.tsftp = torture_sftp_session_channel(s->ssh.session, c);
+ assert_non_null(s->ssh.tsftp);
+}
+
+static int session_teardown(void **state)
+{
+ struct torture_state *s = *state;
+
+ torture_rmdirs(s->ssh.tsftp->testdir);
+ torture_sftp_close(s->ssh.tsftp);
+ ssh_disconnect(s->ssh.session);
+ ssh_free(s->ssh.session);
+
+ return 0;
+}
+
+int torture_run_tests(void) {
+ int rc;
+ struct CMUnitTest tests[] = {
+ cmocka_unit_test_setup_teardown(session_setup,
+ NULL,
+ session_teardown),
+ cmocka_unit_test_setup_teardown(session_setup_channel,
+ NULL,
+ session_teardown)
+ };
+
+ ssh_init();
+
+ torture_filter_tests(tests);
+ rc = cmocka_run_group_tests(tests, sshd_setup, sshd_teardown);
+
+ ssh_finalize();
+
+ return rc;
+}