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