def test_wait_for_content_return_when_file_created():
    tmp_file = pj(tmp_dir, "toto.json")

    def cr_file():
        post_json(tmp_file, "data")

    t = Timer(0.1, cr_file)
    t.start()
    assert wait_for_content(tmp_file) == "data"
def test_wait_for_content_remove_file_after_reading():
    tmp_file = pj(tmp_dir, "toto.json")

    def cr_file():
        post_json(tmp_file, "toto")

    t = Timer(0.1, cr_file)
    t.start()
    assert wait_for_content(tmp_file) == "toto"
    assert not exists(tmp_file)
def test_wait_for_file_return_only_when_file_is_closed():
    tmp_file = pj(tmp_dir, "toto.json")
    big_data = dict((str(i), None) for i in range(10000))
    # use big amount of data to slow down write process

    def cr_file():
        post_json(tmp_file, big_data)

    t = Timer(0.2, cr_file)
    t.start()
    assert wait_for_content(tmp_file) == big_data
def test_server_delete():
    answer_file = pj(tmp_dir, "answer.json")

    oas = OAServerFile("doofus", wdir)
    oas.start()
    oas.register(answer_file)

    del_pth = pj(wdir, wait_for_content(answer_file, NB)['args']['urldelete'])

    post_json(del_pth, dict())

    oas.join()

    assert not exists(del_pth)
def test_server_full_life():
    answer_file = pj(tmp_dir, "answer.json")

    oas = OAServerFile("doofus", wdir)
    oas.start()
    oas.register(answer_file)

    ans = wait_for_content(answer_file, NB)
    cpt_pth = pj(wdir, ans['args']['url'])
    ping_pth = pj(wdir, ans['args']['urlping'])
    del_pth = pj(wdir, ans['args']['urldelete'])

    res = []
    for a in (1, 2):
        post_json(cpt_pth, dict(workflow="pycode:" + pycode,
                                urldata="a = %d" % a,
                                urlreturn=answer_file))

        answer_ping = pj(tmp_dir, "answer_ping.json")
        post_json(ping_pth, dict(url=answer_ping))
        ans = wait_for_content(answer_ping, NB)
        res.append(ans['id'] == "doofus")
        res.append(ans['state'] in ('running', 'waiting'))

        ans = wait_for_content(answer_file, NB)
        res.append(ans['result'] == a)
        res.append(ans['id'] == "doofus")

        answer_ping = pj(tmp_dir, "answer_ping.json")
        post_json(ping_pth, dict(url=answer_ping))
        ans = wait_for_content(answer_ping, NB)
        res.append(ans['id'] == "doofus")
        res.append(ans['state'] == 'waiting')

    post_json(del_pth, dict())

    oas.join()
def test_server_ping():
    answer_file = pj(tmp_dir, "answer.json")

    oas = OAServerFile("doofus", wdir)
    oas.start()
    oas.register(answer_file)

    ping_pth = pj(wdir, get_json(answer_file)['args']['urlping'])
    remove(answer_file)

    post_json(ping_pth, dict(url=answer_file))

    ans = wait_for_content(answer_file, NB)
    res = [ans['state'] == 'waiting',
           ans['id'] == "doofus"]

    oas.stop()
    oas.join()

    assert all(res)
    assert not exists(ping_pth)
def test_server_do_not_react_to_unknown_files():
    answer_file = pj(tmp_dir, "answer.json")

    oas = OAServerFile("doofus", wdir)
    oas.start()
    oas.register(answer_file)

    post_json(pj(wdir, "takapouet.cmd"), dict(a=1))

    ping_pth = pj(wdir, get_json(answer_file)['args']['urlping'])
    remove(answer_file)

    post_json(ping_pth, dict(url=answer_file))

    ans = wait_for_content(answer_file, NB)
    res = [ans['state'] == 'waiting',
           ans['id'] == "doofus"]

    oas.stop()
    oas.join()

    assert all(res)
def test_server_compute():
    answer_file = pj(tmp_dir, "answer.json")

    oas = OAServerFile("doofus", wdir)
    oas.start()
    oas.register(answer_file)

    cpt_pth = pj(wdir, get_json(answer_file)['args']['url'])
    remove(answer_file)

    post_json(cpt_pth, dict(workflow="pycode:def main(a): return a",
                            urldata="a = 1",
                            urlreturn=answer_file))

    ans = wait_for_content(answer_file, NB)
    res = [ans['result'] == 1,
           ans['id'] == "doofus"]

    oas.stop()
    oas.join()

    assert all(res)
    assert not exists(cpt_pth)
def test_wait_for_content_raise_error_if_no_file_created():
    assert_raises(UserWarning, lambda: wait_for_content(pj(tmp_dir, "tutu.txt")))