my
$conn
= build_client();
my
$testdb
= get_test_db(
$conn
);
ok(
$conn
->connected,
"client is connected"
);
"bogus client not connected"
);
is(
exception { MongoDB::MongoClient->new(
host
=>
'localhost'
,
port
=> 1,
ssl
=>
$ENV
{MONGO_SSL}); },
undef
,
'no exception on connection failure during topology scan'
);
SKIP: {
skip
"connecting to default host/port won't work with a remote db"
, 13
if
exists
$ENV
{MONGOD};
is(
exception {
$conn
= MongoDB::MongoClient->new(
ssl
=>
$ENV
{MONGO_SSL}); },
undef
,
'successful connection'
) ;
isa_ok(
$conn
,
'MongoDB::MongoClient'
);
is(
$conn
->db_name,
''
,
'db_name default value'
);
my
$to
= MongoDB::MongoClient->new(
'timeout'
=> 1,
ssl
=>
$ENV
{MONGO_SSL});
$to
= MongoDB::MongoClient->new(
'timeout'
=> 123,
ssl
=>
$ENV
{MONGO_SSL});
$to
= MongoDB::MongoClient->new(
'timeout'
=> 2000000,
ssl
=>
$ENV
{MONGO_SSL});
is(
undef
,
'connected'
);
is(
undef
,
'extra comma'
);
{
is(
exception {
my
$ip
= 27020;
while
((
exists
$ENV
{DB_PORT} &&
$ip
eq
$ENV
{DB_PORT}) ||
(
exists
$ENV
{DB_PORT2} &&
$ip
eq
$ENV
{DB_PORT2})) {
$ip
++;
}
my
$conn2
= MongoDB::MongoClient->new(
"host"
=>
"mongodb://localhost:"
.
$ip
.
",localhost:"
.(
$ip
+1).
",localhost"
,
ssl
=>
$ENV
{MONGO_SSL});
},
undef
,
'last in line'
);
}
is(MongoDB::MongoClient->new(
'host'
=>
'mongodb://localhost,/example_db'
)->db_name,
'example_db'
,
'connection uri database trailing comma'
);
is(MongoDB::MongoClient->new(
'host'
=>
'mongodb://localhost,localhost:27020,localhost:27021/example_db'
)->db_name,
'example_db'
,
'connection uri database, many hosts'
);
is(MongoDB::MongoClient->new(
'host'
=>
'mongodb://localhost/?'
)->db_name,
''
,
'connection uri no database'
);
}
{
my
$db
=
$conn
->get_database(
$testdb
->name);
isa_ok(
$db
,
'MongoDB::Database'
,
'get_database'
);
$db
->get_collection(
'test_collection'
)->insert_one({
foo
=> 42 });
ok((
grep
{ /testdb/ }
$conn
->database_names),
'database_names'
);
my
$result
=
$db
->drop;
is(
ref
$result
,
'HASH'
,
$result
);
is(
$result
->{
'ok'
}, 1,
'db was dropped'
);
}
{
is(
$conn
->w, 1,
"get w"
);
$conn
->w(3);
is(
$conn
->w, 3,
"set w"
);
$conn
->w(
"tag"
);
is(
$conn
->w,
"tag"
,
"set w to string"
);
isnt(
exception {
$conn
->w({
tag
=> 1});},
undef
,
"Setting w to anything but a string or int dies."
);
is(
$conn
->wtimeout, 1000,
"get wtimeout"
);
$conn
->wtimeout(100);
is(
$conn
->wtimeout, 100,
"set wtimeout"
);
$testdb
->drop;
}
subtest
"options"
=>
sub
{
subtest
"connection"
=>
sub
{
my
$ssl
=
"true"
;
my
$timeout
= 40000;
is(
$client
->ssl, 1,
"connect with ssl set"
);
is(
$client
->timeout,
$timeout
,
"connection timeout set"
);
};
subtest
"invalid option value"
=>
sub
{
like(
qr/expected boolean/
,
'key with invalid value'
);
};
subtest
"write concern"
=>
sub
{
my
$w
= 2;
my
$wtimeout
= 200;
my
$j
=
"true"
;
is(
$client
->w,
$w
,
"write acknowledgement set"
);
is(
$client
->wtimeout,
$wtimeout
,
"write acknowledgement timeout set"
);
is(
$client
->j, 1,
"sync to journal"
);
};
};
{
my
$client
= MongoDB::MongoClient->new();
is(
$client
->query_timeout,
$MongoDB::Cursor::timeout
,
'default query timeout'
);
local
$MongoDB::Cursor::timeout
= 40;
$client
= MongoDB::MongoClient->new();
is(
$client
->query_timeout, 40,
'changed default query timeout'
);
}
{
is
$conn
->_min_wire_version, 0,
'default min wire version'
;
is
$conn
->_max_wire_version, 3,
'default max wire version'
;
like(
exception { MongoDBTest::build_client(
_min_wire_version
=> 99,
_max_wire_version
=> 100)->send_admin_command([
is_master
=> 1]) },
qr/Incompatible wire protocol/
i,
'exception on wire protocol'
);
}
{
my
$client
= build_client(
host
=>
"localhost:27017"
);
}
done_testing;