blob: 0eb50d4f7e50c0dc25346757cae25a797bb1e1a9 [file] [log] [blame]
John Park33858a32018-09-28 23:05:48 -07001#include "aos/stl_mutex/stl_mutex.h"
Brian Silvermanb073f242014-09-08 16:29:57 -04002
Stephan Pleines45ea55a2024-05-30 20:26:24 -07003#include <memory>
4
Austin Schuh60e77942022-05-16 17:48:24 -07005#include "gtest/gtest.h"
Brian Silvermanb073f242014-09-08 16:29:57 -04006
Philipp Schrader790cb542023-07-05 21:06:52 -07007#include "aos/die.h"
8
Stephan Pleinesf63bde82024-01-13 15:59:33 -08009namespace aos::testing {
Brian Silvermanb073f242014-09-08 16:29:57 -040010
11class StlMutexDeathTest : public ::testing::Test {
12 protected:
Austin Schuha0c41ba2020-09-10 22:59:14 -070013 void SetUp() override { SetDieTestMode(true); }
Brian Silvermanb073f242014-09-08 16:29:57 -040014};
15
16typedef StlMutexDeathTest StlRecursiveMutexDeathTest;
17
18// Tests that locking/unlocking without any blocking works.
19TEST(StlMutexTest, Basic) {
20 stl_mutex mutex;
21
22 mutex.lock();
23 mutex.unlock();
24
25 ASSERT_TRUE(mutex.try_lock());
26 ASSERT_FALSE(mutex.try_lock());
27 mutex.unlock();
28
29 mutex.lock();
30 ASSERT_FALSE(mutex.try_lock());
31 mutex.unlock();
32}
33
34// Tests that unlocking an unlocked mutex fails.
35TEST_F(StlMutexDeathTest, MultipleUnlock) {
36 stl_mutex mutex;
37 mutex.lock();
38 mutex.unlock();
39 EXPECT_DEATH(mutex.unlock(), ".*multiple unlock.*");
40}
41
42// Tests that locking/unlocking (including recursively) without any blocking
43// works.
44TEST(StlRecursiveMutexTest, Basic) {
45 stl_recursive_mutex mutex;
46
47 mutex.lock();
48 mutex.unlock();
49
50 ASSERT_TRUE(mutex.try_lock());
51 ASSERT_TRUE(mutex.try_lock());
52 mutex.unlock();
53 mutex.unlock();
54
55 mutex.lock();
56 ASSERT_TRUE(mutex.try_lock());
57 mutex.unlock();
Austin Schuha0c41ba2020-09-10 22:59:14 -070058 mutex.unlock();
Brian Silvermanb073f242014-09-08 16:29:57 -040059}
60
61// Tests that unlocking an unlocked recursive mutex fails.
62TEST_F(StlRecursiveMutexDeathTest, MultipleUnlock) {
63 stl_recursive_mutex mutex;
64 mutex.lock();
65 mutex.unlock();
66 EXPECT_DEATH(mutex.unlock(), ".*multiple unlock.*");
67}
68
Stephan Pleinesf63bde82024-01-13 15:59:33 -080069} // namespace aos::testing