def test_against_alternate_groups(self): zkg1 = self.GroupImpl(self._zk, '/test') zkg2 = AlternateGroup(self._zk, '/test') assert zkg1.list() == [] assert zkg2.list() == [] m1 = zkg1.join('morf gorf') assert len(zkg1.list()) == 1 assert len(zkg2.list()) == 0 m2 = zkg2.join('herp derp') assert len(zkg1.list()) == 1 assert len(zkg2.list()) == 1 assert zkg1.info(m1) == 'morf gorf' assert zkg1.info(m2) == Membership.error() assert zkg2.info(m1) == Membership.error() assert zkg2.info(m2) == 'herp derp'
def test_authentication(self): secure_zk = self.make_zk(self._server.ensemble, authentication=('digest', 'username:password')) # auth => unauth zkg = self.GroupImpl(self._zk, '/test') secure_zkg = self.GroupImpl(secure_zk, '/test', acl=ZooDefs.Acls.EVERYONE_READ_CREATOR_ALL) membership = zkg.join('hello world') assert secure_zkg.info(membership) == 'hello world' membership = secure_zkg.join('secure hello world') assert zkg.info(membership) == 'secure hello world' # unauth => auth zkg = self.GroupImpl(self._zk, '/secure-test') secure_zkg = self.GroupImpl(secure_zk, '/secure-test', acl=ZooDefs.Acls.EVERYONE_READ_CREATOR_ALL) membership = secure_zkg.join('hello world') assert zkg.info(membership) == 'hello world' assert zkg.join('unsecure hello world') == Membership.error() # unauth => auth monitor zkg = self.GroupImpl(self._zk, '/secure-test2') secure_zkg = self.GroupImpl(secure_zk, '/secure-test2', acl=ZooDefs.Acls.EVERYONE_READ_CREATOR_ALL) membership_event = threading.Event() members = set() def new_membership(m): members.update(m) membership_event.set() zkg.monitor(callback=new_membership) membership = secure_zkg.join('hello world') membership_event.wait(timeout=1.0) assert membership_event.is_set() assert members == set([membership])
def test_hard_root_acl(self): secure_zk = self.make_zk(self._server.ensemble, authentication=('digest', 'username:password')) secure_zk.create('/test', '', ZooDefs.Acls.EVERYONE_READ_CREATOR_ALL) secure_zk.set_acl('/', 0, ZooDefs.Acls.READ_ACL_UNSAFE) secure_zkg = self.GroupImpl(secure_zk, '/test', acl=ZooDefs.Acls.EVERYONE_READ_CREATOR_ALL) membership = secure_zkg.join('secure hello world') assert membership != Membership.error() assert secure_zkg.info(membership) == 'secure hello world'
def test_async_join(self): zkg = self.GroupImpl(self._zk, '/test') event = threading.Event() memberships = [] def on_join(membership): memberships.append(membership) event.set() zkg.join('hello world', callback=on_join) event.wait() assert len(memberships) == 1 and memberships[0] != Membership.error() zkg.cancel(memberships[0])
def test_monitor_through_parent_death(self): zkg = self.GroupImpl(self._zk, '/test') membership_event = threading.Event() members = set() def new_membership(m): members.update(m) membership_event.set() zkg.monitor(callback=new_membership) membership = zkg.join('hello world') assert membership != Membership.error() membership_event.wait(timeout=self.MAX_EVENT_WAIT_SECS) assert membership_event.is_set() assert members == set([membership]) membership_event.clear() members.clear() zkg.monitor(set([membership]), callback=new_membership) zkg.cancel(membership) membership_event.wait(timeout=self.MAX_EVENT_WAIT_SECS) assert membership_event.is_set() assert members == set() membership_event.clear() members.clear() zkg.monitor(callback=new_membership) self._zk.delete('/test') membership = zkg.join('hello world 2') assert membership != Membership.error() membership_event.wait(timeout=self.MAX_EVENT_WAIT_SECS) assert membership_event.is_set() assert members == set([membership])
def test_info_after_expiration(self): zkg = self.GroupImpl(self._zk, '/test') membership = zkg.join('hello world') assert zkg.info(membership) == 'hello world' membership_event = threading.Event() members = [membership] def on_membership(new_membership): members[:] = new_membership membership_event.set() zkg.monitor(members, on_membership) self._server.expire(self._zk.session_id()) membership_event.wait() assert members == [] assert zkg.info(membership) == Membership.error() membership = zkg.join('herp derp') assert zkg.info(membership) == 'herp derp'
def test_sync_join(self): zkg = self.GroupImpl(self._zk, '/test') membership = zkg.join('hello world') assert isinstance(membership, Membership) assert membership != Membership.error() assert zkg.info(membership) == 'hello world'