11557: Fixed can_read link creation, updated test to check this behavior.
authorLucas Di Pentima <lucas@curoverse.com>
Thu, 15 Jun 2017 16:17:50 +0000 (13:17 -0300)
committerLucas Di Pentima <lucas@curoverse.com>
Thu, 15 Jun 2017 16:17:50 +0000 (13:17 -0300)
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas@curoverse.com>

sdk/cwl/arvados_cwl/arvjob.py
sdk/cwl/tests/test_job.py

index 59ae69c56daed94e25d1b319f723c22a230068df..346d3e104a2f0c683981ff66dd41fb718dd2a3f4 100644 (file)
@@ -146,11 +146,11 @@ class ArvadosJob(object):
             if response["state"] == "Complete":
                 logger.info("%s reused job %s", self.arvrunner.label(self), response["uuid"])
                 # Give read permission to the desired project on reused jobs
-                for job_name, job_uuid in response.get('components', {}).items():
+                if response["owner_uuid"] != self.arvrunner.project_uuid:
                     self.arvrunner.api.links().create(body={
                         'link_class': 'can_read',
                         'tail_uuid': self.arvrunner.project_uuid,
-                        'head_uuid': job_uuid,
+                        'head_uuid': response["uuid"],
                         }).execute(num_retries=self.arvrunner.num_retries)
 
                 with Perf(metrics, "done %s" % self.name):
index 14e006eb1910430647acc6b3cd87c177453a7a90..5cd7f2a7b6706ccc5435083f9cd91902e2795547 100644 (file)
@@ -33,7 +33,15 @@ class TestJob(unittest.TestCase):
             document_loader, avsc_names, schema_metadata, metaschema_loader = cwltool.process.get_schema("v1.0")
 
             list_images_in_arv.return_value = [["zzzzz-4zz18-zzzzzzzzzzzzzzz"]]
-            runner.api.collections().get().execute.return_vaulue = {"portable_data_hash": "99999999999999999999999999999993+99"}
+            runner.api.collections().get().execute.return_value = {"portable_data_hash": "99999999999999999999999999999993+99"}
+            # Simulate reused job from another project so that we can check is a can_read
+            # link is added.
+            runner.api.jobs().create().execute.return_value = {
+                'state': 'Complete' if enable_reuse else 'Queued',
+                'owner_uuid': 'zzzzz-tpzed-yyyyyyyyyyyyyyy' if enable_reuse else 'zzzzz-8i9sb-zzzzzzzzzzzzzzz',
+                'uuid': 'zzzzz-819sb-yyyyyyyyyyyyyyy',
+                'output': None,
+            }
 
             tool = cmap({
                 "inputs": [],
@@ -75,6 +83,16 @@ class TestJob(unittest.TestCase):
                              ['script_version', 'in git', 'a3f2cb186e437bfce0031b024b2157b73ed2717d'],
                              ['docker_image_locator', 'in docker', 'arvados/jobs']]
                 )
+                if enable_reuse:
+                    runner.api.links().create.assert_called_with(
+                        body=JsonDiffMatcher({
+                            'link_class': 'can_read',
+                            "tail_uuid": "zzzzz-8i9sb-zzzzzzzzzzzzzzz",
+                            "head_uuid": "zzzzz-819sb-yyyyyyyyyyyyyyy",
+                        })
+                    )
+                else:
+                    assert not runner.api.links().create.called
 
     # The test passes some fields in builder.resources
     # For the remaining fields, the defaults will apply: {'cores': 1, 'ram': 1024, 'outdirSize': 1024, 'tmpdirSize': 1024}