diff options
author | michael-grunder <michael.grunder@gmail.com> | 2023-04-15 16:15:29 -0700 |
---|---|---|
committer | Michael Grunder <michael.grunder@gmail.com> | 2023-04-15 17:20:11 -0700 |
commit | 5d84c8cfdb3f3709499970bc450f5308f0c832c1 (patch) | |
tree | 09575adafce1ccaefae260171409de68b029de06 | |
parent | 3f95fcdae4d13dd234aea1d1b7f0af50efb79219 (diff) |
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.
-rw-r--r-- | test.c | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -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... */ |