Skip to content

Commit

Permalink
Add a test ensuring we don't clobber connection error.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
michael-grunder committed Apr 15, 2023
1 parent 3f95fcd commit 98834ec
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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... */
Expand Down

0 comments on commit 98834ec

Please sign in to comment.