#include "lib/test.h"
#define CHECK_SA(sa, _port, ...) { \
CHECK(sa.is_inet4()); \
CHECK(sa.port() == _port); \
unsigned char tmp[4] = __VA_ARGS__; \
CHECK(memcmp(&sa.addr(), tmp, 4) == 0); \
}
TEST_CASE("inet4") {
SECTION("from ip") {
SockAddr::Inet4 sa("1.2.3.4", 80);
CHECK_SA(sa, 80, {1,2,3,4});
CHECK(sa.ip() == "1.2.3.4");
}
SECTION("from addr") {
SockAddr::Inet4 tmp("1.1.3.3", 80);
SockAddr::Inet4 sa(tmp.addr(), 400);
CHECK_SA(sa, 400, {1,1,3,3});
CHECK(sa.ip() == "1.1.3.3");
}
SECTION("from sockaddr_in") {
SockAddr::Inet4 tmp("255.255.255.255", 65535);
SockAddr::Inet4 sa(tmp.get());
CHECK_SA(sa, 65535, {255,255,255,255});
CHECK(sa.ip() == "255.255.255.255");
}
SECTION("invalid ip") {
CHECK_THROWS(SockAddr::Inet4("123.123.123", 0));
}
SECTION("==") {
CHECK(SockAddr::Inet4("1.2.3.4", 80) == SockAddr::Inet4("1.2.3.4", 80));
CHECK(SockAddr::Inet4("1.2.3.4", 80) != SockAddr::Inet4("1.2.3.4", 81));
CHECK(SockAddr::Inet4("1.2.3.4", 80) != SockAddr::Inet4("1.2.3.5", 80));
}
}