def test_execute_ReplyError_to_many_retries(self): self.client._get_slot_info = Mock() self.client._get_slot_info.side_effect = [ 'host1_12345', 'host2_12345', 'host3_12345', 'host4_12345' ] conn1 = Mock() conn1.read.side_effect = [ReplyError('MOVED 42 host2:12345')] conn2 = Mock() conn2.read.side_effect = [ReplyError('MOVED 42 host2:12345')] conn3 = Mock() conn3.read.side_effect = [ReplyError('MOVED 42 host2:12345')] conn4 = Mock() conn4.read.side_effect = [ReplyError('MOVED 42 host2:12345')] self.connection_mock.side_effect = [conn1, conn2, conn3, conn4] self.client._cleanup_conns = Mock() self.assertRaises(PyRedisError, self.client.execute, 'GET', 'test', shard_key='test') conn1.write.assert_called_with('GET', 'test') conn2.write.assert_called_with('GET', 'test') conn3.write.assert_called_with('GET', 'test') self.assertFalse(conn4.write.called)
def test_execute_ReplyError_ASK(self): self.client._get_slot_info = Mock() self.client._get_slot_info.return_value = 'host1_12345' conn1 = Mock() conn1.read.side_effect = [ReplyError('ASK 42 host2:12345')] conn2 = Mock() conn2.read.side_effect = ['success'] self.connection_mock.side_effect = [conn1, conn2] result = self.client.execute('GET', 'test', shard_key='test') self.assertEqual(result, 'success') conn1.write.assert_called_with('GET', 'test') conn2.write.assert_called_with('ASKING', 'GET', 'test')
def test_execute_ReplyError_MOVED(self): self.client._get_slot_info = Mock() self.client._get_slot_info.side_effect = ['host1_12345', 'host2_12345'] conn1 = Mock() conn1.read.side_effect = [ReplyError('MOVED 42 host2:12345')] conn2 = Mock() conn2.read.side_effect = ['success'] self.connection_mock.side_effect = [conn1, conn2] self.client._cleanup_conns = Mock() id = self.client._map_id result = self.client.execute('GET', 'test', shard_key='test') self.assertEqual(result, 'success') conn1.write.assert_called_with('GET', 'test') conn2.write.assert_called_with('GET', 'test') self.assertTrue(self.client._cleanup_conns.called) self.clustermap_inst.update.assert_called_with(id)