]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cls_lock: fix duration test
authorSage Weil <sage@inktank.com>
Thu, 18 Jul 2013 21:06:41 +0000 (14:06 -0700)
committerSage Weil <sage@inktank.com>
Thu, 18 Jul 2013 21:08:41 +0000 (14:08 -0700)
It's possible for us to just be really slow when getting the reply to the
first op or doing the second op, resulting in a successful lock.  If we
do get a success, assert that at least that amount of time has passed to
avoid any false positives.

Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Yehuda Sadeh <yehuda@inktank.com>
src/test/cls_lock/test_cls_lock.cc

index 39d3cebde105c83e78fa5d50f3ad8ee5ca76c3ed..ead03bb218354dbb7e2bd9091784fba62357b8af 100644 (file)
@@ -16,6 +16,7 @@
 #include <errno.h>
 
 #include "include/types.h"
+#include "common/Clock.h"
 #include "msg/msg_types.h"
 #include "include/rados/librados.hpp"
 
@@ -280,11 +281,19 @@ TEST(ClsLock, TestLockDuration) {
 
   string oid = "foo";
   Lock l("lock");
-  l.set_duration(utime_t(5, 0));
+  utime_t dur(5, 0);
+  l.set_duration(dur);
+  utime_t start = ceph_clock_now(NULL);
   ASSERT_EQ(0, l.lock_exclusive(&ioctx, oid));
-  ASSERT_EQ(-EEXIST, l.lock_exclusive(&ioctx, oid));
+  int r = l.lock_exclusive(&ioctx, oid);
+  if (r == 0) {
+    // it's possible to get success if we were just really slow...
+    ASSERT_TRUE(ceph_clock_now(NULL) > start + dur);
+  } else {
+    ASSERT_EQ(-EEXIST, r);
+  }
 
-  sleep(5);
+  sleep(dur.sec());
   ASSERT_EQ(0, l.lock_exclusive(&ioctx, oid));
 
   ASSERT_EQ(0, destroy_one_pool_pp(pool_name, cluster));