Exemple #1
0
 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'
Exemple #2
0
  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])
Exemple #3
0
 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'
Exemple #4
0
 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])
Exemple #5
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])
Exemple #6
0
 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'
Exemple #7
0
 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'