181
196
self.assertEquals(peerstorage.peer_retrieve_by_prefix(rel_id,
182
197
inc_list=['host']),
183
198
{'host': 'myhost'})
200
def test_leader_get_migration_is_leader(self):
201
self.is_leader.return_value = True
202
l_settings = {'s3': 3}
203
r_settings = {'s1': 1, 's2': 2}
205
def mock_relation_get(attribute=None, unit=None):
207
if attribute in r_settings:
208
return r_settings.get(attribute)
212
return copy.deepcopy(r_settings)
214
def mock_leader_get(attribute=None):
216
if attribute in l_settings:
217
return l_settings.get(attribute)
221
return copy.deepcopy(l_settings)
223
def mock_leader_set(settings=None, **kwargs):
225
l_settings.update(settings)
227
l_settings.update(kwargs)
229
def check_leader_db(dicta, dictb):
230
_dicta = copy.deepcopy(dicta)
231
_dictb = copy.deepcopy(dictb)
232
miga = json.loads(_dicta[migration_key]).sort()
233
migb = json.loads(_dictb[migration_key]).sort()
234
self.assertEqual(miga, migb)
235
del _dicta[migration_key]
236
del _dictb[migration_key]
237
self.assertEqual(_dicta, _dictb)
239
migration_key = '__leader_get_migrated_settings__'
240
self.relation_get.side_effect = mock_relation_get
241
self._leader_get.side_effect = mock_leader_get
242
self.leader_set.side_effect = mock_leader_set
244
self.assertEqual({'s1': 1, 's2': 2}, peerstorage.relation_get())
245
self.assertEqual({'s3': 3}, peerstorage._leader_get())
246
self.assertEqual({'s1': 1, 's2': 2, 's3': 3}, peerstorage.leader_get())
247
check_leader_db({'s1': 1, 's2': 2, 's3': 3,
248
migration_key: '["s2", "s1"]'}, l_settings)
249
self.assertTrue(peerstorage.leader_set.called)
251
peerstorage.leader_set.reset_mock()
252
self.assertEqual({'s1': 1, 's2': 2, 's3': 3}, peerstorage.leader_get())
253
check_leader_db({'s1': 1, 's2': 2, 's3': 3,
254
migration_key: '["s2", "s1"]'}, l_settings)
255
self.assertFalse(peerstorage.leader_set.called)
257
l_settings = {'s3': 3}
258
peerstorage.leader_set.reset_mock()
259
self.assertEqual(1, peerstorage.leader_get('s1'))
260
check_leader_db({'s1': 1, 's3': 3,
261
migration_key: '["s1"]'}, l_settings)
262
self.assertTrue(peerstorage.leader_set.called)
264
# Test that leader vals take precedence over non-leader vals
269
peerstorage.leader_set.reset_mock()
270
self.assertEqual(4, peerstorage.leader_get('s4'))
271
check_leader_db({'s1': 1, 's3': 3, 's4': 4,
272
migration_key: '["s1", "s4"]'}, l_settings)
273
self.assertTrue(peerstorage.leader_set.called)
275
peerstorage.leader_set.reset_mock()
276
self.assertEqual({'s1': 1, 's2': 2, 's3': 2, 's4': 3},
277
peerstorage.relation_get())
278
check_leader_db({'s1': 1, 's3': 3, 's4': 4,
279
migration_key: '["s1", "s4"]'},
280
peerstorage._leader_get())
281
self.assertEqual({'s1': 1, 's2': 2, 's3': 3, 's4': 4},
282
peerstorage.leader_get())
283
check_leader_db({'s1': 1, 's2': 2, 's3': 3, 's4': 4,
284
migration_key: '["s3", "s2", "s1", "s4"]'},
286
self.assertTrue(peerstorage.leader_set.called)
288
def test_leader_get_migration_is_not_leader(self):
289
self.is_leader.return_value = False
290
l_settings = {'s3': 3}
291
r_settings = {'s1': 1, 's2': 2}
293
def mock_relation_get(attribute=None, unit=None):
295
if attribute in r_settings:
296
return r_settings.get(attribute)
300
return copy.deepcopy(r_settings)
302
def mock_leader_get(attribute=None):
304
if attribute in l_settings:
305
return l_settings.get(attribute)
309
return copy.deepcopy(l_settings)
311
def mock_leader_set(settings=None, **kwargs):
313
l_settings.update(settings)
315
l_settings.update(kwargs)
317
self.relation_get.side_effect = mock_relation_get
318
self._leader_get.side_effect = mock_leader_get
319
self.leader_set.side_effect = mock_leader_set
320
self.assertEqual({'s1': 1, 's2': 2}, peerstorage.relation_get())
321
self.assertEqual({'s3': 3}, peerstorage._leader_get())
322
self.assertEqual({'s3': 3}, peerstorage.leader_get())
323
self.assertEqual({'s3': 3}, l_settings)
324
self.assertFalse(peerstorage.leader_set.called)
326
self.assertEqual({'s3': 3}, peerstorage.leader_get())
327
self.assertEqual({'s3': 3}, l_settings)
328
self.assertFalse(peerstorage.leader_set.called)
330
# Test that leader vals take precedence over non-leader vals
335
self.assertEqual(4, peerstorage.leader_get('s4'))
336
self.assertEqual({'s3': 3, 's4': 4}, l_settings)
337
self.assertFalse(peerstorage.leader_set.called)