aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJakub Jelen <jjelen@redhat.com>2020-04-14 18:33:12 +0200
committerJakub Jelen <jjelen@redhat.com>2020-04-20 14:14:33 +0200
commit6941958b495435debf8a40a6adb1e6edcb0c4630 (patch)
tree782e6378570ec56a0fbeb4b69453d402fc752768 /tests
parent1ba6ef689fe7f702d9921271dd422cae885de788 (diff)
downloadlibssh-6941958b495435debf8a40a6adb1e6edcb0c4630.tar.gz
libssh-6941958b495435debf8a40a6adb1e6edcb0c4630.tar.xz
libssh-6941958b495435debf8a40a6adb1e6edcb0c4630.zip
tests: Update coverage of config_parser
Signed-off-by: Jakub Jelen <jjelen@redhat.com> Reviewed-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/unittests/torture_config.c120
1 files changed, 113 insertions, 7 deletions
diff --git a/tests/unittests/torture_config.c b/tests/unittests/torture_config.c
index 60600133..671e88c2 100644
--- a/tests/unittests/torture_config.c
+++ b/tests/unittests/torture_config.c
@@ -121,6 +121,8 @@ static int setup_config_files(void **state)
"GSSAPIKexAlgorithms yes\n"
"ControlMaster auto\n" /* SOC_NA */
"VisualHostkey yes\n" /* SOC_UNSUPPORTED */
+ "HostName =equal.sign\n" /* valid */
+ "ProxyJump = many-spaces.com\n" /* valid */
"");
/* Match keyword */
@@ -428,6 +430,9 @@ static void torture_config_unknown(void **state) {
/* test corner cases */
ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG9);
assert_true(ret == 0);
+ assert_string_equal(session->opts.ProxyCommand, "ssh -W [%h]:%p many-spaces.com");
+ assert_string_equal(session->opts.host, "equal.sign");
+
ret = ssh_config_parse_file(session, "/etc/ssh/ssh_config");
assert_true(ret == 0);
ret = ssh_config_parse_file(session, GLOBAL_CLIENT_CONFIG);
@@ -447,6 +452,7 @@ static void torture_config_match(void **state)
int ret = 0;
/* Without any settings we should get all-matched.com hostname */
+ torture_reset_config(session);
ssh_options_set(session, SSH_OPTIONS_HOST, "unmatched");
ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG10);
assert_ssh_return_code(session, ret);
@@ -654,6 +660,7 @@ static void torture_config_proxyjump(void **state) {
int ret = 0;
/* Simplest version with just a hostname */
+ torture_reset_config(session);
ssh_options_set(session, SSH_OPTIONS_HOST, "simple");
ret = ssh_config_parse_file(session, LIBSSH_TESTCONFIG11);
assert_ssh_return_code(session, ret);
@@ -1013,14 +1020,23 @@ static void torture_config_parser_get_token(void **state)
assert_string_equal(tok, "string");
assert_int_equal(*p, '\0');
+ strncpy(data, " \t\t string", sizeof(data));
+ p = data;
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "string");
+ assert_int_equal(*p, '\0');
+
/* drops trailing whitespace */
strncpy(data, "string \t\t \n", sizeof(data));
p = data;
tok = ssh_config_get_token(&p);
assert_string_equal(tok, "string");
- assert_int_equal(*p, ' ');
+ assert_int_equal(*p, '\0');
+
+ strncpy(data, "string \t\t ", sizeof(data));
+ p = data;
tok = ssh_config_get_token(&p);
- assert_string_equal(tok, "\0");
+ assert_string_equal(tok, "string");
assert_int_equal(*p, '\0');
/* Correctly handles tokens in quotes */
@@ -1028,7 +1044,16 @@ static void torture_config_parser_get_token(void **state)
p = data;
tok = ssh_config_get_token(&p);
assert_string_equal(tok, "multi string");
- assert_int_equal(*p, ' ');
+ assert_int_equal(*p, 's');
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "something");
+ assert_int_equal(*p, '\0');
+
+ strncpy(data, "\"multi string\" something", sizeof(data));
+ p = data;
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "multi string");
+ assert_int_equal(*p, 's');
tok = ssh_config_get_token(&p);
assert_string_equal(tok, "something");
assert_int_equal(*p, '\0');
@@ -1046,6 +1071,18 @@ static void torture_config_parser_get_token(void **state)
assert_string_equal(tok, "something");
assert_int_equal(*p, '\0');
+ strncpy(data, "multi string something", sizeof(data));
+ p = data;
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "multi");
+ assert_int_equal(*p, 's');
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "string");
+ assert_int_equal(*p, 's');
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "something");
+ assert_int_equal(*p, '\0');
+
/* It is made to parse also option=value pairs as well */
strncpy(data, " key=value \n", sizeof(data));
p = data;
@@ -1054,9 +1091,34 @@ static void torture_config_parser_get_token(void **state)
assert_int_equal(*p, 'v');
tok = ssh_config_get_token(&p);
assert_string_equal(tok, "value");
- assert_int_equal(*p, ' ');
+ assert_int_equal(*p, '\0');
+
+ strncpy(data, " key=value ", sizeof(data));
+ p = data;
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "key");
+ assert_int_equal(*p, 'v');
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "value");
+ assert_int_equal(*p, '\0');
+
+ /* spaces are allowed also around the equal sign */
+ strncpy(data, " key = value \n", sizeof(data));
+ p = data;
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "key");
+ assert_int_equal(*p, 'v');
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "value");
+ assert_int_equal(*p, '\0');
+
+ strncpy(data, " key = value ", sizeof(data));
+ p = data;
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "key");
+ assert_int_equal(*p, 'v');
tok = ssh_config_get_token(&p);
- assert_string_equal(tok, "\0");
+ assert_string_equal(tok, "value");
assert_int_equal(*p, '\0');
/* correctly parses even key=value pairs with either one in quotes */
@@ -1067,9 +1129,53 @@ static void torture_config_parser_get_token(void **state)
assert_int_equal(*p, '\"');
tok = ssh_config_get_token(&p);
assert_string_equal(tok, "value with spaces");
- assert_int_equal(*p, ' ');
+ assert_int_equal(*p, '\0');
+
+ strncpy(data, " key=\"value with spaces\" ", sizeof(data));
+ p = data;
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "key");
+ assert_int_equal(*p, '\"');
tok = ssh_config_get_token(&p);
- assert_string_equal(tok, "\0");
+ assert_string_equal(tok, "value with spaces");
+ assert_int_equal(*p, '\0');
+
+ /* Only one equal sign is allowed */
+ strncpy(data, "key==value\n", sizeof(data));
+ p = data;
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "key");
+ assert_int_equal(*p, '=');
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "");
+ assert_int_equal(*p, 'v');
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "value");
+ assert_int_equal(*p, '\0');
+
+ strncpy(data, "key==value", sizeof(data));
+ p = data;
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "key");
+ assert_int_equal(*p, '=');
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "");
+ assert_int_equal(*p, 'v');
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "value");
+ assert_int_equal(*p, '\0');
+
+ /* Unmatched quotes */
+ strncpy(data, " \"value\n", sizeof(data));
+ p = data;
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "value");
+ assert_int_equal(*p, '\0');
+
+ strncpy(data, " \"value", sizeof(data));
+ p = data;
+ tok = ssh_config_get_token(&p);
+ assert_string_equal(tok, "value");
assert_int_equal(*p, '\0');
}