+/* LibMemcached
+ * Copyright (C) 2006-2009 Brian Aker
+ * All rights reserved.
+ *
+ * Use and distribution licensed under the BSD license. See
+ * the COPYING file in the parent directory for full text.
+ *
+ * Summary:
+ *
+ */
+
/* -*- Mode: C; tab-width: 2; c-basic-offset: 2; indent-tabs-mode: nil -*- */
#undef NDEBUG
#include "config.h"
if (!val)
{
if (verbose)
- fprintf(stderr, "\n%s:%u: %s", file, line, expression);
+ fprintf(stderr, "\n%s:%d: %s", file, line, expression);
if (do_core)
abort();
* @param dta the data to store with the key
* @param dtalen the length of the data to store with the key
* @param flags the flags to store along with the key
- * @param exp the expiry time for the key
+ * @param exptime the expiry time for the key
*/
static void storage_command(command *cmd,
uint8_t cc,
const void* dta,
size_t dtalen,
uint32_t flags,
- uint32_t exp)
+ uint32_t exptime)
{
/* all of the storage commands use the same command layout */
protocol_binary_request_set *request= &cmd->set;
request->message.header.request.bodylen= (uint32_t)(keylen + 8 + dtalen);
request->message.header.request.opaque= 0xdeadbeef;
request->message.body.flags= flags;
- request->message.body.expiration= exp;
+ request->message.body.expiration= exptime;
off_t key_offset= sizeof (protocol_binary_request_no_extras) + 8;
memcpy(cmd->bytes + key_offset, key, keylen);
* @param keylen the number of bytes in the key
* @param delta the number to add/subtract
* @param initial the initial value if the key doesn't exist
- * @param exp when the key should expire if it isn't set
+ * @param exptime when the key should expire if it isn't set
*/
static void arithmetic_command(command *cmd,
uint8_t cc,
size_t keylen,
uint64_t delta,
uint64_t initial,
- uint32_t exp)
+ uint32_t exptime)
{
memset(cmd, 0, sizeof (cmd->incr));
cmd->incr.message.header.request.magic= PROTOCOL_BINARY_REQ;
cmd->incr.message.header.request.opaque= 0xdeadbeef;
cmd->incr.message.body.delta= htonll(delta);
cmd->incr.message.body.initial= htonll(initial);
- cmd->incr.message.body.expiration= htonl(exp);
+ cmd->incr.message.body.expiration= htonl(exptime);
off_t key_offset= sizeof (protocol_binary_request_no_extras) + 20;
memcpy(cmd->bytes + key_offset, key, keylen);
static enum test_return receive_response(const char *msg) {
char buffer[80];
execute(receive_line(buffer, sizeof(buffer)));
+ if (strcmp(msg, buffer) != 0) {
+ fprintf(stderr, "[%s]\n", buffer);
+ }
verify(strcmp(msg, buffer) == 0);
return TEST_PASS;
}
+static enum test_return receive_error_response(void)
+{
+ char buffer[80];
+ execute(receive_line(buffer, sizeof(buffer)));
+ verify(strncmp(buffer, "ERROR\r\n", 7) == 0 ||
+ strncmp(buffer, "CLIENT_ERROR:", 13) == 0 ||
+ strncmp(buffer, "SERVER_ERROR:", 13) == 0);
+ return TEST_PASS;
+}
+
static enum test_return test_ascii_quit(void)
{
/* Verify that quit handles unknown options */
execute(send_string("quit foo bar\r\n"));
- execute(receive_response("ERROR\r\n"));
+ execute(receive_error_response());
/* quit doesn't support noreply */
execute(send_string("quit noreply\r\n"));
- execute(receive_response("ERROR\r\n"));
+ execute(receive_error_response());
/* Verify that quit works */
execute(send_string("quit\r\n"));
{
/* Verify that version command handles unknown options */
execute(send_string("version foo bar\r\n"));
- execute(receive_response("ERROR\r\n"));
+ execute(receive_error_response());
/* version doesn't support noreply */
execute(send_string("version noreply\r\n"));
- execute(receive_response("ERROR\r\n"));
+ execute(receive_error_response());
/* Verify that verify works */
execute(send_string("version\r\n"));
{
/* This command does not adhere to the spec! */
execute(send_string("verbosity foo bar my\r\n"));
- execute(receive_response("ERROR\r\n"));
+ execute(receive_error_response());
execute(send_string("verbosity noreply\r\n"));
- execute(test_ascii_version());
+ execute(receive_error_response());
execute(send_string("verbosity 0 noreply\r\n"));
execute(test_ascii_version());
execute(send_string("verbosity\r\n"));
- execute(receive_response("ERROR\r\n"));
+ execute(receive_error_response());
execute(send_string("verbosity 1\r\n"));
execute(receive_response("OK\r\n"));
execute(ascii_set_item(key, "value"));
execute(send_string("delete\r\n"));
- execute(receive_response("ERROR\r\n"));
+ execute(receive_error_response());
/* BUG: the server accepts delete a b */
execute(send_string("delete a b c d e\r\n"));
- execute(receive_response("ERROR\r\n"));
+ execute(receive_error_response());
char buffer[1024];
sprintf(buffer, "delete %s%s\r\n", key, noreply ? " noreply" : "");
execute(ascii_set_item("test_ascii_get", "value"));
execute(send_string("get\r\n"));
- execute(receive_response("ERROR\r\n"));
+ execute(receive_error_response());
execute(ascii_get_item("test_ascii_get", "value", true));
execute(ascii_get_item("test_ascii_get_notfound", "value", false));
execute(ascii_set_item("test_ascii_gets", "value"));
execute(send_string("gets\r\n"));
- execute(receive_response("ERROR\r\n"));
+ execute(receive_error_response());
unsigned long cas;
execute(ascii_gets_item("test_ascii_gets", "value", true, &cas));
execute(ascii_gets_item("test_ascii_gets_notfound", "value", false, &cas));
/* Verify that the flush_all command handles unknown options */
/* Bug in the current memcached server! */
execute(send_string("flush_all foo bar\r\n"));
- execute(receive_response("ERROR\r\n"));
+ execute(receive_error_response());
#endif
execute(ascii_set_item(key, key));
static enum test_return test_ascii_stat(void)
{
execute(send_string("stats noreply\r\n"));
- execute(receive_response("ERROR\r\n"));
+ execute(receive_error_response());
execute(send_string("stats\r\n"));
char buffer[1024];
do {