myGrid-taverna-scufl 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENCE +165 -0
- data/README +133 -0
- data/lib/baclava/reader.rb +61 -0
- data/lib/baclava/writer.rb +82 -0
- data/lib/document/data.rb +24 -0
- data/lib/document/report.rb +91 -0
- data/lib/enactor/client.rb +673 -0
- data/lib/scufl/dot.rb +248 -0
- data/lib/scufl/model.rb +153 -0
- data/lib/scufl/parser.rb +162 -0
- data/test/fixtures/animal.xml +10 -0
- data/test/fixtures/colouranimal.xml +14 -0
- data/test/tc_client.rb +191 -0
- data/test/ts_taverna.rb +4 -0
- metadata +95 -0
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<s:scufl xmlns:s="http://org.embl.ebi.escience/xscufl/0.1alpha" version="0.2" log="0">
|
3
|
+
<s:workflowdescription lsid="urn:lsid:net.sf.taverna:wfDefinition:6ebc9ec6-1045-459d-a26c-74e4efe2d6f8" author="" title="animal" />
|
4
|
+
<s:processor name="AnimalFactory" boring="true">
|
5
|
+
<s:stringconstant>frog</s:stringconstant>
|
6
|
+
</s:processor>
|
7
|
+
<s:link source="AnimalFactory:value" sink="animal" />
|
8
|
+
<s:sink name="animal" />
|
9
|
+
</s:scufl>
|
10
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<s:scufl xmlns:s="http://org.embl.ebi.escience/xscufl/0.1alpha" version="0.2" log="0">
|
3
|
+
<s:workflowdescription lsid="urn:lsid:net.sf.taverna:wfDefinition:a378c99c-b85e-46cd-91be-47ac93cde18c" author="" title="animal" />
|
4
|
+
<s:processor name="colour_the_animal">
|
5
|
+
<s:local>org.embl.ebi.escience.scuflworkers.java.StringConcat</s:local>
|
6
|
+
</s:processor>
|
7
|
+
<s:link source="animal" sink="colour_the_animal:string2" />
|
8
|
+
<s:link source="colour" sink="colour_the_animal:string1" />
|
9
|
+
<s:link source="colour_the_animal:output" sink="coulouredAnimal" />
|
10
|
+
<s:source name="animal" />
|
11
|
+
<s:source name="colour" />
|
12
|
+
<s:sink name="coulouredAnimal" />
|
13
|
+
</s:scufl>
|
14
|
+
|
data/test/tc_client.rb
ADDED
@@ -0,0 +1,191 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
2
|
+
|
3
|
+
require 'test/unit'
|
4
|
+
require 'enactor/client'
|
5
|
+
require 'document/data'
|
6
|
+
|
7
|
+
class TcClient < Test::Unit::TestCase
|
8
|
+
|
9
|
+
FIXTURES = File.join(File.dirname(__FILE__), "fixtures")
|
10
|
+
|
11
|
+
TEST_SERVER="http://rpc269.cs.man.ac.uk:8180/remotetaverna/v1/"
|
12
|
+
TEST_USER="snake"
|
13
|
+
TEST_PW=IO.read("#{FIXTURES}/password.txt").strip
|
14
|
+
|
15
|
+
# Test workflows
|
16
|
+
ANIMAL_WF=IO.read("#{FIXTURES}/animal.xml")
|
17
|
+
COLOUR_ANIMAL_WF=IO.read("#{FIXTURES}/colouranimal.xml")
|
18
|
+
|
19
|
+
def setup
|
20
|
+
@service = Enactor::Client.new(TEST_SERVER, TEST_USER, TEST_PW)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_connect
|
24
|
+
capabilities_doc = @service.get_capabilities_doc()
|
25
|
+
#users = capabilities.elements["{http://taverna.sf.net/service}users"]
|
26
|
+
users = capabilities_doc.root.elements["users"]
|
27
|
+
users_url = users.attributes.get_attribute_ns('http://www.w3.org/1999/xlink', 'href').value
|
28
|
+
assert_equal(TEST_SERVER + "users", users_url)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_get_user_url
|
32
|
+
user_url = @service.get_user_url()
|
33
|
+
assert_equal(TEST_SERVER + "users/" + TEST_USER, user_url)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_get_user_collection_url
|
37
|
+
workflow_url = @service.get_user_collection_url("workflows")
|
38
|
+
assert_equal(TEST_SERVER + "users/" + TEST_USER + "/workflows", workflow_url)
|
39
|
+
job_url = @service.get_user_collection_url("jobs")
|
40
|
+
assert_equal(TEST_SERVER + "users/" + TEST_USER + "/jobs", job_url)
|
41
|
+
data_url = @service.get_user_collection_url("datas")
|
42
|
+
assert_equal(TEST_SERVER + "users/" + TEST_USER + "/data", data_url)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_upload_workflow
|
46
|
+
workflow_url = @service.upload_workflow(ANIMAL_WF)
|
47
|
+
prefix = TEST_SERVER + "workflows/"
|
48
|
+
assert(workflow_url.index(prefix) == 0)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_workflow_exists
|
52
|
+
workflow_url = @service.upload_workflow(ANIMAL_WF)
|
53
|
+
assert(@service.workflow_exists?(workflow_url))
|
54
|
+
assert(!@service.workflow_exists?(workflow_url.chop))
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_service_valid
|
58
|
+
assert(@service.service_valid?)
|
59
|
+
assert(!Enactor::Client.new(TEST_SERVER, TEST_USER, TEST_PW.chop).service_valid?)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_create_job
|
63
|
+
workflow_url = @service.upload_workflow(ANIMAL_WF)
|
64
|
+
job_doc = @service.create_job_doc(workflow_url)
|
65
|
+
#workflow_element = job_doc.elements["{http://taverna.sf.net/service}workflow"]
|
66
|
+
workflow_element = job_doc.root.elements['workflow']
|
67
|
+
assert_equal(workflow_url, workflow_element.attributes.get_attribute_ns('http://www.w3.org/1999/xlink', 'href').value)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_submit_job
|
71
|
+
workflow_url = @service.upload_workflow(ANIMAL_WF)
|
72
|
+
job_url = @service.submit_job(workflow_url)
|
73
|
+
prefix = TEST_SERVER + "jobs/"
|
74
|
+
assert(job_url.index(prefix) == 0)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_create_data
|
78
|
+
inputs = {}
|
79
|
+
inputs['colour'] = Document::Data.new('red')
|
80
|
+
inputs['animal'] = Document::Data.new('snake')
|
81
|
+
data_document = @service.create_data_doc(inputs)
|
82
|
+
parsed = @service.parse_data_doc(data_document)
|
83
|
+
assert_equal(inputs, parsed)
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_upload_data
|
87
|
+
inputs = {}
|
88
|
+
inputs["colour"] = Document::Data.new("red")
|
89
|
+
inputs["animal"] = Document::Data.new("snake")
|
90
|
+
data_url = @service.upload_data(inputs)
|
91
|
+
prefix = TEST_SERVER + "data/"
|
92
|
+
assert(data_url.index(prefix) == 0)
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_submit_job_with_data
|
96
|
+
inputs = {}
|
97
|
+
inputs["colour"] = Document::Data.new("red")
|
98
|
+
inputs["animal"] = Document::Data.new("snake")
|
99
|
+
workflow_url = @service.upload_workflow(COLOUR_ANIMAL_WF)
|
100
|
+
data_url = @service.upload_data(inputs)
|
101
|
+
job_url = @service.submit_job(workflow_url, data_url)
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_get_job_status
|
105
|
+
workflow_url = @service.upload_workflow(ANIMAL_WF)
|
106
|
+
job_url = @service.submit_job(workflow_url)
|
107
|
+
status = @service.get_job_status(job_url)
|
108
|
+
assert(Enactor::Status.valid?(status))
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_get_job_created_date
|
112
|
+
workflow_url = @service.upload_workflow(ANIMAL_WF)
|
113
|
+
job_url = @service.submit_job(workflow_url)
|
114
|
+
time = @service.get_job_created_date(job_url)
|
115
|
+
assert(time.kind_of?(DateTime))
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_get_job_modified_date
|
119
|
+
workflow_url = @service.upload_workflow(ANIMAL_WF)
|
120
|
+
job_url = @service.submit_job(workflow_url)
|
121
|
+
time = @service.get_job_modified_date(job_url)
|
122
|
+
assert(time.kind_of?(DateTime))
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_finished
|
126
|
+
workflow_url = @service.upload_workflow(ANIMAL_WF)
|
127
|
+
job_url = @service.submit_job(workflow_url)
|
128
|
+
# Assuming our server is not VERY quick
|
129
|
+
assert(!@service.finished?(job_url))
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_job_outputs_size
|
133
|
+
workflow_url = @service.upload_workflow(ANIMAL_WF)
|
134
|
+
job_url = @service.submit_job(workflow_url)
|
135
|
+
@service.wait_for_job(job_url, 30)
|
136
|
+
assert_equal(481, @service.get_job_outputs_size(job_url))
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_wait_for_job
|
140
|
+
workflow_url = @service.upload_workflow(ANIMAL_WF)
|
141
|
+
job_url = @service.submit_job(workflow_url)
|
142
|
+
now = Time.now
|
143
|
+
timeout = 1
|
144
|
+
status = @service.wait_for_job(job_url, timeout)
|
145
|
+
after = Time.now
|
146
|
+
|
147
|
+
# Should be at least some milliseconds longer than the timeout
|
148
|
+
assert(after - now > timeout)
|
149
|
+
assert(!@service.finished?(job_url))
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_execute
|
153
|
+
# Note: This test might take a minute or so to complete
|
154
|
+
results = @service.execute_sync(ANIMAL_WF)
|
155
|
+
assert_equal(1, results.length)
|
156
|
+
assert_equal("frog", results["animal"].value)
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_execute_with_data
|
160
|
+
# Note: This test might take a minute or so to complete
|
161
|
+
inputs = {}
|
162
|
+
inputs["colour"] = Document::Data.new("red")
|
163
|
+
inputs["animal"] = Document::Data.new("snake")
|
164
|
+
workflow_url = @service.upload_workflow(COLOUR_ANIMAL_WF)
|
165
|
+
results = @service.execute_sync(nil, workflow_url, inputs)
|
166
|
+
|
167
|
+
assert_equal(1, results.length)
|
168
|
+
assert_equal("redsnake", results["coulouredAnimal"].value)
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_execute_with_multiple_data
|
172
|
+
# Note: This test might take a minute or so to complete
|
173
|
+
inputs = {}
|
174
|
+
inputs["colour"] = Document::Data.new(["red", "green"])
|
175
|
+
inputs["animal"] = Document::Data.new(["rabbit", "mouse", "cow"])
|
176
|
+
workflow_url = @service.upload_workflow(COLOUR_ANIMAL_WF)
|
177
|
+
results = @service.execute_sync(nil, workflow_url, inputs)
|
178
|
+
|
179
|
+
assert_equal(1, results.length)
|
180
|
+
animals = results["coulouredAnimal"].value
|
181
|
+
|
182
|
+
assert_equal(2, animals.length)
|
183
|
+
animals = animals[0] + animals[1]
|
184
|
+
assert_equal(6, animals.length)
|
185
|
+
|
186
|
+
assert(animals.include?("redmouse"))
|
187
|
+
assert(animals.include?("greenrabbit"))
|
188
|
+
assert(!animals.include?("redsnake"))
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
data/test/ts_taverna.rb
ADDED
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: myGrid-taverna-scufl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- David Withers
|
8
|
+
- Emmanuel Tagarira
|
9
|
+
autorequire: baclava, client, document, scufl
|
10
|
+
bindir: bin
|
11
|
+
cert_chain:
|
12
|
+
date: 2009-08-18 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rdoc
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.4.3
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: darkfish-rdoc
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.1.5
|
34
|
+
version:
|
35
|
+
description: This a gem developed by myGrid for the purpose of interacting with Taverna 1 workflows. An example use would be the image genaration for the model representing Taverna 1 workflows as used in myExperiment.
|
36
|
+
email: david.withers@manchester.ac.uk
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files:
|
42
|
+
- README
|
43
|
+
- LICENCE
|
44
|
+
files:
|
45
|
+
- test/fixtures
|
46
|
+
- test/fixtures/animal.xml
|
47
|
+
- test/fixtures/colouranimal.xml
|
48
|
+
- test/tc_client.rb
|
49
|
+
- test/ts_taverna.rb
|
50
|
+
- lib/baclava
|
51
|
+
- lib/baclava/reader.rb
|
52
|
+
- lib/baclava/writer.rb
|
53
|
+
- lib/document
|
54
|
+
- lib/document/data.rb
|
55
|
+
- lib/document/report.rb
|
56
|
+
- lib/enactor
|
57
|
+
- lib/enactor/client.rb
|
58
|
+
- lib/scufl
|
59
|
+
- lib/scufl/dot.rb
|
60
|
+
- lib/scufl/model.rb
|
61
|
+
- lib/scufl/parser.rb
|
62
|
+
- README
|
63
|
+
- LICENCE
|
64
|
+
has_rdoc: true
|
65
|
+
homepage: http://www.mygrid.org.uk/
|
66
|
+
licenses:
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options:
|
69
|
+
- -N
|
70
|
+
- --tab-width=2
|
71
|
+
- --main=README
|
72
|
+
- --exclude='scufl.gemspec|test'
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 1.0.1
|
80
|
+
version:
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: "0"
|
86
|
+
version:
|
87
|
+
requirements: []
|
88
|
+
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 1.3.5
|
91
|
+
signing_key:
|
92
|
+
specification_version: 1
|
93
|
+
summary: Support for interacting with the Taverna workflow system (Scufl).
|
94
|
+
test_files:
|
95
|
+
- test/ts_taverna.rb
|