You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.3 KiB
105 lines
3.3 KiB
From 4a0e2c447eeac47eaa497a2db6925590b3cec3bd Mon Sep 17 00:00:00 2001 |
|
From: Jan Synacek <jsynacek@redhat.com> |
|
Date: Thu, 23 Nov 2017 11:42:05 +0100 |
|
Subject: [PATCH] test-fileio: also test read_line() with actual files |
|
|
|
Just in case the real FILE and the one from fmemopen weren't exactly |
|
the same. |
|
|
|
(cherry picked from commit 2c9de13912350f5887ccccdae9e1707512208053) |
|
|
|
Resolves: #1503106 |
|
--- |
|
src/test/test-fileio.c | 63 ++++++++++++++++++++++++++++++++++++++++---------- |
|
1 file changed, 51 insertions(+), 12 deletions(-) |
|
|
|
diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c |
|
index fc5969322..791bfc97b 100644 |
|
--- a/src/test/test-fileio.c |
|
+++ b/src/test/test-fileio.c |
|
@@ -392,20 +392,17 @@ static void test_load_env_file_pairs(void) { |
|
unlink(fn); |
|
} |
|
|
|
-static void test_read_line(void) { |
|
- _cleanup_fclose_ FILE *f = NULL; |
|
- _cleanup_free_ char *line = NULL; |
|
|
|
- char buffer[] = |
|
- "Some test data\n" |
|
- "With newlines, and a NUL byte\0" |
|
- "\n" |
|
- "an empty line\n" |
|
- "an ignored line\n" |
|
- "and a very long line that is supposed to be truncated, because it is so long\n"; |
|
+static const char buffer[] = |
|
+ "Some test data\n" |
|
+ "With newlines, and a NUL byte\0" |
|
+ "\n" |
|
+ "an empty line\n" |
|
+ "an ignored line\n" |
|
+ "and a very long line that is supposed to be truncated, because it is so long\n"; |
|
|
|
- f = fmemopen(buffer, sizeof(buffer), "re"); |
|
- assert_se(f); |
|
+static void test_read_line_one_file(FILE *f) { |
|
+ _cleanup_free_ char *line = NULL; |
|
|
|
assert_se(read_line(f, (size_t) -1, &line) == 15 && streq(line, "Some test data")); |
|
line = mfree(line); |
|
@@ -435,6 +432,46 @@ static void test_read_line(void) { |
|
assert_se(read_line(f, 1024, &line) == 0 && streq(line, "")); |
|
} |
|
|
|
+static void test_read_line(void) { |
|
+ _cleanup_fclose_ FILE *f = NULL; |
|
+ _cleanup_free_ char *line = NULL; |
|
+ |
|
+ f = fmemopen((void*) buffer, sizeof(buffer), "re"); |
|
+ assert_se(f); |
|
+ |
|
+ test_read_line_one_file(f); |
|
+} |
|
+ |
|
+static void test_read_line2(void) { |
|
+ char name[] = "/tmp/test-fileio.XXXXXX"; |
|
+ int fd; |
|
+ _cleanup_fclose_ FILE *f = NULL; |
|
+ |
|
+ fd = mkostemp_safe(name, O_CLOEXEC); |
|
+ assert_se(fd >= 0); |
|
+ assert_se((size_t) write(fd, buffer, sizeof(buffer)) == sizeof(buffer)); |
|
+ |
|
+ assert_se(lseek(fd, 0, SEEK_SET) == 0); |
|
+ assert_se(f = fdopen(fd, "r")); |
|
+ |
|
+ test_read_line_one_file(f); |
|
+} |
|
+ |
|
+static void test_read_line3(void) { |
|
+ _cleanup_fclose_ FILE *f = NULL; |
|
+ _cleanup_free_ char *line = NULL; |
|
+ int r; |
|
+ |
|
+ f = fopen("/proc/cmdline", "re"); |
|
+ if (!f && IN_SET(errno, ENOENT, EPERM)) |
|
+ return; |
|
+ assert_se(f); |
|
+ |
|
+ r = read_line(f, LINE_MAX, &line); |
|
+ assert_se((size_t) r == strlen(line) + 1); |
|
+ assert_se(read_line(f, LINE_MAX, NULL) == 0); |
|
+} |
|
+ |
|
int main(int argc, char *argv[]) { |
|
log_parse_environment(); |
|
log_open(); |
|
@@ -449,6 +486,8 @@ int main(int argc, char *argv[]) { |
|
test_write_string_file_no_create(); |
|
test_load_env_file_pairs(); |
|
test_read_line(); |
|
+ test_read_line2(); |
|
+ test_read_line3(); |
|
|
|
return 0; |
|
}
|
|
|