LCOV - code coverage report
Current view: top level - libsystemd-network - test-sd-dhcp-lease.c (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 41 41 100.0 %
Date: 2019-08-23 13:36:53 Functions: 7 7 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 13 26 50.0 %

           Branch data     Line data    Source code
       1                 :            : #include <errno.h>
       2                 :            : 
       3                 :            : #include "dhcp-lease-internal.h"
       4                 :            : #include "macro.h"
       5                 :            : #include "string-util.h"
       6                 :            : #include "strv.h"
       7                 :            : 
       8                 :            : /* According to RFC1035 section 4.1.4, a domain name in a message can be either:
       9                 :            :  *      - a sequence of labels ending in a zero octet
      10                 :            :  *      - a pointer
      11                 :            :  *      - a sequence of labels ending with a pointer
      12                 :            :  */
      13                 :          4 : static void test_dhcp_lease_parse_search_domains_basic(void) {
      14                 :            :         int r;
      15                 :          4 :         _cleanup_strv_free_ char **domains = NULL;
      16                 :            :         static const uint8_t optionbuf[] = {
      17                 :            :                 0x03, 'F', 'O', 'O', 0x03, 'B', 'A', 'R', 0x00,
      18                 :            :                 0x04, 'A', 'B', 'C', 'D', 0x03, 'E', 'F', 'G', 0x00,
      19                 :            :         };
      20                 :            : 
      21                 :          4 :         r = dhcp_lease_parse_search_domains(optionbuf, sizeof(optionbuf), &domains);
      22         [ -  + ]:          4 :         assert_se(r == 2);
      23         [ -  + ]:          4 :         assert_se(streq(domains[0], "FOO.BAR"));
      24         [ -  + ]:          4 :         assert_se(streq(domains[1], "ABCD.EFG"));
      25                 :          4 : }
      26                 :            : 
      27                 :          4 : static void test_dhcp_lease_parse_search_domains_ptr(void) {
      28                 :            :         int r;
      29                 :          4 :         _cleanup_strv_free_ char **domains = NULL;
      30                 :            :         static const uint8_t optionbuf[] = {
      31                 :            :                 0x03, 'F', 'O', 'O', 0x00, 0xC0, 0x00,
      32                 :            :         };
      33                 :            : 
      34                 :          4 :         r = dhcp_lease_parse_search_domains(optionbuf, sizeof(optionbuf), &domains);
      35         [ -  + ]:          4 :         assert_se(r == 2);
      36         [ -  + ]:          4 :         assert_se(streq(domains[0], "FOO"));
      37         [ -  + ]:          4 :         assert_se(streq(domains[1], "FOO"));
      38                 :          4 : }
      39                 :            : 
      40                 :          4 : static void test_dhcp_lease_parse_search_domains_labels_and_ptr(void) {
      41                 :            :         int r;
      42                 :          4 :         _cleanup_strv_free_ char **domains = NULL;
      43                 :            :         static const uint8_t optionbuf[] = {
      44                 :            :                 0x03, 'F', 'O', 'O', 0x03, 'B', 'A', 'R', 0x00,
      45                 :            :                 0x03, 'A', 'B', 'C', 0xC0, 0x04,
      46                 :            :         };
      47                 :            : 
      48                 :          4 :         r = dhcp_lease_parse_search_domains(optionbuf, sizeof(optionbuf), &domains);
      49         [ -  + ]:          4 :         assert_se(r == 2);
      50         [ -  + ]:          4 :         assert_se(streq(domains[0], "FOO.BAR"));
      51         [ -  + ]:          4 :         assert_se(streq(domains[1], "ABC.BAR"));
      52                 :          4 : }
      53                 :            : 
      54                 :            : /* Tests for exceptions. */
      55                 :            : 
      56                 :          4 : static void test_dhcp_lease_parse_search_domains_no_data(void) {
      57                 :          4 :         _cleanup_strv_free_ char **domains = NULL;
      58                 :            :         static const uint8_t optionbuf[3] = {0, 0, 0};
      59                 :            : 
      60         [ -  + ]:          4 :         assert_se(dhcp_lease_parse_search_domains(NULL, 0, &domains) == -ENODATA);
      61         [ -  + ]:          4 :         assert_se(dhcp_lease_parse_search_domains(optionbuf, 0, &domains) == -ENODATA);
      62                 :          4 : }
      63                 :            : 
      64                 :          4 : static void test_dhcp_lease_parse_search_domains_loops(void) {
      65                 :          4 :         _cleanup_strv_free_ char **domains = NULL;
      66                 :            :         static const uint8_t optionbuf[] = {
      67                 :            :                 0x03, 'F', 'O', 'O', 0x00, 0x03, 'B', 'A', 'R', 0xC0, 0x06,
      68                 :            :         };
      69                 :            : 
      70         [ -  + ]:          4 :         assert_se(dhcp_lease_parse_search_domains(optionbuf, sizeof(optionbuf), &domains) == -EBADMSG);
      71                 :          4 : }
      72                 :            : 
      73                 :          4 : static void test_dhcp_lease_parse_search_domains_wrong_len(void) {
      74                 :          4 :         _cleanup_strv_free_ char **domains = NULL;
      75                 :            :         static const uint8_t optionbuf[] = {
      76                 :            :                 0x03, 'F', 'O', 'O', 0x03, 'B', 'A', 'R', 0x00,
      77                 :            :                 0x04, 'A', 'B', 'C', 'D', 0x03, 'E', 'F', 'G', 0x00,
      78                 :            :         };
      79                 :            : 
      80         [ -  + ]:          4 :         assert_se(dhcp_lease_parse_search_domains(optionbuf, sizeof(optionbuf) - 5, &domains) == -EBADMSG);
      81                 :          4 : }
      82                 :            : 
      83                 :          4 : int main(int argc, char *argv[]) {
      84                 :          4 :         test_dhcp_lease_parse_search_domains_basic();
      85                 :          4 :         test_dhcp_lease_parse_search_domains_ptr();
      86                 :          4 :         test_dhcp_lease_parse_search_domains_labels_and_ptr();
      87                 :          4 :         test_dhcp_lease_parse_search_domains_no_data();
      88                 :          4 :         test_dhcp_lease_parse_search_domains_loops();
      89                 :          4 :         test_dhcp_lease_parse_search_domains_wrong_len();
      90                 :            : }

Generated by: LCOV version 1.14