#import #import "TestUtil.h" #import "IpAddress.h" @interface IpAddressTest : XCTestCase @end @implementation IpAddressTest -(void) testFromString { testThrows([IpAddress ipAddressFromString:nil]); testThrows([IpAddress ipAddressFromString:@""]); testThrows([IpAddress ipAddressFromString:@"^"]); testThrows([IpAddress ipAddressFromString:@"127.6.5"]); testThrows([IpAddress ipAddressFromString:@"127.6.5.8:80"]); testThrows([IpAddress ipAddressFromString:@"2:5"]); testThrows([IpAddress ipAddressFromString:@"256.256.256.256"]); testThrows([IpAddress ipAddressFromString:@"0db8:85a3:0000:0000:8a2e:0370:7334"]); testThrows([IpAddress ipAddressFromString:@"AAAA:2001:0db8:85a3:0000:0000:8a2e:0370:7334"]); [IpAddress ipAddressFromString:@"127.0.0.1"]; [IpAddress ipAddressFromString:@"255.255.255.255"]; [IpAddress ipAddressFromString:@"0.0.0.0"]; [IpAddress ipAddressFromString:@"ab01::"]; [IpAddress ipAddressFromString:@"AB01::"]; [IpAddress ipAddressFromString:@"::AB01"]; [IpAddress ipAddressFromString:@"AB01::1001"]; [IpAddress ipAddressFromString:@"2001:0db8:85a3:0000:0000:8a2e:0370:7334"]; } -(void) testFromIpv4String { testThrows([IpAddress ipv4AddressFromString:nil]); testThrows([IpAddress ipv4AddressFromString:@""]); testThrows([IpAddress ipv4AddressFromString:@"^"]); testThrows([IpAddress ipv4AddressFromString:@"127.6.5"]); testThrows([IpAddress ipv4AddressFromString:@"127.6.5.8:80"]); testThrows([IpAddress ipv4AddressFromString:@"2:5"]); testThrows([IpAddress ipv4AddressFromString:@"256.256.256.256"]); testThrows([IpAddress ipv4AddressFromString:@"0db8:85a3:0000:0000:8a2e:0370:7334"]); testThrows([IpAddress ipv4AddressFromString:@"AAAA:2001:0db8:85a3:0000:0000:8a2e:0370:7334"]); [IpAddress ipv4AddressFromString:@"127.0.0.1"]; [IpAddress ipv4AddressFromString:@"255.255.255.255"]; [IpAddress ipv4AddressFromString:@"0.0.0.0"]; testThrows([IpAddress ipv4AddressFromString:@"AB01::"]); testThrows([IpAddress ipv4AddressFromString:@"::AB01"]); testThrows([IpAddress ipv4AddressFromString:@"AB01::1001"]); testThrows([IpAddress ipv4AddressFromString:@"2001:0db8:85a3:0000:0000:8a2e:0370:7334"]); } -(void) testFromIpv6String { testThrows([IpAddress ipv6AddressFromString:nil]); testThrows([IpAddress ipv6AddressFromString:@""]); testThrows([IpAddress ipv6AddressFromString:@"^"]); testThrows([IpAddress ipv6AddressFromString:@"127.6.5"]); testThrows([IpAddress ipv6AddressFromString:@"127.6.5.8:80"]); testThrows([IpAddress ipv6AddressFromString:@"2:5"]); testThrows([IpAddress ipv6AddressFromString:@"256.256.256.256"]); testThrows([IpAddress ipv6AddressFromString:@"0db8:85a3:0000:0000:8a2e:0370:7336"]); testThrows([IpAddress ipv6AddressFromString:@"AAAA:2001:0db8:85a3:0000:0000:8a2e:0370:7336"]); testThrows([IpAddress ipv6AddressFromString:@"127.0.0.1"]); testThrows([IpAddress ipv6AddressFromString:@"255.255.255.255"]); testThrows([IpAddress ipv6AddressFromString:@"0.0.0.0"]); [IpAddress ipv6AddressFromString:@"AB01::"]; [IpAddress ipv6AddressFromString:@"ab01::"]; [IpAddress ipv6AddressFromString:@"::AB01"]; [IpAddress ipv6AddressFromString:@"AB01::1001"]; [IpAddress ipv6AddressFromString:@"2001:0db8:85a3:0000:0000:8a2e:0370:7334"]; } -(void) testDescription { for (NSString* s in @[@"4.5.6.7", @"abcd:cdef:85a3:1234:2345:8a2e:6789:7334"]) { test([[[IpAddress ipAddressFromString:s] description] isEqualToString:s]); } } -(void) testSockaddrDataIpv4 { NSData* d = [[IpAddress ipAddressFromString:@"4.5.6.7"] sockaddrDataWithPort:5]; struct sockaddr_in s; test([d length] >= sizeof(struct sockaddr_in)); memcpy(&s, [d bytes], sizeof(struct sockaddr_in)); test(s.sin_port == ntohs(5)); test(s.sin_family == AF_INET); test(s.sin_addr.s_addr == 0x07060504); } -(void) testSockaddrDataIpv6 { NSData* d = [[IpAddress ipAddressFromString:@"2001:0db8:85a3:0000:0000:8a2e:0370:7334"] sockaddrDataWithPort:5]; struct sockaddr_in6 s; test([d length] >= sizeof(struct sockaddr_in6)); memcpy(&s, [d bytes], sizeof(struct sockaddr_in6)); test(s.sin6_port == ntohs(5)); test(s.sin6_family == AF_INET6); uint16_t* x = s.sin6_addr.__u6_addr.__u6_addr16; test(x[0] == ntohs(0x2001)); test(x[1] == ntohs(0x0db8)); test(x[2] == ntohs(0x85a3)); test(x[3] == 0); test(x[4] == 0); test(x[5] == ntohs(0x8a2e)); test(x[6] == ntohs(0x0370)); test(x[7] == ntohs(0x7334)); } @end