Files
esphome/tests/components/socket/test_ipv4_resolve_host.cpp
T
eb423be9d2 [socket] Add an IPv4 lookup next to set_sockaddr (#19909)
Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
Co-authored-by: J. Nick Koston <nick@koston.org>
Co-authored-by: J. Nick Koston <nick@home-assistant.io>
2026-10-01 11:36:09 -05:00

72 lines
1.9 KiB
C++

#include <gtest/gtest.h>
#include <cstring>
#include "esphome/components/socket/ipv4_resolve.h"
#ifdef USE_HOST
namespace esphome::socket::testing {
TEST(Ipv4Resolve, LiteralIsReadyWithoutDns) {
Ipv4Resolve lookup;
lookup.start("192.168.1.1", 1, "test");
EXPECT_TRUE(lookup.ready());
struct sockaddr_storage addr {};
socklen_t len = lookup.to_sockaddr(reinterpret_cast<struct sockaddr *>(&addr), sizeof(addr), 6053);
ASSERT_EQ(len, sizeof(sockaddr_in));
auto *in = reinterpret_cast<sockaddr_in *>(&addr);
EXPECT_EQ(in->sin_family, AF_INET);
EXPECT_EQ(ntohs(in->sin_port), 6053);
EXPECT_EQ(in->sin_addr.s_addr, htonl(0xC0A80101));
}
TEST(Ipv4Resolve, ForgetDropsTheLiteral) {
Ipv4Resolve lookup;
lookup.start("10.0.0.5", 80, "test");
ASSERT_TRUE(lookup.ready());
lookup.forget();
EXPECT_FALSE(lookup.ready());
struct sockaddr_storage addr {};
EXPECT_EQ(lookup.to_sockaddr(reinterpret_cast<struct sockaddr *>(&addr), sizeof(addr), 80), 0u);
}
TEST(Ipv4Resolve, Ipv6LiteralIsRejected) {
Ipv4Resolve lookup;
lookup.start("::1", 443, "test");
EXPECT_FALSE(lookup.ready());
EXPECT_TRUE(lookup.consume_failure());
}
TEST(Ipv4Resolve, ShortBufferWritesNothing) {
Ipv4Resolve lookup;
lookup.start("192.0.2.10", 502, "test");
ASSERT_TRUE(lookup.ready());
struct sockaddr_in addr {};
EXPECT_EQ(lookup.to_sockaddr(reinterpret_cast<struct sockaddr *>(&addr), sizeof(addr) - 1, 502), 0u);
}
TEST(Ipv4Resolve, RetryAfterFailureKeepsTheAddress) {
Ipv4Resolve lookup;
lookup.start("::1", 443, "test");
EXPECT_FALSE(lookup.ready());
lookup.start("192.168.1.1", 1, "test");
EXPECT_TRUE(lookup.ready());
EXPECT_FALSE(lookup.consume_failure());
EXPECT_TRUE(lookup.ready());
}
TEST(Ipv4Resolve, ForgetDropsAStaleFailure) {
Ipv4Resolve lookup;
lookup.start("::1", 443, "test");
lookup.forget();
EXPECT_FALSE(lookup.consume_failure());
EXPECT_FALSE(lookup.ready());
}
} // namespace esphome::socket::testing
#endif