diff MySQL/UnitTests/UnitTestsMain.cpp @ 137:52b3859ee0b7

MySQL: acquiring named locks instead of numbers
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 09 May 2019 11:29:17 +0200
parents e26690365c25
children 5c5cd59c991f
line wrap: on
line diff
--- a/MySQL/UnitTests/UnitTestsMain.cpp	Thu May 09 09:52:11 2019 +0200
+++ b/MySQL/UnitTests/UnitTestsMain.cpp	Thu May 09 11:29:17 2019 +0200
@@ -70,36 +70,60 @@
   OrthancDatabases::MySQLDatabase db1(globalParameters_);
   db1.Open();
 
-  ASSERT_FALSE(db1.ReleaseAdvisoryLock(43)); // lock counter = 0
-  ASSERT_TRUE(db1.AcquireAdvisoryLock(43));  // lock counter = 1
+  ASSERT_FALSE(db1.ReleaseAdvisoryLock("mylock")); // lock counter = 0
+  ASSERT_TRUE(db1.AcquireAdvisoryLock("mylock"));  // lock counter = 1
 
   // OK, as this is the same connection
-  ASSERT_TRUE(db1.AcquireAdvisoryLock(43));  // lock counter = 2
-  ASSERT_TRUE(db1.ReleaseAdvisoryLock(43));  // lock counter = 1
+  ASSERT_TRUE(db1.AcquireAdvisoryLock("mylock"));  // lock counter = 1
+  ASSERT_TRUE(db1.ReleaseAdvisoryLock("mylock"));  // lock counter = 0
 
   // Try and release twice the lock
-  ASSERT_TRUE(db1.ReleaseAdvisoryLock(43));  // lock counter = 0
-  ASSERT_FALSE(db1.ReleaseAdvisoryLock(43)); // cannot unlock
-  ASSERT_TRUE(db1.AcquireAdvisoryLock(43));  // lock counter = 1
+  ASSERT_FALSE(db1.ReleaseAdvisoryLock("mylock"));  // lock counter = 0
+  ASSERT_TRUE(db1.AcquireAdvisoryLock("mylock"));  // lock counter = 1
 
   {
     OrthancDatabases::MySQLDatabase db2(globalParameters_);
     db2.Open();
 
     // The "db1" is still actively locking
-    ASSERT_FALSE(db2.AcquireAdvisoryLock(43));
+    ASSERT_FALSE(db2.AcquireAdvisoryLock("mylock"));
 
     // Release the "db1" lock
-    ASSERT_TRUE(db1.ReleaseAdvisoryLock(43));
-    ASSERT_FALSE(db1.ReleaseAdvisoryLock(43));
+    ASSERT_TRUE(db1.ReleaseAdvisoryLock("mylock"));
+    ASSERT_FALSE(db1.ReleaseAdvisoryLock("mylock"));
 
     // "db2" can now acquire the lock, but not "db1"
-    ASSERT_TRUE(db2.AcquireAdvisoryLock(43));
-    ASSERT_FALSE(db1.AcquireAdvisoryLock(43));
+    ASSERT_TRUE(db2.AcquireAdvisoryLock("mylock"));
+    ASSERT_FALSE(db1.AcquireAdvisoryLock("mylock"));
   }
 
   // "db2" is closed, "db1" can now acquire the lock
-  ASSERT_TRUE(db1.AcquireAdvisoryLock(43));
+  ASSERT_TRUE(db1.AcquireAdvisoryLock("mylock"));
+}
+
+
+
+/**
+ * WARNING: The following test only succeeds if MySQL >= 5.7. This is
+ * because in MySQL < 5.7, acquiring a lock by calling "SELECT
+ * GET_LOCK()" releases all the previously acquired locks!
+ **/
+TEST(MySQL, DISABLED_Lock3)
+{
+  OrthancDatabases::MySQLDatabase::ClearDatabase(globalParameters_);  
+
+  OrthancDatabases::MySQLDatabase db1(globalParameters_);
+  db1.Open();
+
+  ASSERT_TRUE(db1.AcquireAdvisoryLock("mylock1"));  // lock counter = 1
+  ASSERT_TRUE(db1.AcquireAdvisoryLock("mylock2"));  // lock counter = 1
+
+  {
+    OrthancDatabases::MySQLDatabase db2(globalParameters_);
+    db2.Open();
+
+    ASSERT_FALSE(db2.AcquireAdvisoryLock("mylock1"));
+  }
 }