drbqs 0.0.15 → 0.0.16
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +3 -0
- data/README.md +137 -128
- data/VERSION +1 -1
- data/docs/FormatExecute.md +119 -0
- data/docs/GettingStarted.md +242 -0
- data/drbqs.gemspec +36 -13
- data/example/command/server_def.rb +4 -5
- data/example/execute/execute.rb +41 -0
- data/example/execute/server.rb +14 -0
- data/example/execute/task.rb +0 -0
- data/example/mandelbrot/README.md +15 -0
- data/example/mandelbrot/execute.rb +10 -0
- data/example/mandelbrot/mandelbrot.rb +56 -0
- data/example/mandelbrot/server.rb +49 -0
- data/example/server/server.rb +3 -6
- data/example/simple/README.md +18 -0
- data/example/simple/execute.rb +11 -0
- data/example/simple/server.rb +8 -0
- data/example/simple/task.rb +11 -0
- data/example/sum/server_def.rb +1 -1
- data/example/sum2/execute_def.rb +21 -8
- data/example/sum2/server_def.rb +8 -7
- data/example/transfer/file.rb +42 -8
- data/example/transfer/server_def.rb +43 -9
- data/lib/drbqs.rb +1 -1
- data/lib/drbqs/command_line/command_execute.rb +3 -3
- data/lib/drbqs/command_line/command_line.rb +1 -1
- data/lib/drbqs/execute/execute_node.rb +50 -0
- data/lib/drbqs/execute/process_define.rb +102 -54
- data/lib/drbqs/execute/register.rb +241 -87
- data/lib/drbqs/execute/server_define.rb +69 -58
- data/lib/drbqs/ext/task.rb +2 -0
- data/lib/drbqs/ext/task/command_task.rb +43 -0
- data/lib/drbqs/manage/manage.rb +5 -4
- data/lib/drbqs/manage/ssh_shell.rb +2 -8
- data/lib/drbqs/node/connection.rb +1 -1
- data/lib/drbqs/node/node.rb +8 -14
- data/lib/drbqs/node/task_client.rb +1 -1
- data/lib/drbqs/server/history.rb +5 -1
- data/lib/drbqs/server/message.rb +7 -34
- data/lib/drbqs/server/queue.rb +14 -2
- data/lib/drbqs/server/server.rb +86 -43
- data/lib/drbqs/server/server_hook.rb +3 -0
- data/lib/drbqs/server/test/node.rb +1 -1
- data/lib/drbqs/server/test/prof.rb +50 -0
- data/lib/drbqs/server/test/server.rb +2 -2
- data/lib/drbqs/server/transfer_setting.rb +23 -11
- data/lib/drbqs/setting/base.rb +15 -0
- data/lib/drbqs/setting/data_container.rb +1 -1
- data/lib/drbqs/setting/execute.rb +3 -3
- data/lib/drbqs/setting/node.rb +1 -1
- data/lib/drbqs/setting/server.rb +2 -2
- data/lib/drbqs/task/registrar.rb +39 -0
- data/lib/drbqs/task/task.rb +139 -59
- data/lib/drbqs/task/task_generator.rb +93 -116
- data/lib/drbqs/utility/misc.rb +15 -10
- data/lib/drbqs/utility/temporary.rb +7 -2
- data/lib/drbqs/utility/transfer/transfer.rb +81 -0
- data/lib/drbqs/utility/transfer/transfer_client.rb +68 -69
- data/lib/drbqs/utility/transfer/transfer_client_connect.rb +83 -0
- data/lib/drbqs/utility/transfer/transfer_file_list.rb +40 -0
- data/spec/execute/def/execute1.rb +4 -4
- data/spec/execute/def/execute2.rb +24 -0
- data/spec/execute/process_define_spec.rb +43 -6
- data/spec/execute/register_spec.rb +403 -9
- data/spec/execute/server_define_spec.rb +1 -1
- data/spec/ext/task/command_task_spec.rb +16 -0
- data/spec/integration_test/01_basic_usage_spec.rb +1 -1
- data/spec/integration_test/02_use_generator_spec.rb +2 -2
- data/spec/integration_test/04_use_unix_domain_spec.rb +1 -1
- data/spec/integration_test/05_server_exit_signal_spec.rb +1 -1
- data/spec/integration_test/06_node_exit_after_task_spec.rb +4 -4
- data/spec/integration_test/08_shutdown_unused_nodes_spec.rb +2 -2
- data/spec/integration_test/09_server_process_data_spec.rb +1 -1
- data/spec/integration_test/definition/server01.rb +4 -5
- data/spec/integration_test/definition/server02.rb +2 -4
- data/spec/node/node_spec.rb +34 -0
- data/spec/server/message_spec.rb +1 -1
- data/spec/server/queue_spec.rb +34 -7
- data/spec/server/server_spec.rb +21 -9
- data/spec/server/transfer_setting_spec.rb +59 -24
- data/spec/setting/base_spec.rb +11 -0
- data/spec/setting/data_container_spec.rb +8 -0
- data/spec/spec_helper.rb +1 -7
- data/spec/task/registrar_spec.rb +34 -0
- data/spec/task/task_generator_spec.rb +15 -15
- data/spec/task/task_spec.rb +132 -23
- data/spec/utility/misc_spec.rb +2 -2
- data/spec/utility/transfer/transfer_client_connect_spec.rb +90 -0
- data/spec/utility/transfer/transfer_file_list_spec.rb +27 -0
- data/spec/{task/file_transfer_spec.rb → utility/transfer/transfer_spec.rb} +24 -24
- metadata +66 -45
- data/lib/drbqs/manage/execute_node.rb +0 -50
- data/lib/drbqs/server/prof.rb +0 -48
- data/lib/drbqs/task/command_task.rb +0 -43
- data/lib/drbqs/utility/transfer/file_transfer.rb +0 -73
data/spec/spec_helper.rb
CHANGED
@@ -61,7 +61,7 @@ def drbqs_fork_server(uri_arg, opts = {}, &block)
|
|
61
61
|
task_args = [task_args]
|
62
62
|
end
|
63
63
|
task_args.each do |arg|
|
64
|
-
if DRbQS::
|
64
|
+
if DRbQS::Task::Generator === arg
|
65
65
|
server.add_task_generator(arg)
|
66
66
|
else
|
67
67
|
server.queue.add(arg)
|
@@ -69,12 +69,6 @@ def drbqs_fork_server(uri_arg, opts = {}, &block)
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
-
unless opts[:continue]
|
73
|
-
server.add_hook(:finish) do |serv|
|
74
|
-
serv.exit
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
72
|
server.set_signal_trap
|
79
73
|
server.start
|
80
74
|
server.wait
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
require 'drbqs/task/task'
|
4
|
+
|
5
|
+
describe DRbQS::Task::Registrar do
|
6
|
+
subject do
|
7
|
+
DRbQS::Task::Registrar.new({})
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should raise error for invalid argumuents." do
|
11
|
+
lambda do
|
12
|
+
subject.add("neither DRbQS::Task nor Array")
|
13
|
+
end.should raise_error ArgumentError
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should call Fiber.yield." do
|
17
|
+
task = DRbQS::Task.new([1, 2, 3], :size, note: "calculate size of an array")
|
18
|
+
Fiber.should_receive(:yield).with(task)
|
19
|
+
subject.add(task)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should call Fiber.yield for each task." do
|
23
|
+
task_ary = 5.times.map do |i|
|
24
|
+
DRbQS::Task.new(i, :to_s, note: "convert to string")
|
25
|
+
end
|
26
|
+
Fiber.should_receive(:yield).exactly(task_ary.size).times
|
27
|
+
subject.add(task_ary)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should call Fiber.yield with :wait." do
|
31
|
+
Fiber.should_receive(:yield).with(:wait)
|
32
|
+
subject.wait
|
33
|
+
end
|
34
|
+
end
|
@@ -2,24 +2,24 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
|
3
3
|
require 'drbqs/task/task'
|
4
4
|
|
5
|
-
describe DRbQS::
|
5
|
+
describe DRbQS::Task::Generator do
|
6
6
|
def check_task_ary(tasks, num, cl = DRbQS::Task)
|
7
7
|
tasks.should have(num).items
|
8
8
|
tasks.all? { |t| cl === t }.should be_true
|
9
9
|
end
|
10
10
|
|
11
|
-
subject { DRbQS::
|
11
|
+
subject { DRbQS::Task::Generator.new(:abc => 'ABC', :def => 123, :data => [1, 2, 3]) }
|
12
12
|
|
13
13
|
it "should initialize instance varibles" do
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
registrar = subject.instance_variable_get('@registrar')
|
15
|
+
registrar.instance_variable_get('@abc').should == 'ABC'
|
16
|
+
registrar.instance_variable_get('@def').should == 123
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should create new tasks" do
|
20
|
-
subject.set(:generate => 2) do
|
20
|
+
subject.set(:generate => 2) do |reg|
|
21
21
|
@data.each do |i|
|
22
|
-
|
22
|
+
reg.create_add(i, :to_s)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
subject.init
|
@@ -29,22 +29,22 @@ describe DRbQS::TaskGenerator do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should should create task sets" do
|
32
|
-
subject.set(:generate => 2, :collect => 10) do
|
32
|
+
subject.set(:generate => 2, :collect => 10) do |reg|
|
33
33
|
100.times do |i|
|
34
|
-
|
34
|
+
reg.create_add(i, :to_s)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
subject.init
|
38
38
|
5.times do |i|
|
39
|
-
check_task_ary(subject.new_tasks, 2, DRbQS::TaskSet)
|
39
|
+
check_task_ary(subject.new_tasks, 2, DRbQS::Task::TaskSet)
|
40
40
|
end
|
41
41
|
subject.new_tasks.should be_nil
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should debug generator" do
|
45
|
-
subject.set(:generate => 2) do
|
45
|
+
subject.set(:generate => 2) do |reg|
|
46
46
|
@data.each do |i|
|
47
|
-
|
47
|
+
reg.create_add(i, :to_s)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
subject.init
|
@@ -54,12 +54,12 @@ describe DRbQS::TaskGenerator do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it "should wait" do
|
57
|
-
subject.set(:generate => 2) do
|
57
|
+
subject.set(:generate => 2) do |reg|
|
58
58
|
@data.each do |i|
|
59
59
|
if i == 2
|
60
|
-
|
60
|
+
reg.wait
|
61
61
|
end
|
62
|
-
|
62
|
+
create_add(i, :to_s)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
subject.init
|
data/spec/task/task_spec.rb
CHANGED
@@ -2,46 +2,126 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
|
3
3
|
require 'drbqs/task/task'
|
4
4
|
|
5
|
+
class TestTask
|
6
|
+
def initialize(result)
|
7
|
+
@result = result
|
8
|
+
end
|
9
|
+
|
10
|
+
def calc
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_hook(srv, result)
|
14
|
+
@result.should == result
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
5
18
|
describe DRbQS::Task do
|
6
|
-
it "should not set hook" do
|
19
|
+
it "should not set hook." do
|
7
20
|
task = DRbQS::Task.new([1, 2, 3], :size)
|
8
21
|
task.hook.should be_nil
|
9
22
|
end
|
10
23
|
|
11
|
-
it "should set hook" do
|
24
|
+
it "should set hook of block." do
|
12
25
|
task = DRbQS::Task.new([1, 2, 3], :size) do |server, ret|
|
13
26
|
p ret
|
14
27
|
end
|
15
28
|
task.hook.should be_an_instance_of Proc
|
16
29
|
end
|
17
30
|
|
18
|
-
it "should
|
19
|
-
|
20
|
-
|
21
|
-
|
31
|
+
it "should set hook of symbol." do
|
32
|
+
task = DRbQS::Task.new([1, 2, 3], :size, hook: :to_s)
|
33
|
+
task.hook.should == :to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should return nil for nonexistent hook." do
|
37
|
+
task = DRbQS::Task.new([1, 2, 3], :size)
|
38
|
+
task.exec_hook(nil, nil).should be_nil
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should execute hook of block." do
|
42
|
+
mock = mock('for task')
|
43
|
+
task = DRbQS::Task.new(mock, :calc) do |server, result|
|
44
|
+
mock.hook_method(server, result)
|
45
|
+
end
|
46
|
+
mock.should_receive(:hook_method).with(:server, :result)
|
47
|
+
task.exec_hook(:server, :result)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should execute hook of symbol." do
|
51
|
+
mock = mock('for task')
|
52
|
+
task = DRbQS::Task.new(mock, :calc, hook: :hook_method)
|
53
|
+
mock.should_receive(:hook_method).with(:server, :result)
|
54
|
+
task.exec_hook(:server, :result)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should set note." do
|
58
|
+
note_string = "Return size"
|
59
|
+
task = DRbQS::Task.new([1, 2, 3], :size, note: note_string)
|
60
|
+
task.note.should == note_string
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should not have note." do
|
64
|
+
note_string = "Return size"
|
65
|
+
task = DRbQS::Task.new([1, 2, 3], :size)
|
66
|
+
task.note.should be_nil
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should have empty argument array." do
|
70
|
+
task = DRbQS::Task.new([1, 2, 3], :size)
|
71
|
+
task.args.should == []
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should set arguments." do
|
75
|
+
ary = [3, 4, 5]
|
76
|
+
task = DRbQS::Task.new([1, 2, 3], :concat, args: ary)
|
77
|
+
task.args.should == ary
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should marshalize." do
|
81
|
+
task = DRbQS::Task.new(TestTask.new(100), :calc, hook: :test_hook)
|
82
|
+
lambda do
|
83
|
+
Marshal.dump(task)
|
84
|
+
end.should_not raise_error
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should not marshalize." do
|
88
|
+
task = DRbQS::Task.new(TestTask.new(100), :calc) do |srv, res|
|
89
|
+
p res
|
90
|
+
end
|
91
|
+
lambda do
|
92
|
+
Marshal.dump(task)
|
93
|
+
end.should raise_error
|
22
94
|
end
|
23
95
|
end
|
24
96
|
|
25
|
-
describe DRbQS::
|
26
|
-
it "should
|
27
|
-
|
28
|
-
|
97
|
+
describe DRbQS::Task::TaskSet::ContainerTask do
|
98
|
+
it "should dump and load" do
|
99
|
+
obj = [[1], [1, 2], [1, 2, 3]]
|
100
|
+
tasks = obj.map do |ary|
|
101
|
+
DRbQS::Task.new(ary, :size)
|
102
|
+
end
|
103
|
+
container = DRbQS::Task::TaskSet::ContainerTask.new(tasks)
|
104
|
+
dump = Marshal.dump(container)
|
105
|
+
Marshal.load(dump).should == container
|
29
106
|
end
|
30
107
|
|
31
|
-
it "should
|
32
|
-
|
33
|
-
|
34
|
-
|
108
|
+
it "should execute each task" do
|
109
|
+
obj = [[1, 3, 4], [2], [1, 2, 3]]
|
110
|
+
tasks = obj.map do |ary|
|
111
|
+
DRbQS::Task.new(ary, :size)
|
112
|
+
end
|
113
|
+
container = DRbQS::Task::TaskSet::ContainerTask.new(tasks)
|
114
|
+
container.exec.should == [3, 1, 3]
|
35
115
|
end
|
36
116
|
end
|
37
117
|
|
38
|
-
describe DRbQS::
|
118
|
+
describe DRbQS::Task::TaskSet::ContainerWithoutHook do
|
39
119
|
it "should dump and load" do
|
40
120
|
obj = [[1], [1, 2], [1, 2, 3]]
|
41
121
|
tasks = obj.map do |ary|
|
42
122
|
DRbQS::Task.new(ary, :size)
|
43
123
|
end
|
44
|
-
container = DRbQS::
|
124
|
+
container = DRbQS::Task::TaskSet::ContainerWithoutHook.new(tasks)
|
45
125
|
dump = Marshal.dump(container)
|
46
126
|
Marshal.load(dump).should == container
|
47
127
|
end
|
@@ -51,15 +131,33 @@ describe DRbQS::TaskContainer do
|
|
51
131
|
tasks = obj.map do |ary|
|
52
132
|
DRbQS::Task.new(ary, :size)
|
53
133
|
end
|
54
|
-
container = DRbQS::
|
134
|
+
container = DRbQS::Task::TaskSet::ContainerWithoutHook.new(tasks)
|
55
135
|
container.exec.should == [3, 1, 3]
|
56
136
|
end
|
57
137
|
end
|
58
138
|
|
59
|
-
describe DRbQS::TaskSet do
|
60
|
-
it "should
|
61
|
-
|
62
|
-
|
139
|
+
describe DRbQS::Task::TaskSet do
|
140
|
+
it "should use DRbQS::Task::TaskSet::ContainerTask." do
|
141
|
+
tasks = [DRbQS::Task.new([1, 2], :to_s), DRbQS::Task.new([1, 2], :size, hook: :to_s)]
|
142
|
+
task_set = DRbQS::Task::TaskSet.new(tasks)
|
143
|
+
task_set.obj.should be_an_instance_of DRbQS::Task::TaskSet::ContainerTask
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should use DRbQS::Task::TaskSet::ContainerWithoutHook." do
|
147
|
+
tasks = []
|
148
|
+
tasks << DRbQS::Task.new([1, 2], :to_s) do |srv, result|
|
149
|
+
p result
|
150
|
+
end
|
151
|
+
tasks << DRbQS::Task.new([1, 2], :size) do |srv, result|
|
152
|
+
p result
|
153
|
+
end
|
154
|
+
task_set = DRbQS::Task::TaskSet.new(tasks)
|
155
|
+
task_set.obj.should be_an_instance_of DRbQS::Task::TaskSet::ContainerWithoutHook
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should execute hooks of blocks." do
|
159
|
+
server = mock('server')
|
160
|
+
methods_for_hook = mock('hook')
|
63
161
|
methods_for_hook.should_receive(:m0).exactly(1)
|
64
162
|
methods_for_hook.should_receive(:m1).exactly(1)
|
65
163
|
methods_for_hook.should_receive(:m2).exactly(1)
|
@@ -68,7 +166,18 @@ describe DRbQS::TaskSet do
|
|
68
166
|
tasks << DRbQS::Task.new(obj[0], :size, &methods_for_hook.method(:m0))
|
69
167
|
tasks << DRbQS::Task.new(obj[1], :size, &methods_for_hook.method(:m1))
|
70
168
|
tasks << DRbQS::Task.new(obj[2], :size, &methods_for_hook.method(:m2))
|
71
|
-
task_set = DRbQS::TaskSet.new(tasks)
|
72
|
-
task_set.
|
169
|
+
task_set = DRbQS::Task::TaskSet.new(tasks)
|
170
|
+
task_set.exec_hook(server, [1, 2, 3])
|
171
|
+
end
|
172
|
+
|
173
|
+
it "should execute hooks of symbols." do
|
174
|
+
server = mock('server')
|
175
|
+
obj = [TestTask.new(100), TestTask.new(200), TestTask.new(300)]
|
176
|
+
tasks = []
|
177
|
+
tasks << DRbQS::Task.new(obj[0], :some_method, hook: :test_hook)
|
178
|
+
tasks << DRbQS::Task.new(obj[1], :some_method, hook: :test_hook)
|
179
|
+
tasks << DRbQS::Task.new(obj[2], :some_method, hook: :test_hook)
|
180
|
+
task_set = DRbQS::Task::TaskSet.new(tasks)
|
181
|
+
task_set.exec_hook(server, [100, 200, 300])
|
73
182
|
end
|
74
183
|
end
|
data/spec/utility/misc_spec.rb
CHANGED
@@ -2,9 +2,9 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
|
3
3
|
require 'drbqs/utility/temporary'
|
4
4
|
|
5
|
-
describe DRbQS::LoggerDummy do
|
5
|
+
describe DRbQS::Misc::LoggerDummy do
|
6
6
|
subject do
|
7
|
-
DRbQS::LoggerDummy.new
|
7
|
+
DRbQS::Misc::LoggerDummy.new
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should respond to info." do
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
require 'drbqs/utility/temporary'
|
4
|
+
require 'drbqs/utility/transfer/transfer'
|
5
|
+
require 'drbqs/utility/transfer/transfer_client'
|
6
|
+
|
7
|
+
def create_sample_transfer_files(n = nil)
|
8
|
+
tmp_dir = DRbQS::Temporary.directory
|
9
|
+
files = []
|
10
|
+
(n || 3).times do |i|
|
11
|
+
path = File.join(tmp_dir, "test%d.txt" % i)
|
12
|
+
files << path
|
13
|
+
open(path, 'w') do |f|
|
14
|
+
f.puts (i * i).to_s
|
15
|
+
end
|
16
|
+
end
|
17
|
+
[tmp_dir, files]
|
18
|
+
end
|
19
|
+
|
20
|
+
describe DRbQS::Transfer::Client::Local do
|
21
|
+
before(:all) do
|
22
|
+
@dir = DRbQS::Temporary.directory
|
23
|
+
@client = DRbQS::Transfer::Client::Local.new(@dir)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should move files." do
|
27
|
+
tmp_dir, files = create_sample_transfer_files
|
28
|
+
@client.transfer(files)
|
29
|
+
files.all? do |path|
|
30
|
+
!File.exist?(path)
|
31
|
+
end.should be_true
|
32
|
+
files.all? do |path|
|
33
|
+
File.exist?(File.join(@dir, File.basename(path)))
|
34
|
+
end.should be_true
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should copy files." do
|
38
|
+
tmp_dir, files = create_sample_transfer_files
|
39
|
+
@client.download(files)
|
40
|
+
files.all? do |path|
|
41
|
+
File.exist?(path)
|
42
|
+
end.should be_true
|
43
|
+
files.all? do |path|
|
44
|
+
File.exist?(File.join(@dir, File.basename(path)))
|
45
|
+
end.should be_true
|
46
|
+
end
|
47
|
+
|
48
|
+
after(:all) do
|
49
|
+
DRbQS::Temporary.delete_all
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe DRbQS::Transfer::Client::SFTP do
|
54
|
+
module Net::SFTP
|
55
|
+
def self.set_mock(m)
|
56
|
+
@mock = m
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.start(user, host, &block)
|
60
|
+
yield(@mock)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
before(:all) do
|
65
|
+
@dir = DRbQS::Temporary.directory
|
66
|
+
@client = DRbQS::Transfer::Client::SFTP.new('user_name', 'example.com', @dir)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should transfer files." do
|
70
|
+
tmp_dir, files = create_sample_transfer_files(1)
|
71
|
+
source_path = files[0]
|
72
|
+
sftp = mock('sftp')
|
73
|
+
sftp.should_receive(:upload).with(source_path, File.join(@dir, File.basename(source_path)))
|
74
|
+
FileUtils.should_receive(:rm_r).with(source_path)
|
75
|
+
Net::SFTP.set_mock(sftp)
|
76
|
+
@client.transfer(files)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should download files. (incomplete)" do
|
80
|
+
tmp_dir, files = create_sample_transfer_files(1)
|
81
|
+
sftp = mock('sftp')
|
82
|
+
sftp.should_receive(:download)
|
83
|
+
Net::SFTP.set_mock(sftp)
|
84
|
+
@client.download(files)
|
85
|
+
end
|
86
|
+
|
87
|
+
after(:all) do
|
88
|
+
DRbQS::Temporary.delete_all
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
require 'drbqs/utility/transfer/transfer'
|
4
|
+
require 'drbqs/utility/transfer/transfer_client'
|
5
|
+
require 'drbqs/utility/transfer/transfer_file_list'
|
6
|
+
|
7
|
+
describe DRbQS::Transfer::FileList do
|
8
|
+
before(:all) do
|
9
|
+
@files = Dir.glob("#{File.dirname(__FILE__)}/*.rb")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should download files." do
|
13
|
+
client = mock('transfer client')
|
14
|
+
DRbQS::Transfer::Client.stub(:get).and_return(client)
|
15
|
+
client.should_receive(:download).with(@files, nil)
|
16
|
+
file_list = DRbQS::Transfer::FileList.new(*@files)
|
17
|
+
file_list.path
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should download files with readonly." do
|
21
|
+
client = mock('transfer client')
|
22
|
+
DRbQS::Transfer::Client.stub(:get).and_return(client)
|
23
|
+
client.should_receive(:download).with(@files, true)
|
24
|
+
file_list = DRbQS::Transfer::FileList.new(*@files, :readonly => true)
|
25
|
+
file_list.path
|
26
|
+
end
|
27
|
+
end
|