From 66192a0052ec3f9936099a4d2c5512b4b0d89bf0 Mon Sep 17 00:00:00 2001 From: Axel Etcheverry Date: Thu, 14 Nov 2013 01:59:35 +0100 Subject: [PATCH] Add new redisAppendFormatedCommand with tests Closes #202 --- hiredis.c | 9 +++++++++ hiredis.h | 4 ++++ test.c | 23 +++++++++++++++++++++++ 3 files changed, 36 insertions(+) diff --git a/hiredis.c b/hiredis.c index dcb13a5..b254903 100644 --- a/hiredis.c +++ b/hiredis.c @@ -1257,6 +1257,15 @@ int __redisAppendCommand(redisContext *c, char *cmd, size_t len) { return REDIS_OK; } +int redisAppendFormattedCommand(redisContext *c, char *format, size_t len) { + + if (__redisAppendCommand(c, format, len) != REDIS_OK) { + return REDIS_ERR; + } + + return REDIS_OK; +} + int redisvAppendCommand(redisContext *c, const char *format, va_list ap) { char *cmd; int len; diff --git a/hiredis.h b/hiredis.h index 37d5779..05bfc47 100644 --- a/hiredis.h +++ b/hiredis.h @@ -194,6 +194,10 @@ int redisBufferWrite(redisContext *c, int *done); int redisGetReply(redisContext *c, void **reply); int redisGetReplyFromReader(redisContext *c, void **reply); +/* Write a formatted command to the output buffer. Use these functions in blocking mode + * to get a pipeline of commands. */ +int redisAppendFormattedCommand(redisContext *c, char *format, size_t len); + /* Write a command to the output buffer. Use these functions in blocking mode * to get a pipeline of commands. */ int redisvAppendCommand(redisContext *c, const char *format, va_list ap); diff --git a/test.c b/test.c index e937624..713cc06 100644 --- a/test.c +++ b/test.c @@ -217,6 +217,28 @@ static void test_format_commands(void) { free(cmd); } +static void test_append_formatted_commands(struct config config) { + redisContext *c; + redisReply *reply; + char *cmd; + int len; + + c = connect(config); + + test("Append format command: "); + + len = redisFormatCommand(&cmd, "SET foo bar"); + + test_cond(redisAppendFormattedCommand(c, cmd, len) == REDIS_OK); + + assert(redisGetReply(c, (void*)&reply) == REDIS_OK); + + free(cmd); + freeReplyObject(reply); + + disconnect(c, 0); +} + static void test_reply_reader(void) { redisReader *reader; void *reply; @@ -686,6 +708,7 @@ int main(int argc, char **argv) { test_blocking_connection(cfg); test_blocking_io_errors(cfg); test_invalid_timeout_errors(cfg); + test_append_formatted_commands(cfg); if (throughput) test_throughput(cfg); printf("\nTesting against Unix socket connection (%s):\n", cfg.unix.path);