def testEvaluateChecklistRemoteFail(self):
     # Config remote testing
     remotehost   = "http://andros.zoo.ox.ac.uk"
     remoterobase = "/aleix/ro-catalogue/v0.1/"
     remoteroname = "wf74-repeat-fail/"
     remoteminim  = "simple-requirements-minim.rdf"
     #self.setupConfig()
     rouri    = remotehost+remoterobase+remoteroname
     rometa   = ro_metadata(ro_config, rouri)
     minimuri = rometa.getComponentUri(remoteminim)
     # create rometa object
     rometa = ro_metadata(ro_config, rouri)
     # invoke evaluation service
     #   ro_eval_minim.evaluate(rometa, minim, target, purpose)
     evalresult = ro_eval_minim.evaluate(rometa, minimuri, rouri, "Repeatable")
     self.assertEqual(evalresult['rouri'],         rdflib.URIRef(rouri))
     self.assertEqual(evalresult['minimuri'],      rdflib.URIRef(minimuri))
     self.assertEqual(evalresult['target'],        rouri)
     self.assertEqual(evalresult['purpose'],       "Repeatable")
     self.assertEqual(evalresult['constrainturi'],
                      rometa.getComponentUri("simple-requirements-minim.rdf#repeatable_RO"))
     self.assertEqual(evalresult['modeluri'],
                      rometa.getComponentUri("simple-requirements-minim.rdf#repeatable_RO_model"))
     self.assertNotIn(MINIM.fullySatisfies,     evalresult['summary'])
     self.assertNotIn(MINIM.nominallySatisfies, evalresult['summary'])
     self.assertNotIn(MINIM.minimallySatisfies, evalresult['summary'])
     self.assertEqual(len(evalresult['missingMust']),   1)
     self.assertEqual(len(evalresult['missingShould']), 0)
     self.assertEqual(len(evalresult['missingMay']),    0)
     self.assertEqual(len(evalresult['satisfied']),     4)
     return
示例#2
0
 def testGetInitialRoAnnotations(self):
     rodir = self.createTestRo(testbase, "data/ro-test-1",
         "Test init RO annotation", "ro-testRoAnnotate")
     romd  = ro_metadata.ro_metadata(ro_config, rodir)
     roresource = "."
     # Retrieve the anotations
     annotations = romd.getRoAnnotations()
     rouri = romd.getRoUri()
     expected_annotations = (
         [ (rouri, DCTERMS.description,  rdflib.Literal('Test init RO annotation'))
         , (rouri, DCTERMS.title,        rdflib.Literal('Test init RO annotation'))
         , (rouri, DCTERMS.created,      rdflib.Literal('unknown'))
         , (rouri, DCTERMS.creator,      rdflib.Literal('Test User'))
         , (rouri, DCTERMS.identifier,   rdflib.Literal('ro-testRoAnnotate'))
         , (rouri, RDF.type,             RO.ResearchObject)
         ])
     for i in range(6+1):      # Annotations + aggregations
         next = annotations.next()
         #log.debug("Next %s"%(repr(next)))
         if ( next not in expected_annotations and
              next[1] != DCTERMS.created       and
              next[1] != ORE.aggregates        ):
             self.assertTrue(False, "Not expected (%d) %s"%(i, repr(next)))
     self.assertRaises(StopIteration, annotations.next)
     self.deleteTestRo(rodir)
     return
示例#3
0
def real_evaluate(request):
    # From: http://tools.ietf.org/html/rfc3986#section-2.1
    # gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"
    # sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
    #              / "*" / "+" / "," / ";" / "="
    quotesafe = ":/?#[]@!$&'()*+,;=" + "%"
    # isolate parameters (keep invalid URI characters %-encoded)
    RO      = urllib.quote(request.params["RO"], quotesafe)
    minim   = urllib.quote(request.params["minim"], quotesafe)
    target  = urllib.quote(request.params.get("target","."), quotesafe)
    purpose = request.params["purpose"]
    log.info("Evaluate RO %s, minim %s, target %s, purpose %s"%(RO,minim,target,purpose))
    # create rometa object
    # @@TODO: use proper configuration and credentials
    ROparse   = urlparse.urlparse(RO)
    rosrs_uri = (ROparse.scheme or "http") + "://" + (ROparse.netloc or "localhost:8000") + "/"
    ro_config = {
        "annotationTypes":      annotationTypes,
        "annotationPrefixes":   annotationPrefixes,
        "rosrs_uri":            rosrs_uri,
        #"rosrs_uri":            target,
        #"rosrs_uri":            "http://sandbox.wf4ever-project.org/rodl/ROs/",
        #"rosrs_access_token":   "ac14dd1a-ab59-40ec-b510-ffdb01a85473",
        "rosrs_access_token":   None,
        }
    rometa = ro_metadata(ro_config, RO)
    log.info("rometa.rouri: %s"%(rometa.rouri) )
    # invoke evaluation service
    (graph, evalresult) = ro_eval_minim.evaluate(rometa, minim, target, purpose)
    log.debug("evaluate:results: \n"+json.dumps(evalresult, indent=2))
    # Assemble graph of results
    graph =  ro_eval_minim.evalResultGraph(graph, evalresult)
    return graph
 def testEvalShouldMissing(self):
     """
     Evaluate complete RO against Minim description 
     """
     self.setupConfig()
     rodir      = self.createTestRo(testbase, "test-data-1", "RO test minim", "ro-testMinim")
     self.populateTestRo(testbase, rodir)
     rometa = ro_metadata(ro_config, rodir)
     minimbase  = rometa.getComponentUri("Minim-UserRequirements.rdf")
     modeluri   = ro_minim.getElementUri(minimbase, "#missingShouldRequirement")
     (g,evalresult) = ro_eval_minim.evaluate(rometa,
         "Minim-UserRequirements.rdf",               # Minim file
         "docs/UserRequirements-bio.html",           # Target resource
         "create")                                   # Purpose
     missing_should = (
         { 'level': "SHOULD"
         , 'model': modeluri 
         , 'label': rdflib.Literal("aggregates docs/missing.css")
         , 'datarule':
           { 'aggregates': rometa.getComponentUri("docs/missing.css")
           , 'show':       None
           , 'showpass':   None
           , 'showfail':   None
           , 'derives':    ro_minim.getElementUri(minimbase, "#isPresent/docs/missing.css")
           }
         , 'uri': ro_minim.getElementUri(minimbase, "#isPresent/docs/missing.css") 
         })
     self.maxDiff=None
     self.assertEquals(evalresult['summary'],       [MINIM.minimallySatisfies])
     self.assertEquals(evalresult['missingMust'],   [] )
     self.assertEquals(evalresult['missingShould'], [(missing_should,{})] )
     self.assertEquals(evalresult['missingMay'],    [] )
     self.deleteTestRo(rodir)
     return
示例#5
0
 def testAddGetAnnotationValues(self):
     rodir = self.createTestRo(testbase, "data/ro-test-1",
         "Test get annotation values", "ro-testRoAnnotate")
     romd  = ro_metadata.ro_metadata(ro_config, rodir)
     roresource = "subdir1/subdir1-file.txt"
     # Add anotations for file
     romd.addSimpleAnnotation(roresource, "type",         "Test file")
     romd.addSimpleAnnotation(roresource, "description",  "File in test research object")
     romd.addSimpleAnnotation(roresource, "rdf:type",     ROTERMS.resource)
     # Retrieve the anotations
     values = romd.getAnnotationValues(".", "title")
     self.assertEquals(values.next(), rdflib.Literal('Test get annotation values'))
     self.assertRaises(StopIteration, values.next)
     values = romd.getAnnotationValues(".", "rdf:type")
     self.assertEquals(values.next(), RO.ResearchObject)
     self.assertRaises(StopIteration, values.next)
     values = romd.getAnnotationValues(roresource, "type")
     self.assertEquals(values.next(), rdflib.Literal('Test file'))
     self.assertRaises(StopIteration, values.next)
     values = romd.getAnnotationValues(roresource, "description")
     self.assertEquals(values.next(), rdflib.Literal('File in test research object'))
     self.assertRaises(StopIteration, values.next)
     values = romd.getAnnotationValues(roresource, "rdf:type")
     self.assertEquals(values.next(), ROTERMS.resource)
     self.assertRaises(StopIteration, values.next)
     # Clean up
     self.deleteTestRo(rodir)
     return
示例#6
0
 def testRemoveGetFileAnnotations(self):
     rodir = self.createTestRo(testbase, "data/ro-test-1",
         "Test remove file annotation", "ro-testRoAnnotate")
     romd  = ro_metadata.ro_metadata(ro_config, rodir)
     roresource = "subdir1/subdir1-file.txt"
     # Add anotations for file
     romd.addSimpleAnnotation(roresource, "type",        "Test file")
     romd.addSimpleAnnotation(roresource, "description", "File in test research object")
     romd.addSimpleAnnotation(roresource, "note", "Research object file created for annotation testing")
     romd.addSimpleAnnotation(roresource, "title",       "Test file in RO")
     romd.addSimpleAnnotation(roresource, "created",     "2011-12-07")
     romd.addSimpleAnnotation(roresource, "rdf:type",    ROTERMS.resource)
     # Remove annotations
     romd.removeSimpleAnnotation(roresource, "description", "File in test research object")
     romd.removeSimpleAnnotation(roresource, "note",        None)
     # Retrieve the file anotations
     annotations = romd.getFileAnnotations(roresource)
     resourceuri = romd.getComponentUri(roresource)
     log.debug("resourceuri: %s"%(resourceuri))
     expected_annotations = (
         [ (resourceuri, DCTERMS.type,         rdflib.Literal('Test file'))
         , (resourceuri, DCTERMS.title,        rdflib.Literal('Test file in RO'))
         , (resourceuri, DCTERMS.created,      rdflib.Literal('2011-12-07'))
         , (resourceuri, RDF.type,             ROTERMS.resource)
         ])
     for i in range(4):
         next = annotations.next()
         #log.debug("Next %s"%(repr(next)))
         if ( next not in expected_annotations):
             self.assertTrue(False, "Not expected (%d) %s"%(i, repr(next)))
     self.assertRaises(StopIteration, annotations.next)
     self.deleteTestRo(rodir)
     return
 def testEvalQueryTestChemboxFail(self):
     """
     Test for failing chembox requirement
     """
     self.setupConfig()
     rodir = self.createTestRo(testbase, "test-chembox", "RO test minim", "ro-testMinim")
     rouri = ro_manifest.getRoUri(rodir)
     self.populateTestRo(testbase, rodir)
     rometa = ro_metadata(ro_config, rodir)
     resuri = rometa.getComponentUriAbs("http://purl.org/net/chembox/Ethane")
     rometa.addGraphAnnotation(resuri, "Ethane.ttl")
     # Now run evaluation against test RO
     (g, evalresult) = ro_eval_minim.evaluate(rometa,
         "Minim-chembox.ttl",              # Minim file
         resuri,                           # Target resource
         "fail")                           # Purpose
     log.debug("ro_eval_minim.evaluate result:\n----\n%s"%(repr(evalresult)))
     self.assertNotIn(MINIM.fullySatisfies,     evalresult['summary'])
     self.assertNotIn(MINIM.nominallySatisfies, evalresult['summary'])
     self.assertNotIn(MINIM.minimallySatisfies, evalresult['summary'])
     self.assertEquals(len(evalresult['missingMust']), 1)
     self.assertEquals(evalresult['missingMust'][0][0]['seq'], 'This test should fail')
     self.assertEquals(evalresult['missingShould'],  [])
     self.assertEquals(evalresult['missingMay'],     [])
     self.assertEquals(evalresult['rouri'],          rometa.getRoUri())
     self.assertEquals(evalresult['minimuri'],       rometa.getComponentUri("Minim-chembox.ttl"))
     self.assertEquals(evalresult['target'],         resuri)
     self.assertEquals(evalresult['purpose'],        "fail")
     self.deleteTestRo(rodir)
     return
 def testGetInitialRoAnnotations(self):
     (status, reason, rouri, manifest) = self.createTestRO()
     self.assertEqual(status, 201)
     romd   = ro_metadata.ro_metadata(ro_config, rouri)
     # Retrieve the anotations
     annotations = romd.getRoAnnotations()
     rouri = romd.getRoUri()
     expected_annotations = (
         [ (rouri, RDF.type,             RO.ResearchObject)
         , (rouri, RDF.type,             ROEVO.LiveRO)
         , (rouri, ORE.isDescribedBy,    romd.getComponentUriAbs(ro_test_config.ROMANIFESTPATH))
         #, (rouri, DCTERMS.description,  rdflib.Literal('Test init RO annotation'))
         #, (rouri, DCTERMS.title,        rdflib.Literal('Test init RO annotation'))
         #, (rouri, DCTERMS.created,      rdflib.Literal('unknown'))
         #, (rouri, DCTERMS.creator,      rdflib.Literal('Test User'))
         #, (rouri, DCTERMS.identifier,   rdflib.Literal('ro-testRoAnnotate'))
         ])
     count = 0
     for next in list(annotations):
         if ( not isinstance(next[2], rdflib.BNode) and
              not next[1] in [ORE.aggregates, DCTERMS.created, DCTERMS.creator] ):
             log.debug("- next %s"%(str(next[0])) )
             log.debug("       - (%s, %s)"%(str(next[1]),str(next[2])) )
             if next in expected_annotations:
                 count += 1
             else:
                 self.assertTrue(False, "Not expected (%d) %s"%(count, repr(next)))
     self.assertEqual(count,3)
     return
示例#9
0
 def testReplaceGetRoAnnotations(self):
     rodir = self.createTestRo(testbase, "data/ro-test-1",
         "Test replace RO annotation", "ro-testRoAnnotate")
     romd  = ro_metadata.ro_metadata(ro_config, rodir)
     roresource = "."
     # Replace anotations for RO
     romd.replaceSimpleAnnotation(roresource, "type",        "Research Object")
     romd.replaceSimpleAnnotation(roresource, "description", "Replacement description")
     romd.replaceSimpleAnnotation(roresource, "note", "Research object for annotation replacement testing")
     romd.replaceSimpleAnnotation(roresource, "title",       "Replacement title")
     romd.replaceSimpleAnnotation(roresource, "created",     "2011-12-07")
     # Retrieve the anotations
     annotations = romd.getRoAnnotations()
     rouri = romd.getRoUri()
     expected_annotations = (
         [ (rouri, DCTERMS.type,         rdflib.Literal('Research Object'))
         , (rouri, DCTERMS.title,        rdflib.Literal('Replacement title'))
         , (rouri, DCTERMS.description,  rdflib.Literal('Replacement description'))
         , (rouri, ROTERMS.note,         rdflib.Literal('Research object for annotation replacement testing'))
         , (rouri, DCTERMS.created,      rdflib.Literal('2011-12-07'))
         , (rouri, DCTERMS.creator,      rdflib.Literal('Test User'))
         , (rouri, DCTERMS.identifier,   rdflib.Literal('ro-testRoAnnotate'))
         , (rouri, RDF.type,             RO.ResearchObject)
         ])
     for i in range(8+1):      # Annotations + aggregations
         next = annotations.next()
         #log.debug("Next %s"%(repr(next)))
         if ( next not in expected_annotations and
              next[1] != ORE.aggregates        ):
             self.assertTrue(False, "Not expected (%d) %s"%(i, repr(next)))
     self.assertRaises(StopIteration, annotations.next)
     self.deleteTestRo(rodir)
     return
示例#10
0
 def testGetAggregatedResources(self):
     """
     Test function that enumerates aggregated resources to a research object manifest
     """
     rodir = self.createTestRo(testbase, "data/ro-test-1", "RO test aggregation", "ro-testRoAggregation")
     romd  = ro_metadata.ro_metadata(ro_config, rodir)
     romd.addAggregatedResources(rodir, recurse=True)
     def URIRef(path):
         return romd.getComponentUriAbs(path)
     resources = (
       [ URIRef("README-ro-test-1")
       , URIRef("minim.rdf")
       , URIRef("subdir1/subdir1-file.txt")
       , URIRef("subdir2/subdir2-file.txt")
       , URIRef("filename%20with%20spaces.txt")
       , URIRef("filename%23with%23hashes.txt")
       ])
     c = 0
     for r in romd.getAggregatedResources():
         if not romd.hasResourceType(r, RO.AggregatedAnnotation):
             c += 1
             self.assertIn(r, resources)
     self.assertEqual(c, len(resources))
     self.deleteTestRo(rodir)
     return
示例#11
0
 def testEvalAllPresent(self):
     """
     Evaluate complete RO against Minim description 
     """
     self.setupConfig()
     rodir      = self.createTestRo(testbase, "test-data-1", "RO test minim", "ro-testMinim")
     self.populateTestRo(testbase, rodir)
     rometa = ro_metadata(ro_config, rodir)
     (g,evalresult) = ro_eval_minim.evaluate(rometa,
         "Minim-UserRequirements.rdf",               # Minim file
         "docs/UserRequirements-astro.csv",          # Target resource
         "create")                                   # Purpose
     self.assertIn(MINIM.fullySatisfies,     evalresult['summary'])
     self.assertIn(MINIM.nominallySatisfies, evalresult['summary'])
     self.assertIn(MINIM.minimallySatisfies, evalresult['summary'])
     self.assertEquals(evalresult['missingMust'],    [])
     self.assertEquals(evalresult['missingShould'],  [])
     self.assertEquals(evalresult['missingMay'],     [])
     self.assertEquals(evalresult['rouri'],          rometa.getRoUri())
     self.assertEquals(evalresult['minimuri'],       rometa.getComponentUri("Minim-UserRequirements.rdf"))
     self.assertEquals(evalresult['target'],         "docs/UserRequirements-astro.csv")
     self.assertEquals(evalresult['purpose'],        "create")
     self.assertEquals(evalresult['constrainturi'],
         rometa.getComponentUriAbs("Minim-UserRequirements.rdf#create/docs/UserRequirements-astro.csv"))
     self.assertEquals(evalresult['modeluri'],
         rometa.getComponentUriAbs("Minim-UserRequirements.rdf#runnableRequirementRO"))
     self.deleteTestRo(rodir)
     return
示例#12
0
 def testCreateGraphRoUri2(self):
     ro_config["rosrs_uri"] = "http://localhost:8000/rovserver/"
     ro_uri = "http://localhost:8000/rovserver/ROs/0d8b454f/"
     rosrs_uri = ro_config["rosrs_uri"]
     romd  = ro_metadata.ro_metadata(ro_config, ro_uri)
     self.assertEquals(romd.rouri, rdflib.URIRef(ro_uri))
     return
示例#13
0
 def testQueryAnnotationsWithMissingGraph(self):
     """
     This test is included to ensure that queries still work as expected when
     the manifest contains a reference to a non-existent manifest graph
     """
     rodir = self.createTestRo(testbase, "data/ro-test-1",
         "Test query annotations", "ro-testRoAnnotate")
     romd  = ro_metadata.ro_metadata(ro_config, rodir)
     roresource = "subdir1/subdir1-file.txt"
     # Add anotations for file
     romd.addSimpleAnnotation(roresource, "type",        "Test file")
     romd.addSimpleAnnotation(roresource, "description", "File in test research object")
     romd.addSimpleAnnotation(roresource, "note", "Research object file created for annotation testing")
     romd.addSimpleAnnotation(roresource, "title",       "Test file in RO")
     romd.addSimpleAnnotation(roresource, "created",     "2011-12-07")
     romd.addSimpleAnnotation(roresource, "rdf:type",    ROTERMS.resource)
     # Apply non-exietent graph annotation
     annotation_graph_filename = os.path.join(os.path.abspath(rodir), "annotate-none.rdf")
     romd.addGraphAnnotation(roresource, annotation_graph_filename)
     # Query the file anotations
     query = (make_sparql_prefixes() +
         """
         ASK
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator "Test User" .
             ?file rdf:type roterms:resource ;
                 dcterms:type "Test file" ;
                 dcterms:created "2011-12-07" .
         }
         """)
     resp = romd.queryAnnotations(query)
     self.assertTrue(resp, "Expected 'True' result for query: %s")
     self.deleteTestRo(rodir)
     return
示例#14
0
 def testEvaluateMissingRDF(self):
     # repeat previous test case, but with RDF output
     self.setupConfig()
     rodir = self.createTestRo(testbase, "test-simple-wf", "RO test minim", "ro-testMinim")
     self.populateTestRo(testbase, rodir)
     self.annotateWfRo(testbase, rodir)
     rometa   = ro_metadata(ro_config, rodir)
     minimuri = rometa.getComponentUri("simple-wf-minim.rdf")
     # Evaluate
     args = [ "ro", "evaluate", "checklist"
            , "-a"
            , "-d", rodir+"/"
            , "-o", "rdfxml"
            , "simple-wf-minim.rdf"
            , "Missing"
            , "."
            ]
     self.outstr.seek(0)
     with StdoutContext.SwitchStdout(self.outstr):
         status = ro.runCommand(
             os.path.join(testbase, TestConfig.ro_test_config.CONFIGDIR),
             os.path.join(testbase, TestConfig.ro_test_config.ROBASEDIR),
             args)
     outtxt = self.outstr.getvalue()
     assert status == 0, "Status %d, outtxt: %s"%(status,outtxt)
     # log.debug("status %d, outtxt: \n--------\n%s----"%(status, outtxt))
     # Check response returned
     self.outstr.seek(0)
     outgraph = rdflib.Graph()
     outgraph.parse(self.outstr)
     prefixes = make_sparql_prefixes()
     rouri    = rometa.getRoUri()
     modeluri = rometa.getComponentUriAbs("simple-wf-minim.rdf#missing_RO_model")
     log.debug("------ outgraph:\n%s\n----"%(outgraph.serialize(format='turtle')))
     probequeries = (
         [ "ASK { _:r minim:testedRO <%s> ; minim:minimUri <%s> }"%
           (rouri, minimuri)
         , "ASK { _:r minim:testedRO <%s> ; minim:testedModel <%s> }"%
           (rouri, modeluri)
         , """ASK 
           { _:r minim:testedRO <%(rouri)s> ; 
               minim:testedPurpose "Missing" ;
               minim:missingMust 
                 [ minim:tryMessage "No workflow present with hens tooth" ;
                   result:binding [ result:variable "_count" ; result:value 0 ]
                 ]
           }"""% { 'rouri': rouri }
         , '''ASK { _:r minim:testedRO <%s> ; minim:missingMust [ minim:tryMessage "%s" ] }'''%
           (rouri, "No workflow present with hens tooth")
         , '''ASK { _:r minim:testedRO <%s> ; minim:testedTarget <%s> }'''%
           (rouri, rouri)
         , '''ASK { <%s> rdfs:label "%s" }'''%
           (rouri, rdflib.Literal("RO test minim"))
       ])
     for q in probequeries:
         r = outgraph.query(prefixes+q)
         self.assertEqual(r.type, 'ASK', "Result type %s for: %s"%(r.type, q))
         self.assertTrue(r.askAnswer, "Failed query: %s"%(q))
     self.deleteTestRo(rodir)
     return
 def testEvalQueryTestModelMin(self):
     """
     Evaluate RO against minimal Minim description using just QueryTestRules
     """
     self.setupConfig()
     rodir = self.createTestRo(testbase, "test-data-2", "RO test minim", "ro-testMinim")
     rouri = ro_manifest.getRoUri(rodir)
     self.populateTestRo(testbase, rodir)
     rometa = ro_metadata(ro_config, rodir)
     (g, evalresult) = ro_eval_minim.evaluate(rometa,
         "Minim-UserRequirements2-min.rdf",    # Minim file
         "data/UserRequirements-astro.ods",    # Target resource
         "create")                             # Purpose
     log.debug("ro_eval_minim.evaluate result:\n----\n%s"%(repr(evalresult)))
     self.assertIn(MINIM.fullySatisfies,     evalresult['summary'])
     self.assertIn(MINIM.nominallySatisfies, evalresult['summary'])
     self.assertIn(MINIM.minimallySatisfies, evalresult['summary'])
     self.assertEquals(evalresult['missingMust'],    [])
     self.assertEquals(evalresult['missingShould'],  [])
     self.assertEquals(evalresult['missingMay'],     [])
     self.assertEquals(evalresult['rouri'],          rometa.getRoUri())
     self.assertEquals(evalresult['minimuri'],       rometa.getComponentUri("Minim-UserRequirements2-min.rdf"))
     self.assertEquals(evalresult['target'],         "data/UserRequirements-astro.ods")
     self.assertEquals(evalresult['purpose'],        "create")
     self.assertEquals(evalresult['constrainturi'],
         rometa.getComponentUriAbs("Minim-UserRequirements2-min.rdf#create/data/UserRequirements-astro.ods"))
     self.assertEquals(evalresult['modeluri'],
         rometa.getComponentUriAbs("Minim-UserRequirements2-min.rdf#runnableRO"))
     self.deleteTestRo(rodir)
     return
示例#16
0
 def testEvaluateWfInputsRDF(self):
     # repeat previous test case, but with RDF output
     self.setupConfig()
     rodir = self.createTestRo(testbase, "test-simple-wf", "RO test minim", "ro-testMinim")
     self.populateTestRo(testbase, rodir)
     self.annotateWfRo(testbase, rodir)
     rometa   = ro_metadata(ro_config, rodir)
     minimuri = rometa.getComponentUri("simple-wf-minim.rdf")
     # Evaluate
     args = [ "ro", "evaluate", "checklist"
            , "-a"
            , "-d", rodir+"/"
            , "-o", "rdfxml"
            , "simple-wf-minim.rdf"
            , "Runnable"
            , "."
            ]
     self.outstr.seek(0)
     with StdoutContext.SwitchStdout(self.outstr):
         status = ro.runCommand(
             os.path.join(testbase, TestConfig.ro_test_config.CONFIGDIR),
             os.path.join(testbase, TestConfig.ro_test_config.ROBASEDIR),
             args)
     outtxt = self.outstr.getvalue()
     assert status == 0, "Status %d, outtxt: %s"%(status,outtxt)
     log.debug("status %d, outtxt: \n--------\n%s----"%(status, outtxt))
     # Check response returned
     self.outstr.seek(0)
     outgraph = rdflib.Graph()
     outgraph.parse(self.outstr)
     prefixes = make_sparql_prefixes()
     rouri    = rometa.getRoUri()
     modeluri = rometa.getComponentUriAbs("simple-wf-minim.rdf#runnable_RO_model")
     probequeries = (
         [ '''ASK { _:r minim:testedRO <%s> ; minim:minimUri <%s> }'''%
           (rouri, minimuri)
         , '''ASK { _:r minim:testedRO <%s> ; minim:testedModel <%s> }'''%
           (rouri, modeluri)
         , '''ASK { _:r minim:testedRO <%s> ; minim:satisfied [ minim:tryMessage "%s" ] }'''%
           (rouri, "Workflow instance or template found")
         , '''ASK { _:r minim:testedRO <%s> ; minim:satisfied [ minim:tryMessage "%s" ] }'''%
           (rouri, "All workflow inputs referenced or present")
         , '''ASK { _:r minim:testedRO <%s> ; minim:fullySatisfies <%s> }'''%
           (rouri, modeluri)
         , '''ASK { _:r minim:testedRO <%s> ; minim:nominallySatisfies <%s> }'''%
           (rouri, modeluri)
         , '''ASK { _:r minim:testedRO <%s> ; minim:minimallySatisfies <%s> }'''%
           (rouri, modeluri)
         , '''ASK { <%s> rdfs:label "%s" }'''%
           (rouri, rdflib.Literal("RO test minim"))
         ])
     for q in probequeries:
         log.debug("- query %s"%(q))
         r = outgraph.query(prefixes+q)
         self.assertEqual(r.type, 'ASK', "Result type %s for: %s"%(r.type, q))
         self.assertTrue(r.askAnswer, "Failed query: %s"%(q))
     self.deleteTestRo(rodir)
     return
示例#17
0
 def testQueryAnnotations(self):
     rodir = self.createTestRo(testbase, "data/ro-test-1",
         "Test query annotations", "ro-testRoAnnotate")
     romd  = ro_metadata.ro_metadata(ro_config, rodir)
     roresource = "subdir1/subdir1-file.txt"
     # Add anotations for file
     romd.addSimpleAnnotation(roresource, "type",        "Test file")
     romd.addSimpleAnnotation(roresource, "description", "File in test research object")
     romd.addSimpleAnnotation(roresource, "note", "Research object file created for annotation testing")
     romd.addSimpleAnnotation(roresource, "title",       "Test file in RO")
     romd.addSimpleAnnotation(roresource, "created",     "2011-12-07")
     romd.addSimpleAnnotation(roresource, "rdf:type",    ROTERMS.resource)
     # Query the file anotations
     queryprefixes = make_sparql_prefixes()
     query = (queryprefixes +
         """
         ASK
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator "Test User" .
             ?file rdf:type roterms:resource ;
                 dcterms:type "Test file" ;
                 dcterms:created "2011-12-07" .
         }
         """)
     resp = romd.queryAnnotations(query)
     self.assertTrue(resp, "Expected 'True' result for query: %s"%(query))
     query = (queryprefixes +
         """
         ASK
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator "Not user" .
         }
         """)
     resp = romd.queryAnnotations(query)
     self.assertFalse(resp, "Expected 'False' result for query: %s"%(query))
     query = (queryprefixes +
         """
         SELECT * WHERE
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator "Test User" .
             ?file rdf:type roterms:resource ;
                 dcterms:type "Test file" ;
                 dcterms:created ?date .
         }
         """)
     rouri       = romd.getRoUri()
     resourceuri = romd.getComponentUri(roresource)
     resp = romd.queryAnnotations(query)
     self.assertEqual(resp[0]['ro'],   rouri)
     self.assertEqual(resp[0]['file'], romd.getComponentUri(roresource))
     self.assertEqual(resp[0]['date'], rdflib.Literal("2011-12-07"))
     self.deleteTestRo(rodir)
     return
示例#18
0
 def testQueryAnnotations(self):
     (status, reason, rouri, manifest) = self.createTestRO("testQueryAnnotations")
     self.assertEqual(status, 201)
     romd   = ro_metadata.ro_metadata(ro_config, rouri)
     resuri = romd.getComponentUriAbs(Config.TEST_RESOURCE)
     resref = Config.TEST_RESOURCE
     (status, reason, bodyuri, agraph) = self.createTestAnnotation(rouri, resuri, resref)
     self.assertEqual(status, 201)
     # Query the file anotations
     queryprefixes = make_sparql_prefixes()
     query = (queryprefixes +
         """
         ASK
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator ?user .
         }
         """)
     resp = romd.queryAnnotations(query)
     self.assertTrue(resp, "Expected 'True' result for query: %s"%(query))
     query = (queryprefixes +
         """
         ASK
         {
             <%(resuri)s> dcterms:title ?title .
         }
         """%{"resuri": str(resuri)})
     resp = romd.queryAnnotations(query)
     self.assertTrue(resp, "Expected 'True' result for query: %s"%(query))
     query = (queryprefixes +
         """
         ASK
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator "Not user" .
         }
         """)
     resp = romd.queryAnnotations(query)
     self.assertFalse(resp, "Expected 'False' result for query: %s"%(query))
     query = (queryprefixes +
         """
         SELECT * WHERE
         {
             ?ro rdf:type ro:ResearchObject ;
                 ore:aggregates ?file .
             ?file dcterms:title ?title .
         }
         """)
     rouri       = romd.getRoUri()
     resp = romd.queryAnnotations(query)
     self.assertEqual(resp[0]['ro'],    rouri)
     self.assertEqual(resp[0]['file'],  resuri)
     self.assertEqual(resp[0]['title'], rdflib.Literal("Title for %s"%(Config.TEST_RESOURCE)))
     return
 def testQueryAnnotationsRemote(self):
     romd  = ro_metadata.ro_metadata(
         ro_config,
         "http://andros.zoo.ox.ac.uk/workspace/wf4ever-ro-catalogue/v0.1/simple-requirements/"
         )
     # Query the file anotations
     queryprefixes = """
         PREFIX rdf:        <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
         PREFIX ro:         <http://purl.org/wf4ever/ro#>
         PREFIX ore:        <http://www.openarchives.org/ore/terms/>
         PREFIX ao:         <http://purl.org/ao/>
         PREFIX dcterms:    <http://purl.org/dc/terms/>
         PREFIX roterms:    <http://ro.example.org/ro/terms/>
         """
     query = (queryprefixes +
         """
         ASK
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator "Test user" ;
                 ore:aggregates ?file .
         }
         """)
     resp = romd.queryAnnotations(query)
     self.assertTrue(resp, "Expected 'True' result for query: %s")
     query = (queryprefixes +
         """
         ASK
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator "Not user" .
         }
         """)
     resp = romd.queryAnnotations(query)
     self.assertFalse(resp, "Expected 'False' result for query: %s")
     query = (queryprefixes +
         """
         SELECT * WHERE
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator "Test user" ;
                 ore:aggregates ?file .
         }
         """)
     rouri       = romd.getRoUri()
     resourceuri = romd.getComponentUri("README")
     resp = romd.queryAnnotations(query)
     self.assertEqual(resp[0]['ro'],   rouri)
     aggs = [ respn['file'] for respn in resp ]
     self.assertIn( resourceuri, aggs, repr(aggs))
     return
示例#20
0
def real_evaluate(request):
    # isolate parameters
    RO      = request.params["RO"]
    minim   = request.params["minim"]
    target  = request.params.get("target",".")
    purpose = request.params["purpose"]
    # create rometa object
    # @@TODO: use proper configuration and credentials
    ro_config = {
        "annotationTypes":      annotationTypes,
        "annotationPrefixes":   annotationPrefixes,
        #"rosrs_uri":            target,
        "rosrs_uri":            "http://sandbox.wf4ever-project.org/rodl/ROs/",
        "rosrs_access_token":   "32801fc0-1df1-4e34-b",
        }
    rometa = ro_metadata(ro_config, RO)
    # invoke evaluation service
    #   ro_eval_minim.evaluate(rometa, minim, target, purpose)
    log.info("Evaluate RO %s, minim %s, target %s, purpose %s"%(RO,minim,target,purpose))
    (graph, evalresult) = ro_eval_minim.evaluate(rometa, minim, target, purpose)
    log.debug("evaluate:results: \n"+json.dumps(evalresult, indent=2))
    # Assemble graph of results
    #graph = rdflib.Graph() // start with minim graph
    graph.bind("rdf",    "http://www.w3.org/1999/02/22-rdf-syntax-ns#")
    graph.bind("result", "http://www.w3.org/2001/sw/DataAccess/tests/result-set#")
    graph.bind("minim",  "http://purl.org/minim/minim#")
    rouri = rdflib.URIRef(evalresult['rouri'])
    graph.add( (rouri, MINIM.testedConstraint, rdflib.URIRef(evalresult['constrainturi'])) )
    graph.add( (rouri, MINIM.testedPurpose,    rdflib.Literal(evalresult['purpose']))      )
    graph.add( (rouri, MINIM.testedTarget,     rdflib.Literal(evalresult['target']))        )
    graph.add( (rouri, MINIM.minimUri,         rdflib.URIRef(evalresult['minimuri']))      )
    graph.add( (rouri, MINIM.modelUri,         rdflib.URIRef(evalresult['modeluri']))      )
    for level in evalresult['summary']:
        log.info("RO %s, level %s, model %s"%(rouri,level,evalresult['modeluri']))
        graph.add( (rouri, level, rdflib.URIRef(evalresult['modeluri'])) )
    # Add details for all rules tested...
    def addRequirementsDetail(results, satlevel):
        for (req, binding) in results:
            b = rdflib.BNode()
            graph.add( (rouri, satlevel, b) )
            graph.add( (b, MINIM.tryRequirement, req['uri']) )
            for k in binding:
                b2 = rdflib.BNode()
                graph.add( (b,  RESULT.binding,  b2) )
                graph.add( (b2, RESULT.variable, rdflib.Literal(k)) )
                graph.add( (b2, RESULT.value,    rdflib.Literal(binding[k])) )
    addRequirementsDetail(evalresult['satisfied'], MINIM.satisfied)
    addRequirementsDetail(evalresult['missingMay'], MINIM.missingMay)
    addRequirementsDetail(evalresult['missingShould'], MINIM.missingShould)
    addRequirementsDetail(evalresult['missingMust'], MINIM.missingMust)
    return graph
 def testReadRoAnnotationBody(self):
     """
     Test function to create & read a simple annotation body on an RO
     """
     (status, reason, rouri, manifest) = self.createTestRO()
     self.assertEqual(status, 201)
     romd   = ro_metadata.ro_metadata(ro_config, rouri)
     resuri = romd.getComponentUriAbs(Config.TEST_RESOURCE)
     resref = Config.TEST_RESOURCE
     (status, reason, bodyuri, agraph) = self.createTestAnnotation(rouri, resuri, resref)
     self.assertEqual(status, 201)
     # Retrieve annotations
     anns = list(romd.getFileAnnotations(Config.TEST_RESOURCE))
     self.assertIn((resuri, DCTERMS.title, rdflib.Literal("Title for "+Config.TEST_RESOURCE)), anns)
     self.assertIn((resuri, RDFS.seeAlso,  rdflib.URIRef("http://example.org/test")),  anns)
     return
示例#22
0
 def testEvalMayMissing(self):
     """
     Evaluate complete RO against Minim description 
     """
     self.setupConfig()
     rodir     = self.createTestRo(testbase, "test-data-1", "RO test minim", "ro-testMinim")
     self.populateTestRo(testbase, rodir)
     rometa    = ro_metadata(ro_config, rodir)
     minimbase = rometa.getComponentUri("Minim-UserRequirements.rdf")
     modeluri  = ro_minim.getElementUri(minimbase, "#missingMayRequirement")
     (g,evalresult) = ro_eval_minim.evaluate(rometa,
         "Minim-UserRequirements.rdf",               # Minim file
         "docs/UserRequirements-bio.pdf",            # Target resource
         "create")                                   # Purpose
     missing_may = (
         { 'level': "MAY"
         , 'model': modeluri 
         , 'label': rdflib.Literal("aggregates docs/missing.css")
         , 'datarule':
           { 'aggregates': rometa.getComponentUri("docs/missing.css")
           , 'show':       rdflib.Literal("05 - aggregates docs/missing.css")
           , 'showpass':   None
           , 'showfail':   None
           , 'showmiss':   None
           , 'list':       []
           , 'listpass':   []
           , 'listfail':   []
           }
         , 'uri': ro_minim.getElementUri(minimbase, "#isPresent/docs/missing.css")
         , 'ruleuri': evalresult['missingMay'][0][0]['ruleuri']
         , 'seq': "05 - aggregates docs/missing.css"
         })
     self.maxDiff=None
     self.assertEquals(evalresult['summary'],        [MINIM.nominallySatisfies, MINIM.minimallySatisfies])
     self.assertEquals(evalresult['missingMust'],    [] )
     self.assertEquals(evalresult['missingShould'],  [] )
     self.assertEquals(evalresult['missingMay'],     [(missing_may,{})] )
     self.assertEquals(evalresult['rouri'],          rometa.getRoUri())
     self.assertEquals(evalresult['minimuri'],       rometa.getComponentUri("Minim-UserRequirements.rdf"))
     self.assertEquals(evalresult['target'],         "docs/UserRequirements-bio.pdf")
     self.assertEquals(evalresult['purpose'],        "create")
     self.assertEquals(evalresult['constrainturi'],  
         rometa.getComponentUriAbs("Minim-UserRequirements.rdf#create/docs/UserRequirements-bio.pdf"))
     self.assertEquals(evalresult['modeluri'],
         rometa.getComponentUriAbs("Minim-UserRequirements.rdf#missingMayRequirement"))
     self.deleteTestRo(rodir)
     return
示例#23
0
 def testQueryAnnotationsRemote(self):
     romd  = ro_metadata.ro_metadata(
         ro_config,
         "http://andros.zoo.ox.ac.uk/workspace/wf4ever-ro-catalogue/v0.1/simple-requirements/"
         )
     # Query the file anotations
     queryprefixes = make_sparql_prefixes()
     query = (queryprefixes +
         """
         ASK
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator "Test user" ;
                 ore:aggregates ?file .
         }
         """)
     resp = romd.queryAnnotations(query)
     self.assertTrue(resp, "Expected 'True' result for query: %s")
     query = (queryprefixes +
         """
         ASK
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator "Not user" .
         }
         """)
     resp = romd.queryAnnotations(query)
     self.assertFalse(resp, "Expected 'False' result for query: %s")
     query = (queryprefixes +
         """
         SELECT * WHERE
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator "Test user" ;
                 ore:aggregates ?file .
         }
         """)
     rouri       = romd.getRoUri()
     resourceuri = romd.getComponentUri("README")
     resp = romd.queryAnnotations(query)
     self.assertEqual(resp[0]['ro'],   rouri)
     aggs = [ respn['file'] for respn in resp ]
     self.assertIn( resourceuri, aggs, repr(aggs))
     return
 def testEvaluateRDF(self):
     self.setupConfig()
     rodir = self.createTestRo(testbase, "test-chembox", "RO test minim", "ro-testMinim")
     rouri = ro_manifest.getRoUri(rodir)
     self.populateTestRo(testbase, rodir)
     rometa   = ro_metadata(ro_config, rodir)
     resuri   = rometa.getComponentUriAbs("http://purl.org/net/chembox/Ethane")
     reslabel = "Ethane"
     rometa.addGraphAnnotation(resuri, "Ethane.ttl")
     # Now run evaluation against test RO
     (minimgr, evalresult) = ro_eval_minim.evaluate(rometa,
         "Minim-chembox.ttl",                  # Minim file
         resuri,                               # Target resource
         "complete")                           # Purpose
     resultgr = ro_eval_minim.evalResultGraph(minimgr, evalresult)
     log.debug("------ resultgr:\n%s\n----"%(resultgr.serialize(format='turtle'))) # pretty-xml
     ## print "------ resultgr:\n%s\n----"%(resultgr.serialize(format='turtle'))
     # Check response returned
     modeluri = rdflib.URIRef('http://example.com/chembox-samples/minim_model')
     prefixes = make_sparql_prefixes()
     probequeries = (
         [ '''ASK { _:r minim:testedRO <%s> ; minim:minimUri <%s> }'''%
           (rouri, rometa.getComponentUri("Minim-chembox.ttl"))
         , '''ASK { _:r minim:testedRO <%s> ; minim:testedModel <%s> }'''%
           (rouri, modeluri)
         , '''ASK { _:r minim:testedTarget <%s> ; minim:satisfied [ minim:tryMessage "%s" ] }'''%
           (resuri, "InChI identifier is present")
         , '''ASK { _:r minim:testedTarget <%s> ; minim:satisfied [ minim:tryMessage "%s" ] }'''%
           (resuri, "ChemSpider identifier is present")
         , '''ASK { _:r minim:testedTarget <%s> ; minim:missingMay [ minim:tryMessage "%s" ] }'''%
           (resuri, "No synomym is present")
         , '''ASK { _:r minim:testedTarget <%s> ; minim:nominallySatisfies <%s> }'''%
           (resuri, modeluri)
         , '''ASK { _:r minim:testedTarget <%s> ; minim:minimallySatisfies <%s> }'''%
           (resuri, modeluri)
         , '''ASK { <%s> rdfs:label "%s" }'''%
           (resuri, reslabel)
         ])
     for q in probequeries:
         r = resultgr.query(prefixes+q)
         self.assertEqual(r.type, 'ASK', "Result type %s for: %s"%(r.type, q))
         self.assertTrue(r.askAnswer, "Failed query: %s"%(q))
     self.deleteTestRo(rodir)
     return
 def testQueryAnnotationsWithMissingGraph(self):
     """
     This test is included to ensure that queries still work as expected when
     the manifest contains a reference to a non-existent manifest graph
     """
     rodir = self.createTestRo(testbase, "data/ro-test-1",
         "Test query annotations", "ro-testRoAnnotate")
     romd  = ro_metadata.ro_metadata(ro_config, rodir)
     roresource = "subdir1/subdir1-file.txt"
     # Add anotations for file
     romd.addSimpleAnnotation(roresource, "type",        "Test file")
     romd.addSimpleAnnotation(roresource, "description", "File in test research object")
     romd.addSimpleAnnotation(roresource, "note", "Research object file created for annotation testing")
     romd.addSimpleAnnotation(roresource, "title",       "Test file in RO")
     romd.addSimpleAnnotation(roresource, "created",     "2011-12-07")
     romd.addSimpleAnnotation(roresource, "rdf:type",    ROTERMS.resource)
     # Apply non-exietent graph annotation
     annotation_graph_filename = os.path.join(os.path.abspath(rodir), "annotate-none.rdf")
     romd.addGraphAnnotation(roresource, annotation_graph_filename)
     # Query the file anotations
     queryprefixes = """
         PREFIX rdf:        <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
         PREFIX ro:         <http://purl.org/wf4ever/ro#>
         PREFIX ore:        <http://www.openarchives.org/ore/terms/>
         PREFIX ao:         <http://purl.org/ao/>
         PREFIX dcterms:    <http://purl.org/dc/terms/>
         PREFIX roterms:    <http://ro.example.org/ro/terms/>
         """
     query = (queryprefixes +
         """
         ASK
         {
             ?ro rdf:type ro:ResearchObject ;
                 dcterms:creator "Test User" .
             ?file rdf:type roterms:resource ;
                 dcterms:type "Test file" ;
                 dcterms:created "2011-12-07" .
         }
         """)
     resp = romd.queryAnnotations(query)
     self.assertTrue(resp, "Expected 'True' result for query: %s")
     self.deleteTestRo(rodir)
     return
示例#26
0
 def testCreateReadRoAnnotationBody(self):
     """
     Test function to create & read a simple annotation body on an RO
     """
     rodir = self.createTestRo(testbase, "data/ro-test-1", "RO test annotation", "ro-testRoAnnotate")
     romd  = ro_metadata.ro_metadata(ro_config, rodir)
     roresource = "."
     attrdict = {
         "type":         rdflib.Literal("Research Object"),
         # @@TODO: handle lists "keywords":     ["test", "research", "object"],
         "description":  rdflib.Literal("Test research object"),
         "format":       rdflib.Literal("application/vnd.wf4ever.ro"),
         "note":         rdflib.Literal("Research object created for annotation testing"),
         "title":        rdflib.Literal("Test research object"),
         "created":      rdflib.Literal("2011-12-07")
         }
     annotationfile = romd._createAnnotationBody(roresource, attrdict)
     # Ann-%04d%02d%02d-%04d-%s.rdf
     self.assertRegexpMatches(annotationfile,
         r"^\.ro/Ann-\d\d\d\d\d\d\d\d-\d+-RO_test_annotation\.rdf",
         msg="Unexpected filename form for annotation: "+annotationfile)
     annotationgraph = romd._readAnnotationBody(annotationfile)
     attrpropdict = {
         "type":         DCTERMS.type,
         # @@TODO "keywords":     DCTERMS.subject,
         "description":  DCTERMS.description,
         "format":       DCTERMS.format,
         "note":         ROTERMS.note,
         "title":        DCTERMS.title,
         "created":      DCTERMS.created
         }
     s = romd.getComponentUri(roresource)
     log.debug("annotation subject %s"%repr(s))
     for k in attrpropdict:
         p = attrpropdict[k]
         log.debug("annotation predicate %s"%repr(p))
         v = attrdict[k]
         a = annotationgraph.value(s, p, None)
         log.debug("annotation value %s"%repr(a))
         #self.assertEqual(len(a), 1, "Singleton result expected")
         self.assertEqual(a, v)
     self.deleteTestRo(rodir)
     return
示例#27
0
 def testEvaluateWfInputs(self):
     # Test cases using content match rule
     # Also tests constraint that is not directly linked to RO,
     # and use of designated target resource in probe query
     self.setupConfig()
     rodir = self.createTestRo(testbase, "test-simple-wf", "RO test minim", "ro-testMinim")
     self.populateTestRo(testbase, rodir)
     self.annotateWfRo(testbase, rodir)
     rometa   = ro_metadata(ro_config, rodir)
     minimuri = rometa.getComponentUri("simple-wf-minim.rdf")
     # Evaluate
     args = [ "ro", "evaluate", "checklist"
            , "-a"
            , "-d", rodir+"/"
            , "simple-wf-minim.rdf"
            , "Runnable"
            , "."
            ]
     self.outstr.seek(0)
     with StdoutContext.SwitchStdout(self.outstr):
         status = ro.runCommand(
             os.path.join(testbase, TestConfig.ro_test_config.CONFIGDIR),
             os.path.join(testbase, TestConfig.ro_test_config.ROBASEDIR),
             args)
     outtxt = self.outstr.getvalue()
     assert status == 0, "Status %d, outtxt: %s"%(status,outtxt)
     log.debug("status %d, outtxt: %s"%(status, outtxt))
     # Check response returned
     expect = (
         [ "Research Object file://%s/:"%(rodir)
         , "Fully complete for Runnable of resource ."
         , "Satisfied requirements:"
         , "  Workflow instance or template found" 
         , "  All workflow inputs referenced or present"
         , "Research object URI:     %s"%(rometa.getRoUri())
         , "Minimum information URI: %s"%(minimuri)
         ])
     self.outstr.seek(0)
     for line in self.outstr:
         self.assertIn(str(line)[:-1], expect)
     self.deleteTestRo(rodir)
     return
示例#28
0
 def testAddAggregatedResourcesWithDirs(self):
     """
     Test function that adds aggregated resources to a research object manifest
     """
     rodir = self.createTestRo(testbase, "data/ro-test-1", "RO test aggregation", "ro-testRoAggregation")
     romd  = ro_metadata.ro_metadata(ro_config, rodir)
     romd.addAggregatedResources(rodir, recurse=True, includeDirs=True)
     def URIRef(path):
         return romd.getComponentUri(path)
     s = romd.getRoUri()
     g = rdflib.Graph()
     g.add( (s, RDF.type,            RO.ResearchObject                  ) )
     g.add( (s, ORE.aggregates,      URIRef("README-ro-test-1")         ) )
     g.add( (s, ORE.aggregates,      URIRef("subdir1/") ) )
     g.add( (s, ORE.aggregates,      URIRef("subdir1/subdir1-file.txt") ) )
     g.add( (s, ORE.aggregates,      URIRef("subdir2/") ) )
     g.add( (s, ORE.aggregates,      URIRef("subdir2/subdir2-file.txt") ) )
     self.checkManifestGraph(rodir, g)
     self.deleteTestRo(rodir)
     return
示例#29
0
 def testAddRoAnnotationIsAggregated(self):
     rodir = self.createTestRo(testbase, "data/ro-test-1",
         "Test add RO annotation", "ro-testRoAnnotate")
     romd  = ro_metadata.ro_metadata(ro_config, rodir)
     roresource = "."
     # Add anotations for RO
     romd.addSimpleAnnotation(roresource, "note", "Research object for annotation testing")
     # Retrieve the anotations
     rouri           = romd.getRoUri()
     addedannotation = (rouri, ROTERMS.note, rdflib.Literal('Research object for annotation testing'))
     annotations     = romd.getRoAnnotations()
     self.assertIn(addedannotation, annotations)
     for (a, p) in romd.manifestgraph.subject_predicates(object=rouri):
         if p in [AO.annotatesResource, RO.annotatesAggregatedResource]:
             b = romd.manifestgraph.value(subject=a, predicate=AO.body)
             if str(romd.getComponentUriRel(b)) != ro_test_config.ROMANIFESTPATH:
                 aggregate_annbody = (rouri, ORE.aggregates, b)
                 self.assertIn(aggregate_annbody, romd.manifestgraph)
     self.deleteTestRo(rodir)
     return
示例#30
0
    def testPush(self):
        """
        Push a Research Object to ROSRS.

        ro push <zip> | -d <dir>  [ -f ] [ -r <rosrs_uri> ] [ -t <access_token> ]
        """

        rodir = self.createTestRo(testbase, "data/ro-test-1", "RO test ro push", "ro-testRoPush")
        localRo  = ro_metadata.ro_metadata(ro_config, rodir)
        localRo.addAggregatedResources(rodir, recurse=True)
        roresource = "subdir1/subdir1-file.txt"
        # Add anotations for file
        localRo.addSimpleAnnotation(roresource, "type",         "Test file")
        localRo.addSimpleAnnotation(roresource, "description",  "File in test research object")
        args = [
            "ro", "push",
            "-d", rodir,
            "-r", ro_test_config.ROSRS_URI,
            "-t", ro_test_config.ROSRS_ACCESS_TOKEN,
            "-v"
            ]
        httpsession = ROSRS_Session(ro_test_config.ROSRS_URI,
            accesskey=ro_test_config.ROSRS_ACCESS_TOKEN)
        ro_remote_metadata.deleteRO(httpsession, urlparse.urljoin(httpsession.baseuri(), "RO_test_ro_push/"))
        with SwitchStdout(self.outstr):
            status = ro.runCommand(ro_test_config.CONFIGDIR, ro_test_config.ROBASEDIR, args)
        assert status == 0
        self.assertEqual(self.outstr.getvalue().count("Resource uploaded:"), 8)
        self.assertEqual(self.outstr.getvalue().count("Resource deleted in ROSRS:"), 0)
        self.assertEqual(self.outstr.getvalue().count("Annotation pushed:"), 3)
        self.assertEqual(self.outstr.getvalue().count("Annotation deleted in ROSRS:"), 0)
        # Clean up
        self.deleteTestRo(rodir)
        httpsession = ROSRS_Session(ro_test_config.ROSRS_URI,
            accesskey=ro_test_config.ROSRS_ACCESS_TOKEN)
        for line in self.outstr.getvalue().splitlines():
            if "Created RO:" in line:
                createdRO = line.split("Created RO:")[1].strip()
                ro_remote_metadata.deleteRO(httpsession, createdRO)

        return