build_client
skip_unless_mongod
skip_unless_sessions
get_test_db
server_version
server_type
clear_testdbs
get_unique_collection
uuid_to_string
/
;
skip_unless_mongod();
skip_unless_sessions();
my
@events
;
sub
clear_events {
@events
= () }
sub
event_count {
scalar
@events
}
sub
event_cb {
push
@events
,
$_
[0] }
my
$conn
= build_client(
monitoring_callback
=> \
&event_cb
,
);
my
$testdb
= get_test_db(
$conn
);
my
$server_version
= server_version(
$conn
);
my
$server_type
= server_type(
$conn
);
subtest
'Session for ack writes'
=>
sub
{
my
$coll
=
$testdb
->get_collection(
'test_collection'
, {
write_concern
=> {
w
=> 1 } } );
my
$session
=
$conn
->start_session;
my
$result
=
$coll
->insert_one( {
_id
=> 1 }, {
session
=>
$session
} );
my
$command
=
$events
[-2]->{ command };
ok
exists
$command
->{
'lsid'
},
'Session found'
;
is uuid_to_string(
$command
->{
'lsid'
}->{id}->data ),
uuid_to_string(
$session
->_server_session->session_id->{id}->data ),
"Session matches"
;
my
$result2
=
$coll
->insert_one( {
_id
=> 2 } );
my
$command2
=
$events
[-2]->{ command };
ok
$command2
->{
'lsid'
},
'Implicit session found'
;
};
subtest
'No session for unac writes'
=>
sub
{
my
$coll
=
$testdb
->get_collection(
'test_collection'
, {
write_concern
=> {
w
=> 0 } } );
my
$session
=
$conn
->start_session;
my
$result
=
$coll
->insert_one( {
_id
=> 1 }, {
session
=>
$session
} );
my
$command
=
$events
[-2]->{ command };
ok !
exists
$command
->{
'lsid'
},
'No session found'
;
my
$result2
=
$coll
->insert_one( {
_id
=> 2 } );
my
$command2
=
$events
[-2]->{ command };
ok !
exists
$command2
->{
'lsid'
},
'No implicit session found'
;
};
clear_testdbs;
done_testing;