From 5d84c8cfdb3f3709499970bc450f5308f0c832c1 Mon Sep 17 00:00:00 2001 From: michael-grunder Date: Sat, 15 Apr 2023 16:15:29 -0700 Subject: Add a test ensuring we don't clobber connection error. Adds a test that we don't attempt to set any socket timeout if the connection itself failed. This issue only seemed to occur on macOS but it's nice to have a test for it. --- test.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/test.c b/test.c index 77e7f1a..f3cb734 100644 --- a/test.c +++ b/test.c @@ -881,9 +881,9 @@ static void test_allocator_injection(void) { #define HIREDIS_BAD_DOMAIN "idontexist-noreally.com" static void test_blocking_connection_errors(void) { - redisContext *c; struct addrinfo hints = {.ai_family = AF_INET}; struct addrinfo *ai_tmp = NULL; + redisContext *c; int rv = getaddrinfo(HIREDIS_BAD_DOMAIN, "6379", &hints, &ai_tmp); if (rv != 0) { @@ -910,12 +910,26 @@ static void test_blocking_connection_errors(void) { } #ifndef _WIN32 + redisOptions opt = {0}; + struct timeval tv; + test("Returns error when the port is not open: "); c = redisConnect((char*)"localhost", 1); test_cond(c->err == REDIS_ERR_IO && strcmp(c->errstr,"Connection refused") == 0); redisFree(c); + + /* Verify we don't regress from the fix in PR #1180 */ + test("We don't clobber connection exception with setsockopt error: "); + tv = (struct timeval){.tv_sec = 0, .tv_usec = 500000}; + opt.command_timeout = opt.connect_timeout = &tv; + REDIS_OPTIONS_SET_TCP(&opt, "localhost", 10337); + c = redisConnectWithOptions(&opt); + test_cond(c->err == REDIS_ERR_IO && + strcmp(c->errstr, "Connection refused") == 0); + redisFree(c); + test("Returns error when the unix_sock socket path doesn't accept connections: "); c = redisConnectUnix((char*)"/tmp/idontexist.sock"); test_cond(c->err == REDIS_ERR_IO); /* Don't care about the message... */ -- cgit v1.2.3