File: kill-cursor.t

package info (click to toggle)
libmongodb-perl 2.2.2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 10,292 kB
  • sloc: perl: 14,421; python: 299; makefile: 20; sh: 11
file content (72 lines) | stat: -rw-r--r-- 1,907 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#  Copyright 2018 - present MongoDB, Inc.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.

use strict;
use warnings;
use Test::More;

use lib "t/lib";
use MongoDBTest qw/
    skip_unless_mongod
    build_client
    get_test_db
    server_version
    check_min_server_version
/;

skip_unless_mongod();

my @events;
my $conn = build_client(monitoring_callback => sub {
    push @events, shift;
});
my $server_version = server_version($conn);
my $testdb = get_test_db($conn);
my $coll = $testdb->get_collection('test_collection');

for my $index (0..1000) {
    $coll->insert_one({
        type => 'testval',
        value => $index,
    });
}

my $id;
@events = ();
do {
    my $results = $coll->query({ type => 'testval' });
    ok defined($results->next), 'fetch one document';
    $id = $results->result->_cursor_id;
    ok defined($id), 'cursor id';
    undef $results;
};

my ($event) = grep {
    $_->{commandName} eq 'killCursors'
    &&
    $_->{type} eq 'command_succeeded'
} @events;

ok defined($event), 'successful killcursors event';

if (defined $event and defined $id) {
    is $event->{reply}{ok}, 1,
        'reply ok';
    unless ( check_min_server_version($conn, 'v3.2.0') ) {
        ok( !grep { $_ eq $id } @{$event->{reply}{cursorsAlive}}, "cursor id not in alive list" );
        is_deeply( $event->{reply}{cursorsKilled}, [$id], 'cursor id in killed list' );
    }
}

done_testing;