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))
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))