LCOV - code coverage report
Current view: top level - test - test-io-util.c (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 31 31 100.0 %
Date: 2019-08-23 13:36:53 Functions: 3 3 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 9 18 50.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: LGPL-2.1+ */
       2                 :            : 
       3                 :            : #include <fcntl.h>
       4                 :            : #include <stdlib.h>
       5                 :            : #include <unistd.h>
       6                 :            : 
       7                 :            : #include "alloc-util.h"
       8                 :            : #include "fd-util.h"
       9                 :            : #include "io-util.h"
      10                 :            : #include "macro.h"
      11                 :            : 
      12                 :         20 : static void test_sparse_write_one(int fd, const char *buffer, size_t n) {
      13                 :         20 :         char check[n];
      14                 :            : 
      15         [ -  + ]:         20 :         assert_se(lseek(fd, 0, SEEK_SET) == 0);
      16         [ -  + ]:         20 :         assert_se(ftruncate(fd, 0) >= 0);
      17         [ -  + ]:         20 :         assert_se(sparse_write(fd, buffer, n, 4) == (ssize_t) n);
      18                 :            : 
      19         [ -  + ]:         20 :         assert_se(lseek(fd, 0, SEEK_CUR) == (off_t) n);
      20         [ -  + ]:         20 :         assert_se(ftruncate(fd, n) >= 0);
      21                 :            : 
      22         [ -  + ]:         20 :         assert_se(lseek(fd, 0, SEEK_SET) == 0);
      23         [ -  + ]:         20 :         assert_se(read(fd, check, n) == (ssize_t) n);
      24                 :            : 
      25         [ -  + ]:         20 :         assert_se(memcmp(buffer, check, n) == 0);
      26                 :         20 : }
      27                 :            : 
      28                 :          4 : static void test_sparse_write(void) {
      29                 :          4 :         const char test_a[] = "test";
      30                 :          4 :         const char test_b[] = "\0\0\0\0test\0\0\0\0";
      31                 :          4 :         const char test_c[] = "\0\0test\0\0\0\0";
      32                 :          4 :         const char test_d[] = "\0\0test\0\0\0test\0\0\0\0test\0\0\0\0\0test\0\0\0test\0\0\0\0test\0\0\0\0\0\0\0\0";
      33                 :          4 :         const char test_e[] = "test\0\0\0\0test";
      34                 :          4 :         _cleanup_close_ int fd = -1;
      35                 :          4 :         char fn[] = "/tmp/sparseXXXXXX";
      36                 :            : 
      37                 :          4 :         fd = mkostemp(fn, O_CLOEXEC);
      38         [ -  + ]:          4 :         assert_se(fd >= 0);
      39                 :          4 :         unlink(fn);
      40                 :            : 
      41                 :          4 :         test_sparse_write_one(fd, test_a, sizeof(test_a));
      42                 :          4 :         test_sparse_write_one(fd, test_b, sizeof(test_b));
      43                 :          4 :         test_sparse_write_one(fd, test_c, sizeof(test_c));
      44                 :          4 :         test_sparse_write_one(fd, test_d, sizeof(test_d));
      45                 :          4 :         test_sparse_write_one(fd, test_e, sizeof(test_e));
      46                 :          4 : }
      47                 :            : 
      48                 :          4 : int main(void) {
      49                 :          4 :         test_sparse_write();
      50                 :            : 
      51                 :          4 :         return 0;
      52                 :            : }

Generated by: LCOV version 1.14