def test_init(self):
        path = '%s/unittest-init' % self.sandbox
        data = {'unittest': 'data'}
        reg1 = RegistrationBase(zk=self.zk, path=path, data=data)

        # Ensure that the initial state of the RegistrationBase object
        # includes the original supplied data, the encoded, and the
        # decoded data bits that will be used for comparison later.
        self.assertFalse(reg1._ephemeral)
        self.assertFalse(reg1._state)
        self.assertEquals(path, reg1._path)
        self.assertEquals(data, reg1._data)
        self.assertTrue('unittest' in reg1._encoded_data)
        self.assertTrue('unittest' in reg1._decoded_data)

        # The RegistrationBase object does not aggressively set the data
        # or path in Zookeeper at instantiation time, so the returned data
        # should be None.
        self.assertEquals(None, reg1._watcher.get()['data'])
        self.assertEquals(None, reg1._watcher.get()['stat'])

        # First, data() should return None because we havn't actively
        # registered the path.
        self.assertEquals(None, reg1.data())
        self.assertEquals({'path': path, 'stat': None,
                           'data': None, 'children': []}, reg1.get())
        self.assertFalse(reg1.state())
        self.assertEquals(None, self.zk.exists(path))

        # Tear down the object
        reg1.stop()
    def test_start(self):
        path = '%s/unittest-start' % self.sandbox
        data = {'unittest': 'data'}
        reg1 = RegistrationBase(zk=self.zk, path=path, data=data)

        # Now register the path and wait until reg1.data() returns some data
        # other than None. If it doesn't after 5 seconds, fail.
        reg1.start()
        waituntil(reg1.data, None, 5)

        # Now that some data is back, make sure that its correct in zookeeper,
        # and in the Registration object.
        self.assertTrue(self.zk.exists(path))
        data = self.zk.get(path)[0]
        self.assertTrue('created' in reg1.data() and 'created' in data)
        self.assertTrue('pid' in reg1.data() and 'pid' in data)
        self.assertTrue('unittest' in reg1.data() and 'unittest' in data)
        self.assertTrue(reg1.state())

        # Tear down the object
        reg1.stop()
    def test_stop(self):
        path = '%s/unittest-update' % self.sandbox
        data = {'unittest': 'data'}
        reg1 = RegistrationBase(zk=self.zk, path=path, data=data)

        # Now register the path and wait until reg1.data() returns some data
        # other than None. If it doesn't after 5 seconds, fail.
        reg1.start()
        waituntil(reg1.data, None, 5)
        self.assertTrue(self.zk.exists(path))

        # Now, test shutting the node down
        current_stat = reg1.get()
        reg1.stop()
        waituntil(reg1.get, current_stat, 5)
        self.assertEquals(None, reg1.get()['stat'])
        self.assertFalse(reg1.state())
        self.assertEquals(None, self.zk.exists(path))
Пример #4
0
    def test_start_acl_behavior(self):
        # Set up a username/password so an ACL is created
        ACL = security.make_digest_acl('user', 'password', all=True)
        self.zk.add_auth('digest', 'user:password')
        self.zk.default_acl = [ACL]

        # Test creating a nested path, and validate that the ACLs for
        # that neseted path are setup properly
        path = '%s/unit/test/host:22' % self.sandbox
        data = {}
        reg1 = RegistrationBase(zk=self.zk, path=path, data=data)

        # Now registre the path and wait for it to finish
        reg1.start()
        waituntil(reg1.data, None, 5)

        # Now, lets check the ACL for each path that would have
        # been created.
        self.assertEquals(security.OPEN_ACL_UNSAFE,
                          self.zk.get_acls('%s/unit' % self.sandbox)[0])
        self.assertEquals([ACL],
                          self.zk.get_acls('%s/unit/test' % self.sandbox)[0])
    def test_start_acl_behavior(self):
        # Set up a username/password so an ACL is created
        ACL = security.make_digest_acl('user', 'password', all=True)
        self.zk.add_auth('digest', 'user:password')
        self.zk.default_acl = [ACL]

        # Test creating a nested path, and validate that the ACLs for
        # that neseted path are setup properly
        path = '%s/unit/test/host:22' % self.sandbox
        data = {}
        reg1 = RegistrationBase(zk=self.zk, path=path, data=data)

        # Now registre the path and wait for it to finish
        reg1.start()
        waituntil(reg1.data, None, 5)

        # Now, lets check the ACL for each path that would have
        # been created.
        self.assertEquals(
            security.OPEN_ACL_UNSAFE,
            self.zk.get_acls('%s/unit' % self.sandbox)[0])
        self.assertEquals(
            [ACL], self.zk.get_acls('%s/unit/test' % self.sandbox)[0])
    def test_update(self):
        path = '%s/unittest-update' % self.sandbox
        data = {'unittest': 'data'}
        reg1 = RegistrationBase(zk=self.zk, path=path, data=data)

        # Now register the path and wait until reg1.data() returns some data
        # other than None. If it doesn't after 5 seconds, fail.
        reg1.start()
        waituntil(reg1.data, None, 5)

        # Test updating the data now that its registered
        current_data = reg1.data()
        reg1.set_data('foobar')
        waituntil(reg1.data, current_data, 5)
        self.assertEquals('foobar', reg1.data()['string_value'])
        self.assertTrue('foobar' in self.zk.get(path)[0])

        # Test disabling the node through the update() method
        current_data = reg1.data()
        reg1.update(None, False)
        waituntil(reg1.data, current_data, 5)
        self.assertFalse(reg1.state())
        self.assertEquals({'path': path, 'stat': None,
                           'data': None, 'children': []}, reg1.get())
        self.assertEquals(None, self.zk.exists(path))