def test_set_data(self):
        path = '%s/unittest-set-data' % self.sandbox
        datanode = DataNode(zk=self.zk, path=path, data=None)

        # Now lets ensure that if we call set_data() that the data in Zookeeper
        # is updated at least once. It should not be, though, updated multiple
        # times.
        def get_string_value_from_datanode():
            if 'string_value' in datanode.get()['data']:
                return datanode.get()['data']['string_value']
            return False

        datanode.set_data('foo')
        waituntil(get_string_value_from_datanode, 'foo', 5, mode=2)
        (data, stat) = self.zk.get(path)
        for i in xrange(1, 10):
            datanode.set_data('foo')
        (data2, stat2) = self.zk.get(path)
        self.assertEquals(stat, stat2)

        # Ok, calling set_data() with the same data over and over again only
        # updates Zookeeper once. Good. Now what happens if the data in
        # Zookeeper changes and we call
        def get_string_value_from_watcher():
            if 'string_value' in datanode._watcher.get()['data']:
                return datanode._watcher.get()['data']['string_value']
            return False

        datanode.set_data('foo')
        (data, stat) = self.zk.get(path)
        self.zk.set(path, 'foobar')
        waituntil(get_string_value_from_watcher, 'foobar', 5, mode=2)
        datanode.set_data('foo')
        (data2, stat2) = self.zk.get(path)
        self.assertNotEquals(stat, stat2)
    def test_set_data(self):
        path = '%s/unittest-set-data' % self.sandbox
        datanode = DataNode(zk=self.zk, path=path, data=None)

        # Now lets ensure that if we call set_data() that the data in Zookeeper
        # is updated at least once. It should not be, though, updated multiple
        # times.
        def get_string_value_from_datanode():
            data = datanode.get()['data']

            if data is None:
                return False

            if 'string_value' in data:
                return data['string_value']

            return False

        datanode.set_data('foo')
        waituntil(get_string_value_from_datanode, 'foo', 5, mode=2)
        (data, stat) = self.zk.get(path)
        for i in xrange(1, 10):
            datanode.set_data('foo')
        (data2, stat2) = self.zk.get(path)
        self.assertEquals(stat, stat2)

        # Ok, calling set_data() with the same data over and over again only
        # updates Zookeeper once. Good. Now what happens if the data in
        # Zookeeper changes and we call
        def get_string_value_from_watcher():
            if 'string_value' in datanode._watcher.get()['data']:
                return datanode._watcher.get()['data']['string_value']
            return False

        datanode.set_data('foo')
        (data, stat) = self.zk.get(path)
        self.zk.set(path, 'foobar')
        waituntil(get_string_value_from_watcher, 'foobar', 5, mode=2)
        datanode.set_data('foo')
        (data2, stat2) = self.zk.get(path)
        self.assertNotEquals(stat, stat2)