@@ -44,31 +44,52 @@ def test_list_versions_localTime():
44
44
'snapshots' : 'snap' }
45
45
46
46
47
+ def test__read_preference__allow_secondary_true ():
48
+ self = create_autospec (VersionStore )
49
+ assert VersionStore ._read_preference (self , True ) == ReadPreference .NEAREST
50
+
51
+
52
+ def test__read_preference__allow_secondary_false ():
53
+ self = create_autospec (VersionStore )
54
+ assert VersionStore ._read_preference (self , False ) == ReadPreference .PRIMARY
55
+
56
+
57
+ def test__read_preference__default_true ():
58
+ self = create_autospec (VersionStore , _allow_secondary = True )
59
+ assert VersionStore ._read_preference (self , None ) == ReadPreference .NEAREST
60
+
61
+
62
+ def test__read_preference__default_false ():
63
+ self = create_autospec (VersionStore , _allow_secondary = False )
64
+ assert VersionStore ._read_preference (self , None ) == ReadPreference .PRIMARY
65
+
66
+
47
67
def test_get_version_allow_secondary_True ():
48
68
vs = create_autospec (VersionStore , instance = True ,
49
69
_versions = Mock ())
50
- vs ._allow_secondary = True
70
+ vs ._read_preference . return_value = sentinel . read_preference
51
71
vs ._find_snapshots .return_value = 'snap'
52
72
vs ._versions .find .return_value = [{'_id' : bson .ObjectId .from_datetime (dt (2013 , 4 , 1 , 9 , 0 )),
53
73
'symbol' : 's' , 'version' : 10 }]
54
74
55
75
VersionStore .read (vs , "symbol" )
56
- assert vs ._read_metadata .call_args_list == [call ('symbol' , as_of = None , read_preference = ReadPreference . NEAREST )]
57
- assert vs ._do_read .call_args_list == [call ('symbol' , vs ._read_metadata .return_value , None , read_preference = ReadPreference . NEAREST )]
76
+ assert vs ._read_metadata .call_args_list == [call ('symbol' , as_of = None , read_preference = sentinel . read_preference )]
77
+ assert vs ._do_read .call_args_list == [call ('symbol' , vs ._read_metadata .return_value , None , read_preference = sentinel . read_preference )]
58
78
59
79
60
80
def test_get_version_allow_secondary_user_override_False ():
61
81
"""Ensure user can override read preference when calling read"""
62
82
vs = create_autospec (VersionStore , instance = True ,
63
83
_versions = Mock ())
64
- vs ._allow_secondary = True
84
+ vs ._read_preference . return_value = sentinel . read_preference
65
85
vs ._find_snapshots .return_value = 'snap'
66
86
vs ._versions .find .return_value = [{'_id' : bson .ObjectId .from_datetime (dt (2013 , 4 , 1 , 9 , 0 )),
67
87
'symbol' : 's' , 'version' : 10 }]
68
88
69
89
VersionStore .read (vs , "symbol" , allow_secondary = False )
70
- assert vs ._read_metadata .call_args_list == [call ('symbol' , as_of = None , read_preference = ReadPreference .PRIMARY )]
71
- assert vs ._do_read .call_args_list == [call ('symbol' , vs ._read_metadata .return_value , None , read_preference = ReadPreference .PRIMARY )]
90
+ assert vs ._read_metadata .call_args_list == [call ('symbol' , as_of = None , read_preference = sentinel .read_preference )]
91
+ assert vs ._do_read .call_args_list == [call ('symbol' , vs ._read_metadata .return_value , None , read_preference = sentinel .read_preference )]
92
+ vs ._read_preference .assert_called_once_with (False )
72
93
73
94
74
95
def test_read_as_of_LondonTime ():
@@ -176,17 +197,17 @@ def test_prune_previous_versions_0_timeout():
176
197
177
198
178
199
def test_read_handles_operation_failure ():
179
- self = create_autospec (VersionStore , _versions = Mock (), _arctic_lib = Mock (),
180
- _allow_secondary = True )
200
+ self = create_autospec (VersionStore , _versions = Mock (), _arctic_lib = Mock ())
201
+ self . _read_preference . return_value = sentinel . read_preference
181
202
self ._collection = create_autospec (Collection )
182
203
self ._read_metadata .side_effect = [sentinel .meta1 , sentinel .meta2 ]
183
204
self ._read_metadata .__name__ = 'name'
184
205
self ._do_read .__name__ = 'name' # feh: mongo_retry decorator cares about this
185
206
self ._do_read .side_effect = [OperationFailure ('error' ), sentinel .read ]
186
207
VersionStore .read (self , sentinel .symbol , sentinel .as_of , sentinel .from_version )
187
- # Assert that, for the two read calls, the second uses the new metadata
208
+ # Assert that, for the two read calls, the second uses the new metadata and forces a read from primary
188
209
assert self ._do_read .call_args_list == [call (sentinel .symbol , sentinel .meta1 , sentinel .from_version ,
189
- read_preference = ReadPreference . NEAREST )]
210
+ read_preference = sentinel . read_preference )]
190
211
assert self ._do_read_retry .call_args_list == [call (sentinel .symbol , sentinel .meta2 , sentinel .from_version ,
191
212
read_preference = ReadPreference .PRIMARY )]
192
213
0 commit comments