Skip to content

Commit 68432cb

Browse files
committed
Merge pull request #544
2 parents 8f0e411 + 06778c6 commit 68432cb

File tree

2 files changed

+131
-1
lines changed

2 files changed

+131
-1
lines changed

php_phongo.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1081,7 +1081,7 @@ static bool php_phongo_apply_rp_options_to_uri(mongoc_uri_t *uri, bson_t *option
10811081

10821082
new_rp = mongoc_read_prefs_copy(old_rp);
10831083

1084-
if (bson_iter_init_find_case(&iter, options, "slaveok") && BSON_ITER_HOLDS_BOOL(&iter)) {
1084+
if (bson_iter_init_find_case(&iter, options, "slaveok") && BSON_ITER_HOLDS_BOOL(&iter) && bson_iter_bool(&iter)) {
10851085
mongoc_read_prefs_set_mode(new_rp, MONGOC_READ_SECONDARY_PREFERRED);
10861086
}
10871087

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
--TEST--
2+
MongoDB\Driver\Manager::__construct(): read preference options (slaveok)
3+
--FILE--
4+
<?php
5+
6+
$tests = [
7+
['mongodb://127.0.0.1/?slaveok=true', []],
8+
['mongodb://127.0.0.1/?slaveok=false', []],
9+
// True array option will override any read preference in the URI string
10+
['mongodb://127.0.0.1/?slaveok=false', ['slaveok' => true]],
11+
['mongodb://127.0.0.1/?readPreference=nearest', ['slaveok' => true]],
12+
// False array option is ignored
13+
['mongodb://127.0.0.1/?slaveok=true', ['slaveok' => false]],
14+
['mongodb://127.0.0.1/?readPreference=nearest', ['slaveok' => false]],
15+
// readPreference option takes priority
16+
['mongodb://127.0.0.1/?slaveok=true&readPreference=nearest', []],
17+
['mongodb://127.0.0.1/?slaveok=false&readPreference=nearest', []],
18+
['mongodb://127.0.0.1/?slaveok=true', ['readPreference' => 'nearest']],
19+
['mongodb://127.0.0.1/?slaveok=false', ['readPreference' => 'nearest']],
20+
[null, ['readPreference' => 'nearest', 'slaveok' => true]],
21+
[null, ['readPreference' => 'nearest', 'slaveok' => true]],
22+
// Alternative values for true in URI string (all other strings are false)
23+
['mongodb://127.0.0.1/?slaveok=t', []],
24+
['mongodb://127.0.0.1/?slaveok=1', []],
25+
['mongodb://127.0.0.1/?slaveok=anything_other_than_true_t_and_0', []],
26+
// Case insensitivity for URI string and array options
27+
['mongodb://127.0.0.1/?slaveOk=True', []],
28+
['mongodb://127.0.0.1/?SLAVEOK=TRUE', []],
29+
[null, ['slaveOk' => true]],
30+
[null, ['SLAVEOK' => true]],
31+
// Strict type checking on options array (non-booleans are ignored)
32+
[null, ['slaveok' => 'true']],
33+
[null, ['slaveok' => 1]],
34+
];
35+
36+
foreach ($tests as $test) {
37+
list($uri, $options) = $test;
38+
39+
$manager = new MongoDB\Driver\Manager($uri, $options);
40+
var_dump($manager->getReadPreference());
41+
}
42+
43+
?>
44+
===DONE===
45+
--EXPECTF--
46+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
47+
["mode"]=>
48+
string(18) "secondaryPreferred"
49+
}
50+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
51+
["mode"]=>
52+
string(7) "primary"
53+
}
54+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
55+
["mode"]=>
56+
string(18) "secondaryPreferred"
57+
}
58+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
59+
["mode"]=>
60+
string(18) "secondaryPreferred"
61+
}
62+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
63+
["mode"]=>
64+
string(18) "secondaryPreferred"
65+
}
66+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
67+
["mode"]=>
68+
string(7) "nearest"
69+
}
70+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
71+
["mode"]=>
72+
string(7) "nearest"
73+
}
74+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
75+
["mode"]=>
76+
string(7) "nearest"
77+
}
78+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
79+
["mode"]=>
80+
string(7) "nearest"
81+
}
82+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
83+
["mode"]=>
84+
string(7) "nearest"
85+
}
86+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
87+
["mode"]=>
88+
string(7) "nearest"
89+
}
90+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
91+
["mode"]=>
92+
string(7) "nearest"
93+
}
94+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
95+
["mode"]=>
96+
string(18) "secondaryPreferred"
97+
}
98+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
99+
["mode"]=>
100+
string(18) "secondaryPreferred"
101+
}
102+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
103+
["mode"]=>
104+
string(7) "primary"
105+
}
106+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
107+
["mode"]=>
108+
string(18) "secondaryPreferred"
109+
}
110+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
111+
["mode"]=>
112+
string(18) "secondaryPreferred"
113+
}
114+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
115+
["mode"]=>
116+
string(18) "secondaryPreferred"
117+
}
118+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
119+
["mode"]=>
120+
string(18) "secondaryPreferred"
121+
}
122+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
123+
["mode"]=>
124+
string(7) "primary"
125+
}
126+
object(MongoDB\Driver\ReadPreference)#%d (%d) {
127+
["mode"]=>
128+
string(7) "primary"
129+
}
130+
===DONE===

0 commit comments

Comments
 (0)