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.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2017-09-24 09:10:48 +02:00
parent 9707d55213
commit 2c9de13912

View file

@ -663,21 +663,17 @@ static void test_tempfn(void) {
free(ret);
}
static void test_read_line(void) {
_cleanup_fclose_ FILE *f = NULL;
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";
static void test_read_line_one_file(FILE *f) {
_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";
f = fmemopen(buffer, sizeof(buffer), "re");
assert_se(f);
assert_se(read_line(f, (size_t) -1, &line) == 15 && streq(line, "Some test data"));
line = mfree(line);
@ -706,6 +702,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);
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_set_max_level(LOG_DEBUG);
log_parse_environment();
@ -728,6 +764,8 @@ int main(int argc, char *argv[]) {
test_writing_tmpfile();
test_tempfn();
test_read_line();
test_read_line2();
test_read_line3();
return 0;
}