summaryrefslogtreecommitdiff
path: root/src/test/test-fileio.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2020-11-04 20:25:06 +0100
committerLennart Poettering <lennart@poettering.net>2020-12-01 14:17:47 +0100
commit986311c2da873ea24ee05e59e97c60f5584e4226 (patch)
treeee3b18bb41646542c450d0ae55792cc38a1fc7a0 /src/test/test-fileio.c
parentc61f46fe3142e8b2fee48c845339bd82e29df085 (diff)
downloadsystemd-986311c2da873ea24ee05e59e97c60f5584e4226.tar.gz
fileio: teach read_full_file_full() to read from offset/with maximum size
Diffstat (limited to 'src/test/test-fileio.c')
-rw-r--r--src/test/test-fileio.c49
1 files changed, 47 insertions, 2 deletions
diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
index 431aea07ef..a5834eba36 100644
--- a/src/test/test-fileio.c
+++ b/src/test/test-fileio.c
@@ -911,8 +911,8 @@ static void test_read_full_file_socket(void) {
_exit(EXIT_SUCCESS);
}
- assert_se(read_full_file_full(AT_FDCWD, j, 0, NULL, &data, &size) == -ENXIO);
- assert_se(read_full_file_full(AT_FDCWD, j, READ_FULL_FILE_CONNECT_SOCKET, clientname, &data, &size) >= 0);
+ assert_se(read_full_file_full(AT_FDCWD, j, UINT64_MAX, SIZE_MAX, 0, NULL, &data, &size) == -ENXIO);
+ assert_se(read_full_file_full(AT_FDCWD, j, UINT64_MAX, SIZE_MAX, READ_FULL_FILE_CONNECT_SOCKET, clientname, &data, &size) >= 0);
assert_se(size == strlen(TEST_STR));
assert_se(streq(data, TEST_STR));
@@ -920,6 +920,50 @@ static void test_read_full_file_socket(void) {
#undef TEST_STR
}
+static void test_read_full_file_offset_size(void) {
+ _cleanup_fclose_ FILE *f = NULL;
+ _cleanup_(unlink_and_freep) char *fn = NULL;
+ _cleanup_free_ char *rbuf = NULL;
+ size_t rbuf_size;
+ uint8_t buf[4711];
+
+ random_bytes(buf, sizeof(buf));
+
+ assert_se(tempfn_random_child(NULL, NULL, &fn) >= 0);
+ assert_se(f = fopen(fn, "we"));
+ assert_se(fwrite(buf, 1, sizeof(buf), f) == sizeof(buf));
+ assert_se(fflush_and_check(f) >= 0);
+
+ assert_se(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, SIZE_MAX, 0, NULL, &rbuf, &rbuf_size) >= 0);
+ assert_se(rbuf_size == sizeof(buf));
+ assert_se(memcmp(buf, rbuf, rbuf_size) == 0);
+ rbuf = mfree(rbuf);
+
+ assert_se(read_full_file_full(AT_FDCWD, fn, UINT64_MAX, 128, 0, NULL, &rbuf, &rbuf_size) >= 0);
+ assert_se(rbuf_size == 128);
+ assert_se(memcmp(buf, rbuf, rbuf_size) == 0);
+ rbuf = mfree(rbuf);
+
+ assert_se(read_full_file_full(AT_FDCWD, fn, 1234, SIZE_MAX, 0, NULL, &rbuf, &rbuf_size) >= 0);
+ assert_se(rbuf_size == sizeof(buf) - 1234);
+ assert_se(memcmp(buf + 1234, rbuf, rbuf_size) == 0);
+ rbuf = mfree(rbuf);
+
+ assert_se(read_full_file_full(AT_FDCWD, fn, 2345, 777, 0, NULL, &rbuf, &rbuf_size) >= 0);
+ assert_se(rbuf_size == 777);
+ assert_se(memcmp(buf + 2345, rbuf, rbuf_size) == 0);
+ rbuf = mfree(rbuf);
+
+ assert_se(read_full_file_full(AT_FDCWD, fn, 4700, 20, 0, NULL, &rbuf, &rbuf_size) >= 0);
+ assert_se(rbuf_size == 11);
+ assert_se(memcmp(buf + 4700, rbuf, rbuf_size) == 0);
+ rbuf = mfree(rbuf);
+
+ assert_se(read_full_file_full(AT_FDCWD, fn, 10000, 99, 0, NULL, &rbuf, &rbuf_size) >= 0);
+ assert_se(rbuf_size == 0);
+ rbuf = mfree(rbuf);
+}
+
int main(int argc, char *argv[]) {
test_setup_logging(LOG_DEBUG);
@@ -946,6 +990,7 @@ int main(int argc, char *argv[]) {
test_read_line4();
test_read_nul_string();
test_read_full_file_socket();
+ test_read_full_file_offset_size();
return 0;
}