summaryrefslogtreecommitdiff
path: root/test.c
diff options
context:
space:
mode:
authormichael-grunder <michael.grunder@gmail.com>2023-04-15 16:15:29 -0700
committerMichael Grunder <michael.grunder@gmail.com>2023-04-15 17:20:11 -0700
commit5d84c8cfdb3f3709499970bc450f5308f0c832c1 (patch)
tree09575adafce1ccaefae260171409de68b029de06 /test.c
parent3f95fcdae4d13dd234aea1d1b7f0af50efb79219 (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.
Diffstat (limited to 'test.c')
-rw-r--r--test.c16
1 files changed, 15 insertions, 1 deletions
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... */