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 }