Exemplo n.º 1
0
def test_query_progress(dummy_redis):
    """
    Test correct counts for dependency progress are returned.
    """
    dummy = DummyQuery(dummy_param="DUMMY")
    queued_qsm = QueryStateMachine(dummy_redis, dummy.query_id,
                                   get_db().conn_id)
    queued_qsm.enqueue()
    stored_dummy = DummyQuery(dummy_param="STORED_DUMMY")
    stored_dummy.store()
    executing_dummy = DummyQuery(dummy_param="EXECUTING_DUMMY")
    executing_qsm = QueryStateMachine(dummy_redis, executing_dummy.query_id,
                                      get_db().conn_id)
    executing_qsm.enqueue()
    executing_qsm.execute()

    nested = DummyQuery(dummy_param=[dummy, stored_dummy, executing_dummy])
    assert query_progress(nested) == dict(
        eligible=3,
        running=1,
        queued=1,
    )
    nested.store()
    assert query_progress(nested) == dict(
        eligible=0,
        running=0,
        queued=0,
    )
Exemplo n.º 2
0
def test_unstored_dependencies_graph():
    """
    Test that unstored_dependencies_graph returns the correct graph in an example case.
    """
    # Create dummy queries with dependency structure
    #
    #           5:unstored
    #            /       \
    #       3:stored    4:unstored
    #      /       \     /
    # 1:unstored   2:unstored
    #
    # Note: we add a string parameter to each query so that they have different query IDs
    dummy1 = DummyQuery(dummy_param=["dummy1"])
    dummy2 = DummyQuery(dummy_param=["dummy2"])
    dummy3 = DummyQuery(dummy_param=["dummy3", dummy1, dummy2])
    dummy4 = DummyQuery(dummy_param=["dummy4", dummy2])
    dummy5 = DummyQuery(dummy_param=["dummy5", dummy3, dummy4])
    dummy3.store()

    expected_query_nodes = [dummy2, dummy4]
    graph = unstored_dependencies_graph(dummy5)
    assert not any(dict(graph.nodes(data="stored")).values())
    assert len(graph) == len(expected_query_nodes)
    for query in expected_query_nodes:
        assert f"x{query.query_id}" in graph.nodes()
        assert (graph.nodes[f"x{query.query_id}"]["query_object"].query_id ==
                query.query_id)
Exemplo n.º 3
0
def test_dependencies_eligible_for_store():
    """
    Test that the set of only storeable dependencies is returned.
    """
    class UnStoreableQuery(DummyQuery):
        @property
        def table_name(self):
            raise NotImplementedError("This dummy cannot be stored.")

    dummy = DummyQuery(dummy_param="DUMMY")
    unstoreable_dummy = UnStoreableQuery(dummy_param="UNSTOREABLE_DUMMY")

    nested = DummyQuery(dummy_param=[dummy, unstoreable_dummy])
    assert dependencies_eligible_for_store(nested) == {dummy, nested}
Exemplo n.º 4
0
def test_unstored_dependencies_graph_for_stored_query():
    """
    Test that the unstored dependencies graph for a stored query is empty.
    """
    dummy1 = DummyQuery(dummy_param=["dummy1"])
    dummy2 = DummyQuery(dummy_param=["dummy2"])
    dummy3 = DummyQuery(dummy_param=["dummy3", dummy1, dummy2])
    dummy3.store()

    graph = unstored_dependencies_graph(dummy3)
    assert len(graph) == 0
Exemplo n.º 5
0
def test_queued_dependencies(dummy_redis):
    """
    Test that only queued dependencies are returned.
    """
    dummy = DummyQuery(dummy_param="DUMMY")
    queued_qsm = QueryStateMachine(dummy_redis, dummy.query_id,
                                   get_db().conn_id)
    queued_qsm.enqueue()
    stored_dummy = DummyQuery(dummy_param="STORED_DUMMY")
    stored_dummy.store()
    executing_dummy = DummyQuery(dummy_param="EXECUTING_DUMMY")
    executing_qsm = QueryStateMachine(dummy_redis, executing_dummy.query_id,
                                      get_db().conn_id)
    executing_qsm.enqueue()
    executing_qsm.execute()

    nested = DummyQuery(dummy_param=[dummy, stored_dummy, executing_dummy])
    assert queued_dependencies(
        set([nested, dummy, stored_dummy, executing_dummy])) == [dummy]
Exemplo n.º 6
0
 def _flowmachine_query_obj(self):
     return DummyQuery(dummy_param=self.dummy_param)
Exemplo n.º 7
0
 def _flowmachine_query_obj(self):
     sleep(self.dummy_delay)
     return DummyQuery(dummy_param=self.dummy_param)