Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F10907576
reverselock_tests.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
1 KB
Subscribers
None
reverselock_tests.cpp
View Options
// Copyright (c) 2015-2016 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include
"reverselock.h"
#include
"test/test_bitcoin.h"
#include
<boost/test/unit_test.hpp>
BOOST_FIXTURE_TEST_SUITE
(
reverselock_tests
,
BasicTestingSetup
)
BOOST_AUTO_TEST_CASE
(
reverselock_basics
)
{
boost
::
mutex
mutex
;
boost
::
unique_lock
<
boost
::
mutex
>
lock
(
mutex
);
BOOST_CHECK
(
lock
.
owns_lock
());
{
reverse_lock
<
boost
::
unique_lock
<
boost
::
mutex
>>
rlock
(
lock
);
BOOST_CHECK
(
!
lock
.
owns_lock
());
}
BOOST_CHECK
(
lock
.
owns_lock
());
}
BOOST_AUTO_TEST_CASE
(
reverselock_errors
)
{
boost
::
mutex
mutex
;
boost
::
unique_lock
<
boost
::
mutex
>
lock
(
mutex
);
// Make sure trying to reverse lock an unlocked lock fails
lock
.
unlock
();
BOOST_CHECK
(
!
lock
.
owns_lock
());
bool
failed
=
false
;
try
{
reverse_lock
<
boost
::
unique_lock
<
boost
::
mutex
>>
rlock
(
lock
);
}
catch
(...)
{
failed
=
true
;
}
BOOST_CHECK
(
failed
);
BOOST_CHECK
(
!
lock
.
owns_lock
());
// Locking the original lock after it has been taken by a reverse lock
// makes no sense. Ensure that the original lock no longer owns the lock
// after giving it to a reverse one.
lock
.
lock
();
BOOST_CHECK
(
lock
.
owns_lock
());
{
reverse_lock
<
boost
::
unique_lock
<
boost
::
mutex
>>
rlock
(
lock
);
BOOST_CHECK
(
!
lock
.
owns_lock
());
}
BOOST_CHECK
(
failed
);
BOOST_CHECK
(
lock
.
owns_lock
());
}
BOOST_AUTO_TEST_SUITE_END
()
File Metadata
Details
Attached
Mime Type
text/x-c
Expires
Mon, Nov 25, 08:04 (1 d, 20 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4553189
Default Alt Text
reverselock_tests.cpp (1 KB)
Attached To
rSTAGING Bitcoin ABC staging
Event Timeline
Log In to Comment