Esempio n. 1
0
def test_dmf_add():
    tmp_dir = Path(scratch_dir) / "dmf_add"
    dmf = DMF(path=tmp_dir, create=True)
    r = resource.Resource(value={"desc": "test resource"})
    r.do_copy = True  # copy by default
    # (1) Copy, and don't remove {default behavior}
    tmpf1 = NamedTemporaryFile(delete=False)
    tmpf1.close()
    r.v["datafiles"].append({"path": tmpf1.name})
    # (2) Copy, and remove original
    tmpf2 = NamedTemporaryFile(delete=False)
    tmpf2.close()
    r.v["datafiles"].append({"path": tmpf2.name, "is_tmp": True})
    # (3) Do not copy (or remove)
    tmpf3 = NamedTemporaryFile()
    r.v["datafiles"].append({"path": tmpf3.name, "do_copy": False})

    dmf.add(r)

    os.unlink(tmpf1.name)
    try:
        os.unlink(tmpf2.name)
        assert False, "Expected error"
    except Exception as err:
        pass

    os.unlink(tmpf3.name)
    # This is ignored. It makes no sense to ask the file
    # to be removed, but not copied (just a file delete?!)
    r = resource.Resource(value={"desc": "test resource"})
    r.v["datafiles"].append({"path": "foo", "do_copy": False, "is_tmp": True})
    dmf.add(r)
Esempio n. 2
0
def test_dmf_related(dmf_context, runner):
    create_foo_workspace(runner)
    # add the fully-connected 4 resources
    dmf = DMF()
    rlist = [
        resource.Resource(value={
            "desc": ltr,
            "aliases": [ltr],
            "tags": ["graph"]
        }) for ltr in "ABCD"
    ]
    A_id = rlist[0].id  # root resource id, used in testcode
    relation = resource.Predicates.uses
    for r in rlist:
        for r2 in rlist:
            if r is r2:
                continue
            resource.create_relation(r, relation, r2)
    for r in rlist:
        dmf.add(r)
    #
    result = runner.invoke(related, [A_id, "--no-unicode", "--no-color"],
                           catch_exceptions=False)
    assert result.exit_code == 0
    rlines = result.output.split("\n")
    nrelations = sum(
        1 for _ in filter(lambda s: resource.Predicates.uses in s, rlines))
    assert nrelations == 12  # 3 blocks of (1 + 3)
Esempio n. 3
0
def test_dmf_add_tmp_no_copy():
    tmp_dir = Path(scratch_dir) / "dmf_add_tmp_no_copy"
    dmf = DMF(path=tmp_dir, create=True)
    r = resource.Resource(value={"desc": "test resource"})
    # create datafile, with temporary-file flag turned on
    tmp_file = (tmp_dir / "foo").open("w")
    r.v["datafiles"].append({
        "path": str(tmp_file),
        "is_tmp": True,
        "do_copy": True
    })
    # we want an error trying to COPY this file; to get this,
    # change the permissions of the directory
    os.chmod(tmp_dir, 0o400)
    ok = False
    try:
        dmf.add(r)
    except errors.DMFError:
        ok = True
    if not ok:
        assert False, "DMFError expected"
Esempio n. 4
0
def test_dmf_add_duplicate():
    tmp_dir = Path(scratch_dir) / "dmf_add_duplicate"
    dmf = DMF(path=tmp_dir, create=True)
    r = resource.Resource(value={"desc": "test resource"})
    dmf.add(r)
    pytest.raises(errors.DuplicateResourceError, dmf.add, r)