def test_server_register_raise_error_if_not_registering():
    reg_url = "http://doofus.com/is/comming/for/you.json"
    oas = OAServerFile("doofus", wdir)

    with requests_mock.Mocker() as m:
        m.post(reg_url, text="", status_code=500)
        assert_raises(UserWarning, lambda: oas.register(reg_url))
def test_server_register_correctly_locally():
    reg_file = pj(tmp_dir, "registration.json")
    oas = OAServerFile("doofus", wdir)
    oas.register(reg_file)

    assert exists(reg_file)
    reg = get_json(reg_file)
    for key in ('id', 'url', 'urlping', 'urldelete'):
        assert key in reg['args']
def test_server_register_correctly_remote():
    reg_url = "http://doofus.com/is/comming/for/you.json"
    oas = OAServerFile("doofus", wdir)

    def text_callback(request, context):
        reg = json.loads(request.text)
        for key in ('id', 'url', 'urlping', 'urldelete'):
            assert key in reg['args']

    with requests_mock.Mocker() as m:
        m.post(reg_url, text=text_callback)
        oas.register(reg_url)
def test_server_register_correctly_when_started_already():
    reg_file = pj(tmp_dir, "registration.json")
    oas = OAServerFile("doofus", wdir)
    oas.start()
    oas.register(reg_file)

    res = [exists(reg_file)]
    reg = get_json(reg_file)
    for key in ('id', 'url', 'urlping', 'urldelete'):
        res.append(key in reg['args'])

    oas.stop()
    assert all(res)
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_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_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_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()
from sys import argv

from oaserver.oa_server_file import OAServerFile
from oaserver.uos import ls, remove

from ip_list import dirac_com_dir as com_dir


if len(argv) == 1:
    sid = "doofus"
else:
    port = int(argv[1])
    sid = "doofus_%d" % port

local_com_dir = com_dir + "/" + sid
stdin = "dirac:%s/stdin" % local_com_dir
stdout = "dirac:%s/stdout" % local_com_dir

for name in ls(stdin):
    remove(stdin + "/" + name)

####################################################################
#
#   launch oaserver
#
####################################################################
oas = OAServerFile(sid, stdin)
oas.register(stdout + "/reg.json")
oas.start()
from oaserver.oa_server_file import OAServerFile

from ip_list import sheldon_com_dir as com_dir


if len(argv) == 1:
    sid = "doofus"
else:
    port = int(argv[1])
    sid = "doofus_%d" % port

local_com_dir = pj(com_dir, sid)
stdin = pj(local_com_dir, "stdin")
stdout = pj(local_com_dir, "stdout")

if exists(local_com_dir):
    rmtree(local_com_dir, True)

for pth in (com_dir, local_com_dir, stdin, stdout):
    if not exists(pth):
        mkdir(pth)

####################################################################
#
#   launch oaserver
#
####################################################################
oas = OAServerFile(sid, stdin)
oas.register(pj(stdout, "reg.json"))
oas.start()