rbbt-util 5.26.134 → 5.26.135
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rbbt/workflow/remote/client.rb +2 -2
- data/lib/rbbt/workflow/remote/remote_step.rb +23 -16
- data/lib/rbbt/workflow/remote/rest/get.rb +1 -0
- data/lib/rbbt/workflow/util/archive.rb +1 -1
- data/test/rbbt/workflow/remote/test_client.rb +45 -1
- data/test/test_helper.rb +38 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 909dfa474d2b8e4b75c1eef7083175b77f4851af9d73ce08fd133c4113b278d6
|
4
|
+
data.tar.gz: 6090421ae9f31d4aeebab5f830213449417739c715f2f69d441de0fb2ff9c76a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26dfe891c7d16718b1c8ea261c24156ba9c8225646ecddbea77f912f4319070dcfbd18fd02906c1801ede7389817406e74b89d27fb939b1c4bdd33f0a6fc4ffe
|
7
|
+
data.tar.gz: 2db91525e84a01390b190b50b9b9f3ffe7689660266d2909bf319bf42c3bcdceb9d03c49e3e591814be485eba85dbd333045f167f18e9d53424cfd10fdb72f15
|
@@ -29,12 +29,12 @@ class WorkflowRemoteClient
|
|
29
29
|
end
|
30
30
|
init_remote_tasks
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def to_s
|
34
34
|
name
|
35
35
|
end
|
36
36
|
|
37
|
-
def job(task, name, inputs)
|
37
|
+
def job(task, name = nil, inputs = {})
|
38
38
|
task_info = task_info(task)
|
39
39
|
fixed_inputs = {}
|
40
40
|
input_types = IndiferentHash.setup(task_info[:input_types])
|
@@ -22,26 +22,33 @@ class WorkflowRemoteClient
|
|
22
22
|
@base_name
|
23
23
|
end
|
24
24
|
|
25
|
+
def cache_file
|
26
|
+
digest = Misc.obj2digest([url, task, base_name, inputs])
|
27
|
+
Rbbt.var.cache.REST[digest].find
|
28
|
+
end
|
29
|
+
|
25
30
|
def run(no_load = false)
|
26
31
|
no_load = @is_stream ? :stream : true if no_load
|
27
32
|
|
28
33
|
@mutex.synchronize do
|
29
|
-
@result ||=
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
34
|
+
@result ||= Persist.persist("REST persist", result_type, :file => cache_file) do
|
35
|
+
begin
|
36
|
+
if @is_exec
|
37
|
+
exec(no_load)
|
38
|
+
elsif no_load == :stream
|
39
|
+
_run_job(:stream)
|
40
|
+
elsif no_load
|
41
|
+
init_job
|
42
|
+
nil
|
43
|
+
else
|
44
|
+
init_job
|
45
|
+
join
|
46
|
+
self.load
|
47
|
+
end
|
48
|
+
ensure
|
49
|
+
@started = true
|
50
|
+
end
|
51
|
+
end
|
45
52
|
end
|
46
53
|
|
47
54
|
return @result if no_load == :stream
|
@@ -211,7 +211,7 @@ puts resource[path].find(search_path)
|
|
211
211
|
end
|
212
212
|
end
|
213
213
|
|
214
|
-
TmpFile.with_file(files_and_dirs.sort_by{|l| l.length}.to_a * "\n"
|
214
|
+
TmpFile.with_file(files_and_dirs.sort_by{|l| l.length}.to_a * "\n") do |tmp_include_file|
|
215
215
|
test_str = options[:test] ? '-nv' : ''
|
216
216
|
|
217
217
|
cmd = "rsync -avztAXHP --progress #{test_str} --files-from='#{tmp_include_file}' #{source}/ #{target}/ #{other_rsync_args}"
|
@@ -1,13 +1,57 @@
|
|
1
1
|
require File.join(File.expand_path(File.dirname(__FILE__)), '../../..', 'test_helper.rb')
|
2
|
+
require 'rbbt/workflow'
|
2
3
|
require 'rbbt/workflow/remote/client'
|
3
4
|
|
5
|
+
class TestWFRest
|
6
|
+
extend Workflow
|
7
|
+
|
8
|
+
input :name, :string, "Name to greet", "World"
|
9
|
+
task :hi => :string do |name|
|
10
|
+
"Hello #{name}"
|
11
|
+
end
|
12
|
+
|
13
|
+
dep :hi
|
14
|
+
task :intro => :string do
|
15
|
+
step(:hi).load + ", nice to meet you"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
4
19
|
class TestRemote < Test::Unit::TestCase
|
5
|
-
|
20
|
+
|
21
|
+
def _test_ssh
|
6
22
|
Log.severity = 0
|
7
23
|
client = WorkflowRemoteClient.new "ssh://localhost:Translation", "Translation"
|
8
24
|
job = client.job("translate", "SSH-TEST", :genes => ["TP53","KRAS"])
|
9
25
|
iii job.url
|
10
26
|
puts job.run
|
11
27
|
end
|
28
|
+
|
29
|
+
def test_rest
|
30
|
+
Log.with_severity 0 do
|
31
|
+
|
32
|
+
workflow_server(TestWFRest) do |client|
|
33
|
+
assert_equal "Hello World", client.job(:hi, nil, {}).run
|
34
|
+
assert_equal "Hello Miguel", client.job(:hi, nil, {:name => :Miguel}).run
|
35
|
+
assert_equal "Hello Miguel, nice to meet you", client.job(:intro, nil, {:name => :Miguel}).run
|
36
|
+
end
|
37
|
+
|
38
|
+
workflow_server(TestWFRest, :Port => 1902) do |client|
|
39
|
+
assert_equal "Hello World", client.job(:hi, nil, {}).run
|
40
|
+
assert_equal "Hello Miguel", client.job(:hi, nil, {:name => :Miguel}).run
|
41
|
+
assert_equal "Hello Miguel, nice to meet you", client.job(:intro, nil, {:name => :Miguel}).run
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_rest_clean
|
47
|
+
real_job = TestWFRest.job(:hi)
|
48
|
+
real_job.run
|
49
|
+
first_time = File.ctime(real_job.path)
|
50
|
+
workflow_server(TestWFRest) do |client|
|
51
|
+
assert File.ctime(real_job.path) == first_time
|
52
|
+
assert_equal "Hello World", client.job(:hi, nil, {}).clean.run
|
53
|
+
assert File.ctime(real_job.path) > first_time
|
54
|
+
end
|
55
|
+
end
|
12
56
|
end
|
13
57
|
|
data/test/test_helper.rb
CHANGED
@@ -12,6 +12,8 @@ require 'rbbt'
|
|
12
12
|
require 'rbbt/resource/path'
|
13
13
|
|
14
14
|
|
15
|
+
class TestServerLoaded < Exception; end
|
16
|
+
|
15
17
|
class Test::Unit::TestCase
|
16
18
|
include FileUtils
|
17
19
|
|
@@ -44,4 +46,40 @@ class Test::Unit::TestCase
|
|
44
46
|
def datafile_test(file)
|
45
47
|
Test::Unit::TestCase.datafile_test(file)
|
46
48
|
end
|
49
|
+
|
50
|
+
def workflow_server(workflow, options = {}, &block)
|
51
|
+
trap(:USR1){ raise TestServerLoaded}
|
52
|
+
|
53
|
+
pid = Process.fork do
|
54
|
+
TmpFile.with_file do |app_dir|
|
55
|
+
Misc.in_dir(app_dir) do
|
56
|
+
require 'rack'
|
57
|
+
ENV["RBBT_WORKFLOW_EXPORT_ALL"] = 'true'
|
58
|
+
|
59
|
+
app_dir = Path.setup(app_dir.dup)
|
60
|
+
Open.write(app_dir.etc.target_workflow.find, workflow.to_s)
|
61
|
+
|
62
|
+
config_ru_file = File.exist?('./workflow_config.ru') ? './workflow_config.ru' : Rbbt.share['workflow_config.ru'].find
|
63
|
+
options[:config] = config_ru_file
|
64
|
+
app = Rack::Server.new(options)
|
65
|
+
app.start do
|
66
|
+
Process.kill :USR1, Process.ppid
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
begin
|
73
|
+
sleep 1 while true
|
74
|
+
rescue TestServerLoaded
|
75
|
+
end
|
76
|
+
|
77
|
+
client = WorkflowRemoteClient.new "http://localhost:#{options[:Port] || 9292}/#{workflow.to_s}", workflow.to_s
|
78
|
+
|
79
|
+
yield client
|
80
|
+
|
81
|
+
Process.kill :INT, pid
|
82
|
+
Process.wait pid
|
83
|
+
end
|
84
|
+
|
47
85
|
end
|