Example #1
0
def test_db_set_value(env):
    r = env.test_runtime()
    r.configure_executor(heartbeat_interval=1)
    e1 = r.start_executor()

    c = r.register_builder(Builder(None, "col1"))
    assert r.db.get_entry_state(c.name, make_key("cfg1")) is None

    r.db.announce_entries(e1.id, [c("cfg1")], [])
    assert r.db.get_entry_state(c.name, make_key("cfg1")) == "announced"

    assert r.try_read_entry(c("cfg1")) is None
    assert r.try_read_entry(c("cfg1"), include_announced=True) is not None

    e = make_raw_entry(r, c, "cfg1", "value1")
    r.db.set_entry_values(e1.id, [e])
    assert r.db.get_entry_state(c.name, make_key("cfg1")) == "finished"

    assert r.try_read_entry(c("cfg1")) is not None
    assert r.try_read_entry(c("cfg1"), include_announced=True) is not None

    with pytest.raises(Exception):
        r.db.set_entry_values(e1.id, [e])

    e2 = make_raw_entry(r, c, "cfg2", "value2")
    with pytest.raises(Exception):
        r.db.set_entry_values(e1.id, [e2])
    r.db.announce_entries(e1.id, [c("cfg2")], [])
    r.db.set_entry_values(e1.id, [e2])

    with pytest.raises(Exception):
        r.db.create_entries([e2])

    e3 = make_raw_entry(r, c, "cfg3", "value3")
    r.db.create_entries([e3])
Example #2
0
def test_db_run_stats(env):
    runtime = env.test_runtime()
    runtime.configure_executor(heartbeat_interval=1)
    e1 = runtime.start_executor()

    c = runtime.register_builder(Builder(None, "col1"))
    _ = runtime.register_builder(Builder(None, "col2"))

    assert runtime.db.announce_entries(
        e1.id, [c("a"), c("b"), c("c"), c("d"),
                c("e")], [])
    assert runtime.db.get_entry_state(c.name, make_key("a")) == "announced"
    runtime.db._dump()
    entry = make_raw_entry(runtime, c, "a", "value", comp_time=1)
    runtime.db.set_entry_values(e1.id, [entry])
    entry = make_raw_entry(runtime, c, "b", "value", comp_time=2)
    runtime.db.set_entry_values(e1.id, [entry])
    entry = make_raw_entry(runtime, c, "c", "value", comp_time=3)
    runtime.db.set_entry_values(e1.id, [entry])
    entry = make_raw_entry(runtime, c, "d", "value", comp_time=4)
    runtime.db.set_entry_values(e1.id, [entry])

    r = runtime.db.get_run_stats("col1")
    assert pytest.approx(2.5) == r["avg"]
    assert pytest.approx(1.29099, 0.00001) == r["stdev"]
    assert r["count"] == 4

    r = runtime.db.get_run_stats("col2")
    assert None is r["avg"]
    assert None is r["stdev"]
    assert r["count"] == 0
Example #3
0
def test_executor(env, n_processes):
    def to_dict(lst):
        return {x["id"]: x for x in lst}

    runtime = env.test_runtime()
    r = runtime._executor_summaries()
    assert len(r) == 0

    executor = env.executor(runtime,
                            heartbeat_interval=1,
                            n_processes=n_processes)
    executor.start()

    executor2 = env.executor(runtime,
                             heartbeat_interval=1,
                             n_processes=n_processes)
    executor2._debug_do_not_start_heartbeat = True
    executor2.start()

    executor3 = env.executor(runtime,
                             heartbeat_interval=1,
                             n_processes=n_processes)
    executor3.start()

    c = runtime.register_builder(Builder(None, "abc"))
    runtime.db.announce_entries(executor3.id, [c("x")], [])
    assert runtime.db.get_entry_state(c.name, make_key("x")) == "announced"
    executor3.stop()
    assert runtime.db.get_entry_state(c.name, make_key("x")) is None

    r = to_dict(runtime._executor_summaries())
    assert len(r) == 3
    assert r[executor.id]["status"] == "running"
    assert r[executor2.id]["status"] == "running"
    assert r[executor3.id]["status"] == "stopped"

    time.sleep(3)

    r = to_dict(runtime._executor_summaries())
    assert len(r) == 3
    assert r[executor.id]["status"] == "running"
    assert r[executor2.id]["status"] == "lost"
    assert r[executor3.id]["status"] == "stopped"
Example #4
0
def test_xdb_announce_basic(env):
    r = env.test_runtime()
    c = r.register_builder(Builder(lambda x: x, "col1"))

    assert announce(r, [c(x="test1"), c(x="test2")])
    assert not announce(r, [c(x="test2"), c(x="test3")])
    assert not announce(r, [c(x="test2"), c(x="test3")])
    not announce(r, [c(x="test3")])
    assert r.db.get_active_state(make_key(
        c.name, {"x": "test1"})) == JobState.ANNOUNCED

    r.db.drop_unfinished_jobs()

    assert r.db.get_active_state(make_key(c.name,
                                          {"x": "test1"})) == JobState.DETACHED
    assert announce(r, [c(x="test2")])
    assert not announce(r, [c(x="test2"), c(x="test3")])
    assert not announce(r, [c(x="test2")])
    assert announce(r, [c(x="test3")])
Example #5
0
def test_db_announce(env):
    r = env.test_runtime()
    e1 = env.executor(r, heartbeat_interval=1)
    e1._debug_do_not_start_heartbeat = True
    e1.start()

    e2 = env.executor(r, heartbeat_interval=1)
    e2.runtime = r
    e2.start()

    c = r.register_builder(Builder(None, "col1"))
    assert r.db.announce_entries(e1.id, [c("test1"), c("test2")], [])
    assert not r.db.announce_entries(e2.id, [c("test2"), c("test3")], [])
    assert not r.db.announce_entries(e1.id, [c("test2"), c("test3")], [])
    assert r.db.announce_entries(e2.id, [c("test3")], [])
    assert r.db.get_entry_state(c.name, make_key("test1")) == "announced"
    time.sleep(3)
    assert r.db.get_entry_state(c.name, make_key("test1")) is None
    assert not r.db.announce_entries(e2.id, [c("test2"), c("test3")], [])
    assert r.db.announce_entries(e2.id, [c("test2")], [])
    assert not r.db.announce_entries(e2.id, [c("test2")], [])
Example #6
0
def test_make_key_ignored_keys():
    assert make_key("z", {"x": 10, "__not_here": 20}) == make_key("z", {"x": 10})
    assert make_key("z", {"x": 10, "__not_here": 20}) == make_key(
        "z", {"x": 10, "__no_here": 30}
    )
    assert make_key("z", {"x": 10, "__not_here": 20}) == make_key(
        "z", {"x": 10, "__no_here2": 40}
    )
Example #7
0
def test_make_key_invalid():
    class X():
        pass

    with pytest.raises(Exception):
        make_key(["10", X()])

    with pytest.raises(Exception):
        make_key([X()])

    with pytest.raises(Exception):
        make_key({10: 10})
Example #8
0
def test_make_key_invalid():
    class X:
        pass

    with pytest.raises(Exception, match="Invalid item in config"):
        make_key("abc", ["10", X()])

    with pytest.raises(Exception, match="Invalid item in config"):
        make_key("abc", [X()])

    with pytest.raises(Exception, match="Invalid key in config"):
        make_key("abc", {10: 10})
Example #9
0
def make_raw_entry(runtime, c, cfg, value, comp_time=1):
    builder = runtime._builders[c.name]
    return builder.make_raw_entry(c.name, make_key(cfg), cfg,
                                  pickle.dumps(value), None, comp_time)
Example #10
0
def test_make_key_basics():
    assert make_key(10) == "10"
    assert make_key("Hello!") == "'Hello!'"
    assert make_key(3.14) == "3.14"
    assert make_key([True, False, 2]) == "[True,False,2,]"

    assert make_key({"x": 10, "y": 20}) == make_key({"y": 20, "x": 10})
    assert make_key({"x": 10, "y": 20}) != make_key({"y": 10, "x": 20})

    assert make_key((10, 20)) == make_key([10, 20])
    assert make_key([10, 20]) != make_key([20, 10])
Example #11
0
def test_make_key_different_builders():
    assert make_key("abc", 10) != make_key("ab", 10)
    assert make_key("abc", 10) != make_key("abc", 11)