LCOV - code coverage report
Current view: top level - libsystemd/sd-device - test-sd-device.c (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 86 87 98.9 %
Date: 2019-08-23 13:36:53 Functions: 6 6 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 82 130 63.1 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: LGPL-2.1+ */
       2                 :            : 
       3                 :            : #include "device-enumerator-private.h"
       4                 :            : #include "device-private.h"
       5                 :            : #include "device-util.h"
       6                 :            : #include "hashmap.h"
       7                 :            : #include "string-util.h"
       8                 :            : #include "tests.h"
       9                 :            : #include "time-util.h"
      10                 :            : 
      11                 :       4400 : static void test_sd_device_one(sd_device *d) {
      12                 :            :         const char *syspath, *subsystem, *val;
      13                 :            :         dev_t devnum;
      14                 :            :         usec_t usec;
      15                 :            :         int i, r;
      16                 :            : 
      17         [ -  + ]:       4400 :         assert_se(sd_device_get_syspath(d, &syspath) >= 0);
      18                 :            : 
      19                 :       4400 :         r = sd_device_get_subsystem(d, &subsystem);
      20   [ -  +  #  # ]:       4400 :         assert_se(r >= 0 || r == -ENOENT);
      21                 :            : 
      22                 :       4400 :         r = sd_device_get_devtype(d, &val);
      23   [ +  +  -  + ]:       4400 :         assert_se(r >= 0 || r == -ENOENT);
      24                 :            : 
      25                 :       4400 :         r = sd_device_get_devnum(d, &devnum);
      26   [ +  +  -  +  :       4400 :         assert_se((r >= 0 && major(devnum) > 0) || r == -ENOENT);
             +  +  -  + ]
      27                 :            : 
      28                 :       4400 :         r = sd_device_get_ifindex(d, &i);
      29   [ +  +  -  +  :       4400 :         assert_se((r >= 0 && i > 0) || r == -ENOENT);
             +  +  -  + ]
      30                 :            : 
      31                 :       4400 :         r = sd_device_get_driver(d, &val);
      32   [ +  +  -  + ]:       4400 :         assert_se(r >= 0 || r == -ENOENT);
      33                 :            : 
      34         [ -  + ]:       4400 :         assert_se(sd_device_get_devpath(d, &val) >= 0);
      35                 :            : 
      36                 :       4400 :         r = sd_device_get_devname(d, &val);
      37   [ +  +  -  + ]:       4400 :         assert_se(r >= 0 || r == -ENOENT);
      38                 :            : 
      39         [ -  + ]:       4400 :         assert_se(sd_device_get_sysname(d, &val) >= 0);
      40                 :            : 
      41                 :       4400 :         r = sd_device_get_sysnum(d, &val);
      42   [ +  +  -  + ]:       4400 :         assert_se(r >= 0 || r == -ENOENT);
      43                 :            : 
      44                 :       4400 :         i = sd_device_get_is_initialized(d);
      45         [ -  + ]:       4400 :         assert_se(i >= 0);
      46         [ +  + ]:       4400 :         if (i > 0) {
      47                 :       1452 :                 r = sd_device_get_usec_since_initialized(d, &usec);
      48   [ +  +  -  +  :       1452 :                 assert_se((r >= 0 && usec > 0) || r == -ENODATA);
             +  +  -  + ]
      49                 :            :         }
      50                 :            : 
      51                 :       4400 :         r = sd_device_get_sysattr_value(d, "name_assign_type", &val);
      52   [ +  +  +  -  :       4400 :         assert_se(r >= 0 || IN_SET(r, -ENOENT, -EINVAL));
                   -  + ]
      53                 :            : 
      54                 :       4400 :         r = sd_device_get_property_value(d, "ID_NET_DRIVER", &val);
      55   [ +  +  -  + ]:       4400 :         assert_se(r >= 0 || r == -ENOENT);
      56                 :            : 
      57         [ +  - ]:       4400 :         log_info("syspath:%s subsystem:%s initialized:%s", syspath, strna(subsystem), yes_no(i));
      58                 :       4400 : }
      59                 :            : 
      60                 :          4 : static void test_sd_device_enumerator_devices(void) {
      61                 :          4 :         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
      62                 :            :         sd_device *d;
      63                 :            : 
      64         [ +  - ]:          4 :         log_info("/* %s */", __func__);
      65                 :            : 
      66         [ -  + ]:          4 :         assert_se(sd_device_enumerator_new(&e) >= 0);
      67         [ -  + ]:          4 :         assert_se(sd_device_enumerator_allow_uninitialized(e) >= 0);
      68         [ +  + ]:       2860 :         FOREACH_DEVICE(e, d)
      69                 :       2856 :                 test_sd_device_one(d);
      70                 :          4 : }
      71                 :            : 
      72                 :          4 : static void test_sd_device_enumerator_subsystems(void) {
      73                 :          4 :         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
      74                 :            :         sd_device *d;
      75                 :            : 
      76         [ +  - ]:          4 :         log_info("/* %s */", __func__);
      77                 :            : 
      78         [ -  + ]:          4 :         assert_se(sd_device_enumerator_new(&e) >= 0);
      79         [ -  + ]:          4 :         assert_se(sd_device_enumerator_allow_uninitialized(e) >= 0);
      80         [ +  + ]:       1548 :         FOREACH_SUBSYSTEM(e, d)
      81                 :       1544 :                 test_sd_device_one(d);
      82                 :          4 : }
      83                 :            : 
      84                 :        288 : static void test_sd_device_enumerator_filter_subsystem_one(const char *subsystem, Hashmap *h) {
      85                 :        288 :         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
      86                 :            :         sd_device *d, *t;
      87                 :            : 
      88         [ -  + ]:        288 :         assert_se(sd_device_enumerator_new(&e) >= 0);
      89         [ -  + ]:        288 :         assert_se(sd_device_enumerator_add_match_subsystem(e, subsystem, true) >= 0);
      90                 :            : 
      91         [ +  + ]:       3144 :         FOREACH_DEVICE(e, d) {
      92                 :            :                 const char *syspath;
      93                 :            : 
      94         [ -  + ]:       2856 :                 assert_se(sd_device_get_syspath(d, &syspath) >= 0);
      95         [ -  + ]:       2856 :                 assert_se(t = hashmap_remove(h, syspath));
      96         [ -  + ]:       2856 :                 assert_se(!sd_device_unref(t));
      97                 :            : 
      98         [ -  + ]:       2856 :                 log_debug("Removed subsystem:%s syspath:%s", subsystem, syspath);
      99                 :            :         }
     100                 :            : 
     101         [ -  + ]:        288 :         assert_se(hashmap_isempty(h));
     102                 :        288 : }
     103                 :            : 
     104                 :          4 : static void test_sd_device_enumerator_filter_subsystem(void) {
     105                 :          4 :         _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
     106                 :          4 :         _cleanup_(hashmap_freep) Hashmap *subsystems;
     107                 :            :         sd_device *d;
     108                 :            :         Hashmap *h;
     109                 :            :         char *s;
     110                 :            : 
     111         [ +  - ]:          4 :         log_info("/* %s */", __func__);
     112                 :            : 
     113         [ -  + ]:          4 :         assert_se(subsystems = hashmap_new(&string_hash_ops));
     114         [ -  + ]:          4 :         assert_se(sd_device_enumerator_new(&e) >= 0);
     115                 :            : 
     116         [ +  + ]:       2860 :         FOREACH_DEVICE(e, d) {
     117                 :            :                 const char *syspath, *subsystem;
     118                 :            :                 int r;
     119                 :            : 
     120         [ -  + ]:       2856 :                 assert_se(sd_device_get_syspath(d, &syspath) >= 0);
     121                 :            : 
     122                 :       2856 :                 r = sd_device_get_subsystem(d, &subsystem);
     123   [ -  +  #  # ]:       2856 :                 assert_se(r >= 0 || r == -ENOENT);
     124         [ -  + ]:       2856 :                 if (r < 0)
     125                 :          0 :                         continue;
     126                 :            : 
     127                 :       2856 :                 h = hashmap_get(subsystems, subsystem);
     128         [ +  + ]:       2856 :                 if (!h) {
     129                 :            :                         char *str;
     130         [ -  + ]:        288 :                         assert_se(str = strdup(subsystem));
     131         [ -  + ]:        288 :                         assert_se(h = hashmap_new(&string_hash_ops));
     132         [ -  + ]:        288 :                         assert_se(hashmap_put(subsystems, str, h) >= 0);
     133                 :            :                 }
     134                 :            : 
     135         [ -  + ]:       2856 :                 assert_se(hashmap_put(h, syspath, d) >= 0);
     136         [ -  + ]:       2856 :                 assert_se(sd_device_ref(d));
     137                 :            : 
     138         [ -  + ]:       2856 :                 log_debug("Added subsystem:%s syspath:%s", subsystem, syspath);
     139                 :            :         }
     140                 :            : 
     141         [ +  + ]:        292 :         while ((h = hashmap_steal_first_key_and_value(subsystems, (void**) &s))) {
     142                 :        288 :                 test_sd_device_enumerator_filter_subsystem_one(s, h);
     143                 :        288 :                 hashmap_free(h);
     144                 :        288 :                 free(s);
     145                 :            :         }
     146                 :          4 : }
     147                 :            : 
     148                 :          4 : int main(int argc, char **argv) {
     149                 :          4 :         test_setup_logging(LOG_INFO);
     150                 :            : 
     151                 :          4 :         test_sd_device_enumerator_devices();
     152                 :          4 :         test_sd_device_enumerator_subsystems();
     153                 :          4 :         test_sd_device_enumerator_filter_subsystem();
     154                 :            : 
     155                 :          4 :         return 0;
     156                 :            : }

Generated by: LCOV version 1.14