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)
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)
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"
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)