Test from Cal (get to go along with his set)
[m6w6/libmemcached] / tests / test.c
index 4e5369d6741b85dbb4e9b65c17dd122c80183de5..3a8c36572e3b4308c4e7bf6e7e8d811d5193ebd2 100644 (file)
@@ -7,6 +7,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/time.h>
+#include <time.h>
 
 long int timedif(struct timeval a, struct timeval b)
 {
@@ -101,7 +102,6 @@ void delete_test(memcached_st *memc)
   assert(rc == MEMCACHED_SUCCESS);
 
   rc= memcached_delete(memc, key, strlen(key), (time_t)0);
-  WATCHPOINT_ERROR(rc);
   assert(rc == MEMCACHED_SUCCESS);
 }
 
@@ -221,8 +221,6 @@ void get_test3(memcached_st *memc)
   string= memcached_get(memc, key, strlen(key),
                         &string_length, &flags, &rc);
 
-  WATCHPOINT_ERRNO(memc->my_errno);
-  WATCHPOINT_ERROR(rc);
   assert(rc == MEMCACHED_SUCCESS);
   assert(string);
   assert(string_length == value_length);
@@ -499,6 +497,12 @@ void behavior_test(memcached_st *memc)
   memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_MD5_HASHING, &set);
   value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_MD5_HASHING);
   assert(value == 0);
+
+  value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE);
+  assert(value > 0);
+
+  value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE);
+  assert(value > 0);
 }
 
 /* Test case provided by Cal Haldenbrand */
@@ -507,7 +511,7 @@ void user_supplied_bug1(memcached_st *memc)
   unsigned int setter= 1;
   unsigned int x;
 
-  long total= 0;
+  unsigned long long total= 0;
   int size= 0;
   srand(time(NULL));
   char key[10];
@@ -543,6 +547,56 @@ void user_supplied_bug1(memcached_st *memc)
     assert(rc == MEMCACHED_SUCCESS);
   }
 }
+
+/* Test case provided by Cal Haldenbrand */
+void user_supplied_bug2(memcached_st *memc)
+{
+  int errors;
+  unsigned int setter;
+  unsigned int x;
+  unsigned long long total;
+
+
+  setter= 1;
+  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, &setter);
+  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, &setter);
+#ifdef NOT_YET
+  setter = 20 * 1024576;
+  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE, &setter);
+  setter = 20 * 1024576;
+  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE, &setter);
+  getter = memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE);
+  getter = memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE);
+#endif
+
+  for (x= 0, errors= 0, total= 0 ; total < 20 * 1024576 ; x++)
+  {
+    memcached_return rc;
+    char buffer[SMALL_STRING_LEN];
+    uint16_t flags;
+    size_t val_len;
+    char *getval;
+
+    snprintf(buffer, SMALL_STRING_LEN, "%u", x);
+    getval= memcached_get(memc, buffer, strlen(buffer),
+                           &val_len, &flags, &rc);             
+    if (rc != MEMCACHED_SUCCESS) 
+    {
+      WATCHPOINT_ERROR(rc);
+      errors++;
+      if ( errors == 10 )
+      {
+        fprintf(stderr, "last: %s:  len %zu  flags: %u\n", buffer, val_len, flags);
+        assert(0);
+      }
+      continue;
+    }
+    total+= val_len;
+    errors= 0;
+    free(getval);
+  }
+}
+
 void add_host_test1(memcached_st *memc)
 {
   unsigned int x;
@@ -644,6 +698,7 @@ int main(int argc, char *argv[])
 
   test_st user_tests[] ={
     {"user_supplied_bug1", 0, user_supplied_bug1 },
+    {"user_supplied_bug2", 0, user_supplied_bug1 },
     {0, 0, 0}
   };