Exemple #1
0
def test_async_while_headless():
    server = ZookeeperServer()

    disconnected = threading.Event()

    def on_event(zk, event, state, _):
        if zk._live.is_set() and state != zookeeper.CONNECTED_STATE:
            disconnected.set()

    zk = make_zk(server, watch=on_event)

    children = []
    completion_event = threading.Event()

    def children_completion(_, rc, results):
        children.extend(results)
        completion_event.set()

    assert server.shutdown()
    disconnected.wait(timeout=MAX_EVENT_WAIT_SECS)
    assert disconnected.is_set()

    zk.aget_children('/', None, children_completion)

    assert server.start()
    completion_event.wait(timeout=MAX_EVENT_WAIT_SECS)
    assert completion_event.is_set()

    assert children == ['zookeeper']

    server.stop()
Exemple #2
0
def test_session_event():
    with ZookeeperServer() as server:
        disconnected = threading.Event()

        def on_event(zk, event, state, _):
            if zk._live.is_set() and state != zookeeper.CONNECTED_STATE:
                disconnected.set()

        zk = ZooKeeper(server.ensemble, watch=on_event)
        session_id = zk.session_id()

        children = []
        completion_event = threading.Event()

        def children_completion(_, rc, results):
            children.extend(results)
            completion_event.set()

        server.shutdown()
        disconnected.wait(timeout=MAX_EVENT_WAIT_SECS)
        assert disconnected.is_set()

        zk.aget_children('/', None, children_completion)

        # expire session
        server.expire(session_id)
        server.start()

        completion_event.wait(timeout=MAX_EVENT_WAIT_SECS)
        assert completion_event.is_set()
        assert children == ['zookeeper']
Exemple #3
0
def test_stopped():
    with ZookeeperServer() as server:
        zk = ZooKeeper('localhost:%d' % server.zookeeper_port)
        assert zk.get_children('/') == ['zookeeper']
        zk.stop()
        with pytest.raises(ZooKeeper.Stopped):
            zk.get_children('/')
Exemple #4
0
def test_metrics():
    with ZookeeperServer() as server:
        event = threading.Event()

        def watch_set(*args):
            event.set()

        zk = ZooKeeper(server.ensemble, watch=watch_set)
        zk._live.wait(timeout=MAX_EVENT_WAIT_SECS)
        sample = zk.metrics.sample()
        assert sample['live'] == 1
        assert sample['session_id'] == zk.session_id
        assert sample['session_expirations'] == 0
        assert sample['connection_losses'] == 0
        old_session_id = zk.session_id

        event.clear()
        server.expire(zk.session_id)
        event.wait(timeout=MAX_EXPIRE_WAIT_SECS)
        zk._live.wait(timeout=MAX_EVENT_WAIT_SECS)

        sample = zk.metrics.sample()
        assert sample['live'] == 1
        assert sample['session_id'] == zk.session_id
        assert old_session_id != zk.session_id
        assert sample['session_expirations'] == 1
def test_metrics():
    with ZookeeperServer() as server:
        event = threading.Event()

        def state_change(state):
            event.set()
            return True

        zk = TwitterKazooClient('localhost:%d' % server.zookeeper_port)
        zk.start()
        zk.live.wait(timeout=MAX_EVENT_WAIT_SECS)
        zk.add_listener(state_change)
        sample = zk.metrics.sample()
        assert sample['session_id'] == zk._session_id
        assert sample['session_expirations'] == 0
        assert sample['connection_losses'] == 0
        old_session_id = zk._session_id

        server.expire(zk._session_id)
        event.wait(timeout=MAX_EVENT_WAIT_SECS)

        zk.live.wait(timeout=MAX_EVENT_WAIT_SECS)

        sample = zk.metrics.sample()
        assert sample['session_id'] == zk._session_id
        assert old_session_id != zk._session_id
        assert sample['session_expirations'] == 1
        assert sample['connection_losses'] > 0
Exemple #6
0
def test_client_connect_with_auth():
    with ZookeeperServer() as server:
        zk = make_zk(server, authentication=('digest', 'username:password'))
        finish_event = threading.Event()

        def run_create_tests():
            zk.create('/unprotected_znode', 'unprotected content',
                      ZooDefs.Acls.OPEN_ACL_UNSAFE)
            _, unprotected_acl = zk.get_acl('/unprotected_znode')
            zk.create('/protected_znode', 'protected content',
                      ZooDefs.Acls.CREATOR_ALL_ACL)
            _, protected_acl = zk.get_acl('/protected_znode')
            assert unprotected_acl == ZooDefs.Acls.OPEN_ACL_UNSAFE
            assert len(protected_acl) == 1
            assert protected_acl[0]['perms'] == ZooDefs.Acls.CREATOR_ALL_ACL[
                0]['perms']
            assert protected_acl[0]['scheme'] == 'digest'
            assert protected_acl[0][
                'id'] == 'username:%s' % sha_password_digest(
                    'username', 'password')
            content, _ = zk.get('/unprotected_znode')
            assert content == 'unprotected content'
            content, _ = zk.get('/protected_znode')
            assert content == 'protected content'
            zk.delete('/unprotected_znode')
            zk.delete('/protected_znode')
            finish_event.set()

        # run normally
        run_create_tests()
        finish_event.wait()

        # run after connection loss
        assert server.shutdown()
        finish_event.clear()

        class BackgroundTester(threading.Thread):
            def run(self):
                run_create_tests()

        BackgroundTester().start()
        server.start()
        finish_event.wait()

        # run after session loss
        session_id = zk.session_id
        assert server.shutdown()
        finish_event.clear()
        BackgroundTester().start()
        server.expire(session_id)
        server.start()
        finish_event.wait()
Exemple #7
0
def test_safe_operations():
    with ZookeeperServer() as server:
        zk = ZooKeeper(server.ensemble)
        assert zk.safe_create('/a/b/c/d') == '/a/b/c/d'
        session_id = zk.session_id()

        finish_event = threading.Event()

        class CreateThread(threading.Thread):
            def run(self):
                zk.safe_create('/foo/bar/baz/bak')
                finish_event.set()

        server.shutdown()
        server.expire(session_id)

        ct = CreateThread()
        ct.start()
        server.start()
        finish_event.wait(timeout=MAX_EXPIRE_WAIT_SECS)
        assert finish_event.is_set()
        assert zk.exists('/a/b/c/d')
        assert zk.exists('/foo/bar/baz/bak')

        session_id = zk.session_id()

        assert zk.safe_delete('/a')

        delete_event = threading.Event()

        class DeleteThread(threading.Thread):
            def run(self):
                zk.safe_delete('/foo')
                delete_event.set()

        server.shutdown()
        server.expire(session_id)

        dt = DeleteThread()
        dt.start()
        server.start()

        delete_event.wait(timeout=MAX_EXPIRE_WAIT_SECS)
        assert delete_event.is_set()
        assert not zk.exists('/a')
        assert not zk.exists('/foo')
Exemple #8
0
def test_safe_create():
    with ZookeeperServer() as server:
        zk_auth = ZooKeeper(server.ensemble,
                            authentication=('digest', 'jack:jill'))

        zk_auth.safe_create('/a', acl=ZooDefs.Acls.EVERYONE_READ_CREATOR_ALL)
        assert zk_auth.exists('/a')

        zk_noauth = ZooKeeper(server.ensemble)
        with pytest.raises(zookeeper.NoAuthException):
            zk_noauth.safe_create('/a/b')
        assert not zk_auth.exists('/a/b')

        zk_auth.safe_create('/a/b', acl=ZooDefs.Acls.OPEN_ACL_UNSAFE)
        assert zk_noauth.exists('/a/b')

        zk_noauth.safe_create('/a/b/c')
        assert zk_noauth.exists('/a/b/c')
Exemple #9
0
def test_client_reconnect():
    with ZookeeperServer() as server:
        zk = make_zk(server)
        zk.get_children('/')
        assert server.shutdown()

        # zk.get_children should block until reconnected
        children = []

        class GetThread(threading.Thread):
            def run(self):
                children.extend(zk.get_children('/'))

        gt = GetThread()
        gt.start()

        assert server.start()
        gt.join()

        assert children == ['zookeeper']
Exemple #10
0
def test_client_stops_propagate_through_completions():
    with ZookeeperServer() as server:
        zk = ZooKeeper('localhost:%d' % server.zookeeper_port)
        server.shutdown()

        # zk.get_children should block until reconnected
        stopped_event = threading.Event()

        class GetThread(threading.Thread):
            def run(self):
                try:
                    zk.get_children('/')
                except ZooKeeper.Stopped:
                    stopped_event.set()

        gt = GetThread()
        gt.start()
        time.sleep(0.1)  # guarantee an interpreter thread yield

        zk.stop()
        stopped_event.wait(timeout=MAX_EVENT_WAIT_SECS)
        assert stopped_event.is_set()
Exemple #11
0
 def setUp(self):
   self._server = ZookeeperServer()
   self._zk = self.make_zk(self._server.ensemble)
 def setUp(self):
     self._server = ZookeeperServer()
Exemple #13
0
def test_client_connect():
    with ZookeeperServer() as server:
        zk = make_zk(server)
        assert zk.get_children('/') == ['zookeeper']
Exemple #14
0
 def setUp(self):
     if GroupTestBase.SERVER is None:
         GroupTestBase.SERVER = ZookeeperServer()
     self._server = GroupTestBase.SERVER
     self._server.restart()
     self._zk = self.make_zk(self._server.ensemble)