aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJakub Jelen <jjelen@redhat.com>2018-12-04 13:42:50 +0100
committerAndreas Schneider <asn@cryptomilk.org>2018-12-10 17:52:56 +0100
commit8c812dbfa388340a73e015b834cf4a24b7bc19d2 (patch)
treea1c4426ed4e7b9e17728bf2ee2f22c29d4a8718d /tests
parent9128ecf397f0b94f214b929f10df1b74928f953a (diff)
downloadlibssh-8c812dbfa388340a73e015b834cf4a24b7bc19d2.tar.gz
libssh-8c812dbfa388340a73e015b834cf4a24b7bc19d2.tar.xz
libssh-8c812dbfa388340a73e015b834cf4a24b7bc19d2.zip
tests: Verify all the options are copied over
The ssh_options_copy() function was missing several options that were added in recent years. Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/unittests/torture_options.c109
1 files changed, 109 insertions, 0 deletions
diff --git a/tests/unittests/torture_options.c b/tests/unittests/torture_options.c
index 1bd8249b..adf166ac 100644
--- a/tests/unittests/torture_options.c
+++ b/tests/unittests/torture_options.c
@@ -623,6 +623,114 @@ static void torture_options_config_match(void **state)
unlink("test_config");
}
+static void torture_options_copy(void **state)
+{
+ ssh_session session = *state, new = NULL;
+ struct ssh_iterator *it = NULL, *it2 = NULL;
+ FILE *config = NULL;
+ int i, level = 9;
+ int rv;
+
+ /* Required for options_parse_config() */
+ ssh_options_set(session, SSH_OPTIONS_HOST, "example");
+
+ /* Impossible to set through the configuration */
+ rv = ssh_options_set(session, SSH_OPTIONS_COMPRESSION_LEVEL, &level);
+ assert_ssh_return_code(session, rv);
+ level = 1;
+ rv = ssh_options_set(session, SSH_OPTIONS_NODELAY, &level);
+ assert_ssh_return_code(session, rv);
+
+ /* The Match keyword requires argument */
+ config = fopen("test_config", "w");
+ assert_non_null(config);
+ fputs("IdentityFile ~/.ssh/id_ecdsa\n"
+ "User tester\n"
+ "Hostname example.com\n"
+ "BindAddress 127.0.0.2\n"
+ "GlobalKnownHostsFile /etc/ssh/known_hosts2\n"
+ "UserKnownHostsFile ~/.ssh/known_hosts2\n"
+ "KexAlgorithms curve25519-sha256\n"
+ "Ciphers aes256-ctr\n"
+ "MACs hmac-sha2-256\n"
+ "HostKeyAlgorithms ssh-ed25519\n"
+ "Compression yes\n"
+ "PubkeyAcceptedTypes ssh-ed25519\n"
+ "ProxyCommand nc 127.0.0.10 22\n"
+ /* ops.custombanner */
+ "ConnectTimeout 42\n"
+ "Port 222\n"
+ "StrictHostKeyChecking no\n"
+ "GSSAPIServerIdentity my.example.com\n"
+ "GSSAPIClientIdentity home.sweet\n"
+ "GSSAPIDelegateCredentials yes\n"
+ "PubkeyAuthentication yes\n" /* sets flags */
+ "GSSAPIAuthentication no\n" /* sets flags */
+ "",
+ config);
+ fclose(config);
+
+ rv = ssh_options_parse_config(session, "test_config");
+ assert_ssh_return_code(session, rv);
+
+ rv = ssh_options_copy(session, &new);
+ assert_ssh_return_code(session, rv);
+ assert_non_null(new);
+
+ /* Check the identities match */
+ it = ssh_list_get_iterator(session->opts.identity);
+ assert_non_null(it);
+ it2 = ssh_list_get_iterator(new->opts.identity);
+ assert_non_null(it2);
+ while (it != NULL && it2 != NULL) {
+ assert_string_equal(it->data, it2->data);
+ it = it->next;
+ it2 = it2->next;
+ }
+ assert_null(it);
+ assert_null(it2);
+
+ assert_string_equal(session->opts.username, new->opts.username);
+ assert_string_equal(session->opts.host, new->opts.host);
+ assert_string_equal(session->opts.bindaddr, new->opts.bindaddr);
+ assert_string_equal(session->opts.sshdir, new->opts.sshdir);
+ assert_string_equal(session->opts.knownhosts, new->opts.knownhosts);
+ assert_string_equal(session->opts.global_knownhosts,
+ new->opts.global_knownhosts);
+ for (i = 0; i < 10; i++) {
+ if (session->opts.wanted_methods[i] == NULL) {
+ assert_null(new->opts.wanted_methods[i]);
+ } else {
+ assert_string_equal(session->opts.wanted_methods[i],
+ new->opts.wanted_methods[i]);
+ }
+ }
+ assert_string_equal(session->opts.pubkey_accepted_types,
+ new->opts.pubkey_accepted_types);
+ assert_string_equal(session->opts.ProxyCommand, new->opts.ProxyCommand);
+ /* TODO custombanner */
+ assert_int_equal(session->opts.timeout, new->opts.timeout);
+ assert_int_equal(session->opts.timeout_usec, new->opts.timeout_usec);
+ assert_int_equal(session->opts.port, new->opts.port);
+ assert_int_equal(session->opts.StrictHostKeyChecking,
+ new->opts.StrictHostKeyChecking);
+ assert_int_equal(session->opts.compressionlevel,
+ new->opts.compressionlevel);
+ assert_string_equal(session->opts.gss_server_identity,
+ new->opts.gss_server_identity);
+ assert_string_equal(session->opts.gss_client_identity,
+ new->opts.gss_client_identity);
+ assert_int_equal(session->opts.gss_delegate_creds,
+ new->opts.gss_delegate_creds);
+ assert_int_equal(session->opts.flags, new->opts.flags);
+ assert_int_equal(session->opts.nodelay, new->opts.nodelay);
+ assert_true(session->opts.config_processed == new->opts.config_processed);
+ assert_memory_equal(session->opts.options_seen, new->opts.options_seen,
+ sizeof(session->opts.options_seen));
+
+ ssh_free(new);
+}
+
#ifdef WITH_SERVER
@@ -707,6 +815,7 @@ int torture_run_tests(void) {
cmocka_unit_test_setup_teardown(torture_options_set_hostkey, setup, teardown),
cmocka_unit_test_setup_teardown(torture_options_set_pubkey_accepted_types, setup, teardown),
cmocka_unit_test_setup_teardown(torture_options_set_macs, setup, teardown),
+ cmocka_unit_test_setup_teardown(torture_options_copy, setup, teardown),
cmocka_unit_test_setup_teardown(torture_options_config_host, setup, teardown),
cmocka_unit_test_setup_teardown(torture_options_config_match,
setup, teardown)