|
@@ -5287,6 +5287,73 @@ test_config_include_folder_order(void *data)
|
|
|
tor_free(dir);
|
|
|
}
|
|
|
|
|
|
+static void
|
|
|
+test_config_include_blank_file_last(void *data)
|
|
|
+{
|
|
|
+ (void)data;
|
|
|
+
|
|
|
+ config_line_t *result = NULL;
|
|
|
+ char *torrcd = NULL;
|
|
|
+ char *path = NULL;
|
|
|
+ char *dir = tor_strdup(get_fname("test_include_blank_file_last"));
|
|
|
+ tt_ptr_op(dir, OP_NE, NULL);
|
|
|
+
|
|
|
+#ifdef _WIN32
|
|
|
+ tt_int_op(mkdir(dir), OP_EQ, 0);
|
|
|
+#else
|
|
|
+ tt_int_op(mkdir(dir, 0700), OP_EQ, 0);
|
|
|
+#endif
|
|
|
+
|
|
|
+ tor_asprintf(&torrcd, "%s"PATH_SEPARATOR"%s", dir, "torrc.d");
|
|
|
+
|
|
|
+#ifdef _WIN32
|
|
|
+ tt_int_op(mkdir(torrcd), OP_EQ, 0);
|
|
|
+#else
|
|
|
+ tt_int_op(mkdir(torrcd, 0700), OP_EQ, 0);
|
|
|
+#endif
|
|
|
+
|
|
|
+ tor_asprintf(&path, "%s"PATH_SEPARATOR"%s", torrcd, "aa_1st");
|
|
|
+ tt_int_op(write_str_to_file(path, "Test 1\n", 0), OP_EQ, 0);
|
|
|
+ tor_free(path);
|
|
|
+
|
|
|
+ tor_asprintf(&path, "%s"PATH_SEPARATOR"%s", torrcd, "bb_2nd");
|
|
|
+ tt_int_op(write_str_to_file(path, "Test 2\n", 0), OP_EQ, 0);
|
|
|
+ tor_free(path);
|
|
|
+
|
|
|
+ tor_asprintf(&path, "%s"PATH_SEPARATOR"%s", torrcd, "cc_comment");
|
|
|
+ tt_int_op(write_str_to_file(path, "# comment only\n", 0), OP_EQ, 0);
|
|
|
+ tor_free(path);
|
|
|
+
|
|
|
+ char torrc_contents[1000];
|
|
|
+ tor_snprintf(torrc_contents, sizeof(torrc_contents),
|
|
|
+ "%%include %s\n"
|
|
|
+ "Test 3\n",
|
|
|
+ torrcd);
|
|
|
+
|
|
|
+ int include_used;
|
|
|
+ tt_int_op(config_get_lines_include(torrc_contents, &result, 0, &include_used,
|
|
|
+ NULL), OP_EQ, 0);
|
|
|
+ tt_ptr_op(result, OP_NE, NULL);
|
|
|
+ tt_int_op(include_used, OP_EQ, 1);
|
|
|
+
|
|
|
+ int len = 0;
|
|
|
+ config_line_t *next;
|
|
|
+ for (next = result; next != NULL; next = next->next) {
|
|
|
+ char expected[10];
|
|
|
+ tor_snprintf(expected, sizeof(expected), "%d", len + 1);
|
|
|
+ tt_str_op(next->key, OP_EQ, "Test");
|
|
|
+ tt_str_op(next->value, OP_EQ, expected);
|
|
|
+ len++;
|
|
|
+ }
|
|
|
+ tt_int_op(len, OP_EQ, 3);
|
|
|
+
|
|
|
+ done:
|
|
|
+ config_free_lines(result);
|
|
|
+ tor_free(torrcd);
|
|
|
+ tor_free(path);
|
|
|
+ tor_free(dir);
|
|
|
+}
|
|
|
+
|
|
|
static void
|
|
|
test_config_include_path_syntax(void *data)
|
|
|
{
|
|
@@ -5927,6 +5994,7 @@ struct testcase_t config_tests[] = {
|
|
|
CONFIG_TEST(include_recursion_before_after, 0),
|
|
|
CONFIG_TEST(include_recursion_after_only, 0),
|
|
|
CONFIG_TEST(include_folder_order, 0),
|
|
|
+ CONFIG_TEST(include_blank_file_last, 0),
|
|
|
CONFIG_TEST(include_path_syntax, 0),
|
|
|
CONFIG_TEST(include_not_processed, 0),
|
|
|
CONFIG_TEST(include_has_include, 0),
|