1 // -*- mode:C; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #include "gtest/gtest.h"
6 #include "common/ceph_argparse.h"
7 #include "common/ceph_context.h"
8 #include "common/ceph_mutex.h"
9 #include "common/common_init.h"
10 #include "common/lockdep.h"
11 #include "include/util.h"
12 #include "include/coredumpctl.h"
15 class lockdep
: public ::testing::Test
18 void SetUp() override
{
19 #ifndef CEPH_DEBUG_MUTEX
20 GTEST_SKIP() << "WARNING: CEPH_DEBUG_MUTEX is not defined, lockdep will not work";
22 CephInitParameters
params(CEPH_ENTITY_TYPE_CLIENT
);
23 cct
= common_preinit(params
, CODE_ENVIRONMENT_UTILITY
,
24 CINIT_FLAG_NO_DEFAULT_CONFIG_FILE
);
25 cct
->_conf
->cluster
= "ceph";
26 cct
->_conf
.set_val("lockdep", "true");
27 cct
->_conf
.apply_changes(nullptr);
28 ASSERT_TRUE(g_lockdep
);
38 CephContext
*cct
= nullptr;
43 ceph::mutex
a(ceph::make_mutex("a")), b(ceph::make_mutex("b"));
45 ASSERT_TRUE(ceph_mutex_is_locked(a
));
46 ASSERT_TRUE(ceph_mutex_is_locked_by_me(a
));
48 ASSERT_TRUE(ceph_mutex_is_locked(b
));
49 ASSERT_TRUE(ceph_mutex_is_locked_by_me(b
));
55 EXPECT_DEATH(a
.lock(), "");
59 TEST_F(lockdep
, recursive
)
61 ceph::mutex
a(ceph::make_mutex("a"));
64 EXPECT_DEATH(a
.lock(), "");
67 ceph::recursive_mutex
b(ceph::make_recursive_mutex("b"));
69 ASSERT_TRUE(ceph_mutex_is_locked(b
));
70 ASSERT_TRUE(ceph_mutex_is_locked_by_me(b
));