mirror of
https://github.com/outbackdingo/patroni.git
synced 2026-01-27 18:20:05 +00:00
the main issue was that the configuration for Citus handler and for DCS existed in two places, while ideally AbstractDCS should not know many details about what kind of MPP is in use. To solve the problem we first dynamically create an object implementing AbstractMPP interfaces, which is a configuration for DCS. Later this object is used to instantiate the class implementing AbstractMPPHandler interface. This is just a starting point, which does some heavy lifting. As a next steps all kind of variables named after Citus in files different from patroni/postgres/mpp/citus.py should be renamed. In other words this commit takes over the most complex part of #2940, which was never implemented. Co-authored-by: zhjwpku <zhjwpku@gmail.com>
38 lines
1.5 KiB
Python
38 lines
1.5 KiB
Python
import unittest
|
|
import urllib3
|
|
|
|
from mock import Mock, patch
|
|
from patroni.dcs import get_dcs
|
|
from patroni.dcs.exhibitor import ExhibitorEnsembleProvider, Exhibitor
|
|
from patroni.dcs.zookeeper import ZooKeeperError
|
|
|
|
from . import SleepException, requests_get
|
|
from .test_zookeeper import MockKazooClient
|
|
|
|
|
|
@patch('patroni.dcs.exhibitor.requests_get', requests_get)
|
|
@patch('time.sleep', Mock(side_effect=SleepException))
|
|
class TestExhibitorEnsembleProvider(unittest.TestCase):
|
|
|
|
def test_init(self):
|
|
self.assertRaises(SleepException, ExhibitorEnsembleProvider, ['localhost'], 8181)
|
|
|
|
def test_poll(self):
|
|
self.assertFalse(ExhibitorEnsembleProvider(['exhibitor'], 8181).poll())
|
|
|
|
|
|
class TestExhibitor(unittest.TestCase):
|
|
|
|
@patch('urllib3.PoolManager.request', Mock(return_value=urllib3.HTTPResponse(
|
|
status=200, body=b'{"servers":["127.0.0.1","127.0.0.2","127.0.0.3"],"port":2181}')))
|
|
@patch('patroni.dcs.zookeeper.PatroniKazooClient', MockKazooClient)
|
|
def setUp(self):
|
|
self.e = get_dcs({'exhibitor': {'hosts': ['localhost', 'exhibitor'], 'port': 8181},
|
|
'scope': 'test', 'name': 'foo', 'ttl': 30, 'retry_timeout': 10})
|
|
self.assertIsInstance(self.e, Exhibitor)
|
|
|
|
@patch.object(ExhibitorEnsembleProvider, 'poll', Mock(return_value=True))
|
|
@patch.object(MockKazooClient, 'get_children', Mock(side_effect=Exception))
|
|
def test_get_cluster(self):
|
|
self.assertRaises(ZooKeeperError, self.e.get_cluster)
|