Exemplo n.º 1
0
  def test_canceled_join_long_time(self):
    zk = self.make_zk(self._server.ensemble)
    zk.live.wait()
    session_id = self.session_id(zk)
    ss = ServerSet(zk, self.SERVICE_PATH)
    join_signal = threading.Event()
    memberships = []

    def on_expire():
      pass

    def do_join():
      memberships.append(ss.join(self.INSTANCE1, expire_callback=on_expire))

    class JoinThread(threading.Thread):
      def run(_):
        while True:
          join_signal.wait()
          join_signal.clear()
          do_join()

    joiner = JoinThread()
    joiner.daemon = True
    joiner.start()

    do_join()
    assert len(memberships) == 1 and memberships[0] is not Membership.error()
    self._server.expire(session_id)
    self._server.shutdown()
    join_signal.set()
    self._server.start()
    while len(memberships) == 1:
      time.sleep(0.1)
    assert len(memberships) == 2 and memberships[1] is not Membership.error()
Exemplo n.º 2
0
 def test_against_alternate_groups(self):
   zkg1 = self.GroupImpl(self._zk, '/test')
   zkg2 = self.AlternateGroupImpl(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'
Exemplo n.º 3
0
 def test_against_alternate_groups(self):
     zkg1 = self.GroupImpl(self._zk, '/test')
     zkg2 = self.AlternateGroupImpl(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'
Exemplo n.º 4
0
def test_internal_monitor(mock_group_impl_validator, MockActiveKazooGroup):
    mock_zk = mock.Mock(spec=KazooClient)
    mock_group = mock.MagicMock(spec=GroupInterface)
    MockActiveKazooGroup.mock_add_spec(ActiveKazooGroup)
    MockActiveKazooGroup.return_value = mock_group

    # by default it tries to assert that the group impl is a subclass of GroupInterface
    # since the group impl will be a mock, it doesn't pass that check, so we mock the validator
    # as well.
    mock_group_impl_validator.return_value = True

    def devnull(*args, **kwargs):
        pass

    serverset = ServerSet(mock_zk,
                          '/some/path/to/group',
                          on_join=devnull,
                          on_leave=devnull)

    members = [Membership(id) for id in range(2)]

    print("Members are: %s" % members)
    serverset._internal_monitor(frozenset(members))

    for call in mock_group.info.mock_calls:
        _, (_, callback), _ = call
        callback(ServiceInstance.unpack(SERVICE_INSTANCE_JSON))

    assert len(serverset._members) == 2
Exemplo n.º 5
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=self.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=self.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=self.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])
Exemplo n.º 6
0
 def test_hard_root_acl(self):
   secure_zk = self.make_zk(self._server.ensemble, authentication=('digest', 'username:password'))
   secure_zk.live.wait()
   secure_zk.create('/test', '', self.ACLS['EVERYONE_READ_CREATOR_ALL'])
   secure_zk.set_acl('/', 0, self.ACLS['READ_ACL_UNSAFE'])
   secure_zkg = self.GroupImpl(secure_zk, '/test', acl=self.ACLS['EVERYONE_READ_CREATOR_ALL'])
   membership = secure_zkg.join('secure hello world')
   assert membership != Membership.error()
   assert secure_zkg.info(membership) == 'secure hello world'
Exemplo n.º 7
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])
Exemplo n.º 8
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])
Exemplo n.º 9
0
 def test_hard_root_acl(self):
     secure_zk = self.make_zk(self._server.ensemble,
                              authentication=('digest',
                                              'username:password'))
     secure_zk.live.wait()
     secure_zk.create('/test', '', self.ACLS['EVERYONE_READ_CREATOR_ALL'])
     secure_zk.set_acl('/', 0, self.ACLS['READ_ACL_UNSAFE'])
     secure_zkg = self.GroupImpl(secure_zk,
                                 '/test',
                                 acl=self.ACLS['EVERYONE_READ_CREATOR_ALL'])
     membership = secure_zkg.join('secure hello world')
     assert membership != Membership.error()
     assert secure_zkg.info(membership) == 'secure hello world'
Exemplo n.º 10
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])
Exemplo n.º 11
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])
Exemplo n.º 12
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.session_id(self._zk))
   membership_event.wait()
   assert members == []
   assert zkg.info(membership) == Membership.error()
   membership = zkg.join('herp derp')
   assert zkg.info(membership) == 'herp derp'
Exemplo n.º 13
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.session_id(self._zk))
        membership_event.wait()
        assert members == []
        assert zkg.info(membership) == Membership.error()
        membership = zkg.join('herp derp')
        assert zkg.info(membership) == 'herp derp'
Exemplo n.º 14
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=self.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=self.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=self.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])
Exemplo n.º 15
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'
Exemplo n.º 16
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'