use
MongoDBTest
qw/skip_unless_mongod build_client server_type server_version/
;
skip_unless_mongod();
plan
skip_all
=>
"Not supported on Atlas Free Tier"
if
$ENV
{ATLAS_PROXY};
my
$conn
= build_client();
my
$server_type
= server_type(
$conn
);
my
$server_version
= server_version(
$conn
);
my
$server_status_res
=
$conn
->send_admin_command([
serverStatus
=> 1]);
my
$storage_engine
=
$server_status_res
->{output}{storageEngine}{name} ||
''
;
plan
skip_all
=>
"fsync not supported for inMemory storage engine"
if
$storage_engine
=~
qr/inMemory/
;
my
$ret
;
subtest
"normal fsync"
=>
sub
{
$ret
=
$conn
->fsync();
is(
$ret
->{ok}, 1,
"fsync returned 'ok' => 1"
);
};
subtest
"fsync with lock"
=>
sub
{
plan
skip_all
=>
"lock not supported through mongos"
if
$server_type
eq
'Mongos'
;
$ret
=
$conn
->fsync({
lock
=> 1});
is(
$ret
->{ok}, 1,
"fsync + lock returned 'ok' => 1"
);
if
(
$server_version
<= v3.1.0) {
$ret
=
$conn
->get_database(
'admin'
)->get_collection(
'$cmd.sys.inprog'
)->find_one();
}
else
{
$ret
=
$conn
->send_admin_command([
currentOp
=> 1]);
$ret
=
$ret
->{output};
}
is(
$ret
->{fsyncLock}, 1,
"MongoDB is locked."
);
$ret
=
$conn
->fsync_unlock(); Dumper(
$ret
);
is(
$ret
->{ok}, 1,
"Got 'ok' => 1 from unlock command."
);
if
(
$server_version
<= v3.1.0) {
$ret
=
$conn
->get_database(
'admin'
)->get_collection(
'$cmd.sys.inprog'
)->find_one();
}
else
{
$ret
=
$conn
->send_admin_command([
currentOp
=> 1]);
$ret
=
$ret
->{output};
}
ok(!
$ret
->{fsyncLock},
"MongoDB is no longer locked."
);
};
done_testing;