socket-util.c

Socket helper utils
git clone git://git.finwo.net/lib/socket-util.c
Log | Files | Refs | README | LICENSE

sockaddr_equal.test.c (3398B)


      1 #include <arpa/inet.h>
      2 #include <netinet/in.h>
      3 #include <stdlib.h>
      4 #include <string.h>
      5 #include "socket-util.h"
      6 #include "test.h"
      7 
      8 void test_sockaddr_equal_ipv4_same() {
      9     struct sockaddr_in a, b;
     10     memset(&a, 0, sizeof(a));
     11     memset(&b, 0, sizeof(b));
     12 
     13     a.sin_family = AF_INET;
     14     inet_pton(AF_INET, "192.168.1.1", &a.sin_addr);
     15     a.sin_port = htons(8080);
     16 
     17     b.sin_family = AF_INET;
     18     inet_pton(AF_INET, "192.168.1.1", &b.sin_addr);
     19     b.sin_port = htons(8080);
     20 
     21     ASSERT("ipv4 same", sockaddr_equal((struct sockaddr *)&a, (struct sockaddr *)&b) == 1);
     22 }
     23 
     24 void test_sockaddr_equal_ipv4_different_ip() {
     25     struct sockaddr_in a, b;
     26     memset(&a, 0, sizeof(a));
     27     memset(&b, 0, sizeof(b));
     28 
     29     a.sin_family = AF_INET;
     30     inet_pton(AF_INET, "192.168.1.1", &a.sin_addr);
     31     a.sin_port = htons(8080);
     32 
     33     b.sin_family = AF_INET;
     34     inet_pton(AF_INET, "192.168.1.2", &b.sin_addr);
     35     b.sin_port = htons(8080);
     36 
     37     ASSERT("ipv4 different ip", sockaddr_equal((struct sockaddr *)&a, (struct sockaddr *)&b) == 0);
     38 }
     39 
     40 void test_sockaddr_equal_ipv4_different_port() {
     41     struct sockaddr_in a, b;
     42     memset(&a, 0, sizeof(a));
     43     memset(&b, 0, sizeof(b));
     44 
     45     a.sin_family = AF_INET;
     46     inet_pton(AF_INET, "192.168.1.1", &a.sin_addr);
     47     a.sin_port = htons(8080);
     48 
     49     b.sin_family = AF_INET;
     50     inet_pton(AF_INET, "192.168.1.1", &b.sin_addr);
     51     b.sin_port = htons(8081);
     52 
     53     ASSERT("ipv4 different port", sockaddr_equal((struct sockaddr *)&a, (struct sockaddr *)&b) == 0);
     54 }
     55 
     56 void test_sockaddr_equal_ipv6_same() {
     57     struct sockaddr_in6 a, b;
     58     memset(&a, 0, sizeof(a));
     59     memset(&b, 0, sizeof(b));
     60 
     61     a.sin6_family = AF_INET6;
     62     inet_pton(AF_INET6, "::1", &a.sin6_addr);
     63     a.sin6_port = htons(3000);
     64 
     65     b.sin6_family = AF_INET6;
     66     inet_pton(AF_INET6, "::1", &b.sin6_addr);
     67     b.sin6_port = htons(3000);
     68 
     69     ASSERT("ipv6 same", sockaddr_equal((struct sockaddr *)&a, (struct sockaddr *)&b) == 1);
     70 }
     71 
     72 void test_sockaddr_equal_ipv6_different_ip() {
     73     struct sockaddr_in6 a, b;
     74     memset(&a, 0, sizeof(a));
     75     memset(&b, 0, sizeof(b));
     76 
     77     a.sin6_family = AF_INET6;
     78     inet_pton(AF_INET6, "::1", &a.sin6_addr);
     79     a.sin6_port = htons(3000);
     80 
     81     b.sin6_family = AF_INET6;
     82     inet_pton(AF_INET6, "::2", &b.sin6_addr);
     83     b.sin6_port = htons(3000);
     84 
     85     ASSERT("ipv6 different ip", sockaddr_equal((struct sockaddr *)&a, (struct sockaddr *)&b) == 0);
     86 }
     87 
     88 void test_sockaddr_equal_different_family() {
     89     struct sockaddr_in a;
     90     struct sockaddr_in6 b;
     91 
     92     memset(&a, 0, sizeof(a));
     93     memset(&b, 0, sizeof(b));
     94 
     95     a.sin_family = AF_INET;
     96     b.sin6_family = AF_INET6;
     97 
     98     ASSERT("different family", sockaddr_equal((struct sockaddr *)&a, (struct sockaddr *)&b) == 0);
     99 }
    100 
    101 void test_sockaddr_equal_null() {
    102     struct sockaddr_in a;
    103     memset(&a, 0, sizeof(a));
    104     a.sin_family = AF_INET;
    105 
    106     ASSERT("null a", sockaddr_equal(NULL, (struct sockaddr *)&a) == 0);
    107     ASSERT("null b", sockaddr_equal((struct sockaddr *)&a, NULL) == 0);
    108     ASSERT("both null", sockaddr_equal(NULL, NULL) == 0);
    109 }
    110 
    111 int main() {
    112     RUN(test_sockaddr_equal_ipv4_same);
    113     RUN(test_sockaddr_equal_ipv4_different_ip);
    114     RUN(test_sockaddr_equal_ipv4_different_port);
    115     RUN(test_sockaddr_equal_ipv6_same);
    116     RUN(test_sockaddr_equal_ipv6_different_ip);
    117     RUN(test_sockaddr_equal_different_family);
    118     RUN(test_sockaddr_equal_null);
    119     return TEST_REPORT();
    120 }