Пример #1
0
    def test_get_marker_tree_leaves(self):
        """
        Make sure all the leaves of a marker are returned
        as expected from marker._list_of_leaf_markers()
        """
        from furious.marker_tree.identity_utils import leaf_persistence_id_from_group_id
        from furious.marker_tree.marker import Marker

        root_marker = Marker(id="polly")
        for x in xrange(3):
            root_marker.children.append(Marker(id=leaf_persistence_id_from_group_id(root_marker.id, x)))

        originally_a_leaf_marker = root_marker.children[0]

        sub_tree_marker = Marker(
            id=originally_a_leaf_marker.id,
            children=[Marker(id=leaf_persistence_id_from_group_id(originally_a_leaf_marker.id, i)) for i in xrange(3)],
        )

        root_marker.children[0] = sub_tree_marker
        root_marker.persist()

        leaves = root_marker._list_of_leaf_markers()
        self.assertEqual(len(leaves), 5)

        reloaded_root_marker = Marker.get(root_marker.id)
        self.assertIsNotNone(reloaded_root_marker)
        leaves = reloaded_root_marker._list_of_leaf_markers()
        # no jobs run and updated, so there should be no
        # leaves persisted yet
        self.assertEqual(len(leaves), 0)
    def test_combiner_results(self):
        """
        Make sure the expected results are in the root_marker.results
        after the job is done.
        """
        from furious.marker_tree.identity_utils import leaf_persistence_id_from_group_id
        from furious.marker_tree.marker import Marker

        from furious.tests.marker_tree import dummy_success_callback
        from furious.tests.marker_tree import dummy_internal_vertex_combiner
        from furious.tests.marker_tree import dummy_leaf_combiner

        context_callbacks = {
            'success': dummy_success_callback,
            'internal_vertex_combiner': dummy_internal_vertex_combiner,
            'leaf_combiner': dummy_leaf_combiner
        }
        root_marker = Marker(id="big_job",
                             callbacks=context_callbacks)
        for x in xrange(2):
            root_marker.children.append(Marker(
                id=str(x),
                group_id=root_marker.id,
                callbacks=context_callbacks,
                children=[
                    Marker(id=leaf_persistence_id_from_group_id(
                        str(x), i)) for i in xrange(3)]
            ))

        originally_a_leaf_marker = root_marker.children[1].children[1]

        sub_tree_marker = Marker(id=originally_a_leaf_marker.id,
                                 children=[Marker(id=
                                 leaf_persistence_id_from_group_id(originally_a_leaf_marker.id, i))
                                           for i in xrange(3)],
                                 callbacks=context_callbacks)

        root_marker.children[1].children[1] = sub_tree_marker
        #persist marker tree
        root_marker.persist()
        #similate running all the jobs
        leaf_markers = root_marker._list_of_leaf_markers()
        for marker in leaf_markers:
            marker.done = True
            marker.result = 1
            marker.update_done(persist_first=True)

        loaded_root_marker = Marker.get("big_job")
        self.assertTrue(loaded_root_marker.done)
        self.assertEqual(loaded_root_marker.result,
                         [[[1, 1, 1]], [[1], [[1, 1, 1]], [1]]])