drbqs 0.0.14 → 0.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/bin/drbqs-execute +6 -0
- data/bin/drbqs-manage +2 -2
- data/bin/drbqs-node +2 -2
- data/bin/drbqs-server +2 -2
- data/bin/drbqs-ssh +2 -2
- data/drbqs.gemspec +53 -16
- data/example/error_server/error.rb +6 -0
- data/example/error_server/server_def.rb +7 -0
- data/example/{error → error_task}/error.rb +0 -0
- data/example/{error → error_task}/server_def.rb +0 -0
- data/example/sum2/execute_def.rb +27 -0
- data/lib/drbqs/command_line/argument.rb +29 -0
- data/lib/drbqs/command_line/command_base.rb +81 -0
- data/lib/drbqs/command_line/command_execute.rb +33 -0
- data/lib/drbqs/command_line/command_line.rb +19 -0
- data/lib/drbqs/command_line/command_manage.rb +34 -0
- data/lib/drbqs/command_line/command_node.rb +26 -0
- data/lib/drbqs/command_line/command_server.rb +41 -0
- data/lib/drbqs/command_line/command_ssh.rb +51 -0
- data/lib/drbqs/command_line/option_setting.rb +42 -0
- data/lib/drbqs/execute/process_define.rb +213 -0
- data/lib/drbqs/execute/register.rb +147 -0
- data/lib/drbqs/{utility → execute}/server_define.rb +7 -14
- data/lib/drbqs/manage/execute_node.rb +4 -2
- data/lib/drbqs/manage/manage.rb +23 -16
- data/lib/drbqs/manage/send_signal.rb +31 -4
- data/lib/drbqs/manage/ssh_execute.rb +50 -6
- data/lib/drbqs/manage/ssh_shell.rb +95 -50
- data/lib/drbqs/node/connection.rb +1 -1
- data/lib/drbqs/node/node.rb +67 -17
- data/lib/drbqs/node/state.rb +109 -0
- data/lib/drbqs/node/task_client.rb +7 -7
- data/lib/drbqs/server/history.rb +16 -0
- data/lib/drbqs/server/message.rb +80 -15
- data/lib/drbqs/server/node_list.rb +16 -3
- data/lib/drbqs/server/prof.rb +48 -0
- data/lib/drbqs/server/queue.rb +20 -2
- data/lib/drbqs/server/server.rb +112 -70
- data/lib/drbqs/server/server_hook.rb +26 -6
- data/lib/drbqs/server/test/node.rb +34 -0
- data/lib/drbqs/server/test/server.rb +74 -0
- data/lib/drbqs/setting/base.rb +120 -0
- data/lib/drbqs/setting/data_container.rb +39 -0
- data/lib/drbqs/setting/execute.rb +71 -0
- data/lib/drbqs/setting/manage.rb +163 -0
- data/lib/drbqs/setting/node.rb +84 -0
- data/lib/drbqs/setting/server.rb +230 -0
- data/lib/drbqs/setting/setting.rb +14 -0
- data/lib/drbqs/setting/source.rb +220 -0
- data/lib/drbqs/setting/ssh.rb +165 -0
- data/lib/drbqs/task/task_generator.rb +4 -2
- data/lib/drbqs/utility/misc.rb +15 -1
- data/lib/drbqs/utility/temporary.rb +4 -2
- data/lib/drbqs.rb +3 -2
- data/spec/command_line/command_base_spec.rb +47 -0
- data/spec/{utility/command_line → command_line}/commands_spec.rb +3 -3
- data/spec/command_line/option_setting_spec.rb +29 -0
- data/spec/execute/def/execute1.rb +24 -0
- data/spec/execute/def/no_def.rb +2 -0
- data/spec/execute/process_define_spec.rb +167 -0
- data/spec/execute/register_spec.rb +77 -0
- data/spec/{utility → execute}/server_define_spec.rb +0 -0
- data/spec/integration_test/01_basic_usage_spec.rb +1 -1
- data/spec/integration_test/02_use_generator_spec.rb +1 -1
- data/spec/integration_test/03_use_temporary_file_spec.rb +1 -1
- 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 +1 -1
- data/spec/integration_test/07_command_server_with_node_spec.rb +19 -16
- data/spec/integration_test/08_shutdown_unused_nodes_spec.rb +38 -0
- data/spec/integration_test/09_server_process_data_spec.rb +74 -0
- data/spec/integration_test/10_test_server_spec.rb +18 -0
- data/spec/integration_test/definition/task_obj_definition.rb +14 -0
- data/spec/manage/send_signal_spec.rb +8 -0
- data/spec/manage/ssh_shell_spec.rb +1 -1
- data/spec/node/state_spec.rb +148 -0
- data/spec/node/task_client_spec.rb +15 -0
- data/spec/server/history_spec.rb +51 -20
- data/spec/server/message_spec.rb +7 -2
- data/spec/server/node_list_spec.rb +1 -1
- data/spec/server/queue_spec.rb +93 -4
- data/spec/server/server_hook_spec.rb +62 -0
- data/spec/setting/base_spec.rb +35 -0
- data/spec/setting/data_container_spec.rb +92 -0
- data/spec/setting/execute_spec.rb +51 -0
- data/spec/setting/manage_spec.rb +63 -0
- data/spec/setting/node_spec.rb +43 -0
- data/spec/setting/server_spec.rb +46 -0
- data/spec/setting/source_spec.rb +245 -0
- data/spec/spec_helper.rb +17 -10
- data/spec/utility/argument_spec.rb +7 -7
- metadata +179 -146
- data/lib/drbqs/utility/argument.rb +0 -27
- data/lib/drbqs/utility/command_line/command_base.rb +0 -27
- data/lib/drbqs/utility/command_line/command_manage.rb +0 -121
- data/lib/drbqs/utility/command_line/command_node.rb +0 -103
- data/lib/drbqs/utility/command_line/command_server.rb +0 -165
- data/lib/drbqs/utility/command_line/command_ssh.rb +0 -126
- data/lib/drbqs/utility/command_line.rb +0 -15
- data/spec/utility/command_line/command_base_spec.rb +0 -33
|
@@ -61,6 +61,21 @@ describe DRbQS::Node::TaskClient do
|
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
+
context "when getting new task" do
|
|
65
|
+
before(:all) do
|
|
66
|
+
init_task_client(7)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "should return nil" do
|
|
70
|
+
subject.add_new_task.should be_nil
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "should return nil" do
|
|
74
|
+
add_task_to_tuplespace(100, [[1, 3, 5, 7], :size, []])
|
|
75
|
+
subject.add_new_task.should be_true
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
64
79
|
context "when adding new task" do
|
|
65
80
|
before(:all) do
|
|
66
81
|
init_task_client(7)
|
data/spec/server/history_spec.rb
CHANGED
|
@@ -11,59 +11,56 @@ describe DRbQS::Server::History do
|
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
subject do
|
|
15
|
+
DRbQS::Server::History.new
|
|
16
|
+
end
|
|
17
|
+
|
|
14
18
|
context "when setting events" do
|
|
15
19
|
before(:all) do
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
@history.set(2, 123, 456)
|
|
20
|
+
subject.set(1, :abc)
|
|
21
|
+
subject.set(1, :def)
|
|
22
|
+
subject.set(2, 'ABC', 'DEF')
|
|
23
|
+
subject.set(3, :ghi)
|
|
24
|
+
subject.set(1, :jkl)
|
|
25
|
+
subject.set(2, 123, 456)
|
|
23
26
|
end
|
|
24
27
|
|
|
25
28
|
it "should have 3 items." do
|
|
26
|
-
|
|
29
|
+
subject.should have(3).items
|
|
27
30
|
end
|
|
28
31
|
|
|
29
32
|
it "should 3 events of ID 1." do
|
|
30
|
-
|
|
33
|
+
subject.number_of_events(1).should == 3
|
|
31
34
|
end
|
|
32
35
|
|
|
33
36
|
it "should 2 events of ID 2" do
|
|
34
|
-
|
|
37
|
+
subject.number_of_events(2).should == 2
|
|
35
38
|
end
|
|
36
39
|
|
|
37
40
|
it "should 1 event of ID 3" do
|
|
38
|
-
|
|
41
|
+
subject.number_of_events(3).should == 1
|
|
39
42
|
end
|
|
40
43
|
|
|
41
44
|
it "should check events of ID 1" do
|
|
42
|
-
events =
|
|
45
|
+
events = subject.events(1)
|
|
43
46
|
check_event(events[0], :abc)
|
|
44
47
|
check_event(events[1], :def)
|
|
45
48
|
check_event(events[2], :jkl)
|
|
46
49
|
end
|
|
47
50
|
|
|
48
51
|
it "should check events of ID 2" do
|
|
49
|
-
events =
|
|
52
|
+
events = subject.events(2)
|
|
50
53
|
check_event(events[0], 'ABC', 'DEF')
|
|
51
54
|
check_event(events[1], 123, 456)
|
|
52
55
|
end
|
|
53
56
|
|
|
54
57
|
it "should check events of ID 1" do
|
|
55
|
-
events =
|
|
58
|
+
events = subject.events(3)
|
|
56
59
|
check_event(events[0], :ghi)
|
|
57
60
|
end
|
|
58
|
-
|
|
59
|
-
it "should return strings of log" do
|
|
60
|
-
@history.log_strings.should be_an_instance_of String
|
|
61
|
-
end
|
|
62
61
|
end
|
|
63
62
|
|
|
64
63
|
context "when executing a method" do
|
|
65
|
-
subject { DRbQS::Server::History.new }
|
|
66
|
-
|
|
67
64
|
it "should add new event" do
|
|
68
65
|
id = 1
|
|
69
66
|
subject.set(id, :connect)
|
|
@@ -88,3 +85,37 @@ describe DRbQS::Server::History do
|
|
|
88
85
|
end
|
|
89
86
|
end
|
|
90
87
|
end
|
|
88
|
+
|
|
89
|
+
describe DRbQS::Server::TaskHistory do
|
|
90
|
+
subject do
|
|
91
|
+
DRbQS::Server::TaskHistory.new
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "should return strings of log" do
|
|
95
|
+
subject.set(1, :def)
|
|
96
|
+
subject.set(2, 'ABC', 'DEF')
|
|
97
|
+
subject.set(3, :ghi)
|
|
98
|
+
subject.set(1, :jkl)
|
|
99
|
+
subject.log_strings.should be_an_instance_of String
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should return zero for finished_task_number." do
|
|
103
|
+
subject.finished_task_number.should == 0
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "should count finished task when setting :result." do
|
|
107
|
+
5.times do |i|
|
|
108
|
+
lambda do
|
|
109
|
+
subject.set(i, :result)
|
|
110
|
+
end.should change(subject, :finished_task_number).by(1)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should not change finished task number for :add." do
|
|
115
|
+
[:add, :requeue, :hook, :calculate].each do |sym|
|
|
116
|
+
lambda do
|
|
117
|
+
subject.set(1, sym)
|
|
118
|
+
end.should_not change(subject, :finished_task_number)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
data/spec/server/message_spec.rb
CHANGED
|
@@ -21,7 +21,7 @@ describe DRbQS::Server::Message do
|
|
|
21
21
|
|
|
22
22
|
def clear_all_node
|
|
23
23
|
@message_server.get_all_nodes.each do |id_num, id_str|
|
|
24
|
-
@node_list.delete(id_num)
|
|
24
|
+
@node_list.delete(id_num, :disconnect)
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -65,10 +65,15 @@ describe DRbQS::Server::Message do
|
|
|
65
65
|
it "should get :node_error message" do
|
|
66
66
|
node_id = 74
|
|
67
67
|
@message.write([:server, :node_error, [node_id, 'Error occurs.']])
|
|
68
|
-
@node_list.should_receive(:delete).with(node_id)
|
|
68
|
+
@node_list.should_receive(:delete).with(node_id, :error)
|
|
69
69
|
@message_server.get_message.should == [:node_error, node_id]
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
+
it "should get :new_data message" do
|
|
73
|
+
@message.write([:server, :new_data, 'data string'])
|
|
74
|
+
@message_server.get_message.should == [:new_data, 'data string']
|
|
75
|
+
end
|
|
76
|
+
|
|
72
77
|
it "should return nil for invalid message" do
|
|
73
78
|
@message.write([:server, :invalid_message])
|
|
74
79
|
@message_server.get_message.should be_nil
|
data/spec/server/queue_spec.rb
CHANGED
|
@@ -38,6 +38,10 @@ describe DRbQS::Server::Queue do
|
|
|
38
38
|
subject.calculating_task_number.should == 0
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
+
it "should get number of stocked tasks." do
|
|
42
|
+
subject.stocked_task_number.should == 0
|
|
43
|
+
end
|
|
44
|
+
|
|
41
45
|
it "should be empty." do
|
|
42
46
|
subject.should be_empty
|
|
43
47
|
end
|
|
@@ -45,6 +49,10 @@ describe DRbQS::Server::Queue do
|
|
|
45
49
|
it "should be finished." do
|
|
46
50
|
subject.should be_finished
|
|
47
51
|
end
|
|
52
|
+
|
|
53
|
+
it "should return an array of calculating nodes." do
|
|
54
|
+
subject.calculating_nodes.should == []
|
|
55
|
+
end
|
|
48
56
|
end
|
|
49
57
|
|
|
50
58
|
context "when adding a task" do
|
|
@@ -65,6 +73,10 @@ describe DRbQS::Server::Queue do
|
|
|
65
73
|
subject.calculating_task_number.should == 0
|
|
66
74
|
end
|
|
67
75
|
|
|
76
|
+
it "should get number of stocked tasks." do
|
|
77
|
+
subject.stocked_task_number.should == 1
|
|
78
|
+
end
|
|
79
|
+
|
|
68
80
|
it "should not be empty." do
|
|
69
81
|
subject.empty?.should be_false
|
|
70
82
|
end
|
|
@@ -76,6 +88,10 @@ describe DRbQS::Server::Queue do
|
|
|
76
88
|
it "should take objects from queue." do
|
|
77
89
|
@ts[:queue].take([nil, nil, nil, nil]).should be_true
|
|
78
90
|
end
|
|
91
|
+
|
|
92
|
+
it "should return an array of calculating nodes." do
|
|
93
|
+
subject.calculating_nodes.should == []
|
|
94
|
+
end
|
|
79
95
|
end
|
|
80
96
|
|
|
81
97
|
context "when getting accept signal" do
|
|
@@ -83,7 +99,7 @@ describe DRbQS::Server::Queue do
|
|
|
83
99
|
object_init
|
|
84
100
|
@node_id = 100
|
|
85
101
|
@task_id = subject.add(@task[:obj])
|
|
86
|
-
@ts[:result].write([:accept, @task_id,
|
|
102
|
+
@ts[:result].write([:accept, @task_id, @node_id])
|
|
87
103
|
end
|
|
88
104
|
|
|
89
105
|
it "should return number of acceptances of signals." do
|
|
@@ -98,6 +114,10 @@ describe DRbQS::Server::Queue do
|
|
|
98
114
|
subject.calculating_task_number.should == 1
|
|
99
115
|
end
|
|
100
116
|
|
|
117
|
+
it "should get number of stocked tasks." do
|
|
118
|
+
subject.stocked_task_number.should == 0
|
|
119
|
+
end
|
|
120
|
+
|
|
101
121
|
it "should be empty." do
|
|
102
122
|
subject.should be_empty
|
|
103
123
|
end
|
|
@@ -109,6 +129,10 @@ describe DRbQS::Server::Queue do
|
|
|
109
129
|
it "should take objects from queue." do
|
|
110
130
|
@ts[:result].read_all([nil, nil, nil]).size.should == 0
|
|
111
131
|
end
|
|
132
|
+
|
|
133
|
+
it "should return an array of calculating nodes." do
|
|
134
|
+
subject.calculating_nodes.should == [@node_id]
|
|
135
|
+
end
|
|
112
136
|
end
|
|
113
137
|
|
|
114
138
|
context "when getting result" do
|
|
@@ -116,7 +140,7 @@ describe DRbQS::Server::Queue do
|
|
|
116
140
|
object_init
|
|
117
141
|
@node_id = 100
|
|
118
142
|
@task_id = subject.add(@task[:obj])
|
|
119
|
-
@ts[:result].write([:accept, @task_id,
|
|
143
|
+
@ts[:result].write([:accept, @task_id, @node_id])
|
|
120
144
|
subject.get_accept_signal
|
|
121
145
|
@ts[:result].write([:result, @task_id, @node_id, :result_object])
|
|
122
146
|
end
|
|
@@ -133,6 +157,10 @@ describe DRbQS::Server::Queue do
|
|
|
133
157
|
subject.calculating_task_number.should == 0
|
|
134
158
|
end
|
|
135
159
|
|
|
160
|
+
it "should get number of stocked tasks." do
|
|
161
|
+
subject.stocked_task_number.should == 0
|
|
162
|
+
end
|
|
163
|
+
|
|
136
164
|
it "should be empty." do
|
|
137
165
|
subject.should be_empty
|
|
138
166
|
end
|
|
@@ -140,6 +168,10 @@ describe DRbQS::Server::Queue do
|
|
|
140
168
|
it "should not be finished." do
|
|
141
169
|
subject.should be_finished
|
|
142
170
|
end
|
|
171
|
+
|
|
172
|
+
it "should return an array of calculating nodes." do
|
|
173
|
+
subject.calculating_nodes.should == []
|
|
174
|
+
end
|
|
143
175
|
end
|
|
144
176
|
|
|
145
177
|
context "when requeueing a task" do
|
|
@@ -147,7 +179,7 @@ describe DRbQS::Server::Queue do
|
|
|
147
179
|
object_init
|
|
148
180
|
@node_id = 100
|
|
149
181
|
@task_id = subject.add(@task[:obj])
|
|
150
|
-
@ts[:result].write([:accept, @task_id,
|
|
182
|
+
@ts[:result].write([:accept, @task_id, @node_id])
|
|
151
183
|
subject.get_accept_signal
|
|
152
184
|
subject.requeue_for_deleted_node_id([@node_id])
|
|
153
185
|
end
|
|
@@ -164,6 +196,10 @@ describe DRbQS::Server::Queue do
|
|
|
164
196
|
subject.calculating_task_number.should == 0
|
|
165
197
|
end
|
|
166
198
|
|
|
199
|
+
it "should get number of stocked tasks." do
|
|
200
|
+
subject.stocked_task_number.should == 1
|
|
201
|
+
end
|
|
202
|
+
|
|
167
203
|
it "should be empty." do
|
|
168
204
|
subject.should_not be_empty
|
|
169
205
|
end
|
|
@@ -176,6 +212,54 @@ describe DRbQS::Server::Queue do
|
|
|
176
212
|
(ary = @ts[:queue].take([nil, nil, nil, nil])).should be_true
|
|
177
213
|
ary[0].should == @task_id
|
|
178
214
|
end
|
|
215
|
+
|
|
216
|
+
it "should return an array of calculating nodes." do
|
|
217
|
+
subject.calculating_nodes.should == []
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
context "when some nodes are calculating" do
|
|
222
|
+
before(:all) do
|
|
223
|
+
object_init
|
|
224
|
+
@node_ids = [200, 300]
|
|
225
|
+
@tasks = [DRbQS::Task.new([1, 2, 3], :size, []),
|
|
226
|
+
DRbQS::Task.new([-1, -2], :size, []),
|
|
227
|
+
DRbQS::Task.new([8, 9, 10, 11], :size, [])]
|
|
228
|
+
@task_ids = @tasks.map do |t|
|
|
229
|
+
subject.add(t)
|
|
230
|
+
end
|
|
231
|
+
@ts[:result].write([:accept, @task_ids[0], @node_ids[0]])
|
|
232
|
+
@ts[:result].write([:accept, @task_ids[1], @node_ids[1]])
|
|
233
|
+
subject.get_accept_signal
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
it "should return number of acceptances of signals." do
|
|
237
|
+
subject.get_accept_signal.should == 0
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
it "should return number of acceptances of resultss." do
|
|
241
|
+
subject.get_result(@server_dummy).should == 0
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
it "should return number of calculating task." do
|
|
245
|
+
subject.calculating_task_number.should == 2
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
it "should get number of stocked tasks." do
|
|
249
|
+
subject.stocked_task_number.should == 1
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
it "should be empty." do
|
|
253
|
+
subject.should_not be_empty
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
it "should not be finished." do
|
|
257
|
+
subject.should_not be_finished
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
it "should return an array of calculating nodes." do
|
|
261
|
+
subject.calculating_nodes.should == @node_ids.sort
|
|
262
|
+
end
|
|
179
263
|
end
|
|
180
264
|
|
|
181
265
|
context "when executing hook of task" do
|
|
@@ -189,9 +273,10 @@ describe DRbQS::Server::Queue do
|
|
|
189
273
|
end
|
|
190
274
|
|
|
191
275
|
it "should execute hook of task" do
|
|
276
|
+
@node_id = 100
|
|
192
277
|
task_id = subject.add(@task[:obj])
|
|
193
278
|
@task_id = subject.add(@task[:obj])
|
|
194
|
-
@ts[:result].write([:accept, @task_id,
|
|
279
|
+
@ts[:result].write([:accept, @task_id, @node_id])
|
|
195
280
|
subject.get_accept_signal
|
|
196
281
|
@ts[:result].write([:result, @task_id, @node_id, :result_object])
|
|
197
282
|
subject.get_result(@server_dummy)
|
|
@@ -227,6 +312,10 @@ describe DRbQS::Server::Queue do
|
|
|
227
312
|
subject.calculating_task_number.should == 1
|
|
228
313
|
end
|
|
229
314
|
|
|
315
|
+
it "should get number of stocked tasks." do
|
|
316
|
+
subject.stocked_task_number.should == 1
|
|
317
|
+
end
|
|
318
|
+
|
|
230
319
|
it "should be empty." do
|
|
231
320
|
subject.should_not be_empty
|
|
232
321
|
end
|
|
@@ -5,6 +5,10 @@ require 'drbqs/server/server_hook'
|
|
|
5
5
|
describe DRbQS::Server::Hook do
|
|
6
6
|
subject { DRbQS::Server::Hook.new }
|
|
7
7
|
|
|
8
|
+
it "should return 0 for nonexistent key." do
|
|
9
|
+
subject.number_of_hook(:nonexistent_key).should == 0
|
|
10
|
+
end
|
|
11
|
+
|
|
8
12
|
it "should add a hook with automatic creation of name." do
|
|
9
13
|
n = subject.number_of_hook(:finish)
|
|
10
14
|
name = subject.add(:finish) do |server|
|
|
@@ -75,4 +79,62 @@ describe DRbQS::Server::Hook do
|
|
|
75
79
|
subject.exec(:finish)
|
|
76
80
|
execute.should be_true
|
|
77
81
|
end
|
|
82
|
+
|
|
83
|
+
context "when checking block before executing hook" do
|
|
84
|
+
it "should execute hooks." do
|
|
85
|
+
exec_flag = {}
|
|
86
|
+
subject.add(:finish) do |server|
|
|
87
|
+
exec_flag[:first] = true
|
|
88
|
+
end
|
|
89
|
+
subject.add(:finish) do |server|
|
|
90
|
+
exec_flag[:second] = true
|
|
91
|
+
end
|
|
92
|
+
subject.exec(:finish) do |name|
|
|
93
|
+
name.should be_an_instance_of String
|
|
94
|
+
true
|
|
95
|
+
end
|
|
96
|
+
exec_flag[:first].should be_true
|
|
97
|
+
exec_flag[:second].should be_true
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "should execute finish_exit that is special proc." do
|
|
101
|
+
execute = nil
|
|
102
|
+
subject.set_finish_exit do
|
|
103
|
+
execute = true
|
|
104
|
+
end
|
|
105
|
+
subject.exec(:finish) do |name|
|
|
106
|
+
name.should be_an_instance_of String
|
|
107
|
+
true
|
|
108
|
+
end
|
|
109
|
+
execute.should be_true
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "should not execute hooks." do
|
|
113
|
+
exec_flag = {}
|
|
114
|
+
subject.add(:finish) do |server|
|
|
115
|
+
exec_flag[:first] = true
|
|
116
|
+
end
|
|
117
|
+
subject.add(:finish) do |server|
|
|
118
|
+
exec_flag[:second] = true
|
|
119
|
+
end
|
|
120
|
+
subject.exec(:finish) do |name|
|
|
121
|
+
name.should be_an_instance_of String
|
|
122
|
+
false
|
|
123
|
+
end
|
|
124
|
+
exec_flag[:first].should be_nil
|
|
125
|
+
exec_flag[:second].should be_nil
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "should not execute finish_exit that is special proc." do
|
|
129
|
+
execute = nil
|
|
130
|
+
subject.set_finish_exit do
|
|
131
|
+
execute = true
|
|
132
|
+
end
|
|
133
|
+
subject.exec(:finish) do |name|
|
|
134
|
+
name.should be_an_instance_of String
|
|
135
|
+
false
|
|
136
|
+
end
|
|
137
|
+
execute.should be_nil
|
|
138
|
+
end
|
|
139
|
+
end
|
|
78
140
|
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe DRbQS::Setting::Base do
|
|
4
|
+
it "should get default registered options." do
|
|
5
|
+
obj = DRbQS::Setting::Base.new
|
|
6
|
+
obj.source.registered_keys.sort.should == [:debug].sort
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should register built-in options." do
|
|
10
|
+
obj = DRbQS::Setting::Base.new(:all_keys_defined => true, :log_level => true, :daemon => true)
|
|
11
|
+
obj.source.registered_keys.sort.should == [:debug, :log_level, :daemon].sort
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should return string for shell." do
|
|
15
|
+
obj = DRbQS::Setting::Base.new(:all_keys_defined => true, :log_level => true, :daemon => true)
|
|
16
|
+
obj.value.log_level 'debug'
|
|
17
|
+
obj.value.daemon '/path/to/log'
|
|
18
|
+
obj.parse!
|
|
19
|
+
str = obj.string_for_shell
|
|
20
|
+
str.should match(/--log-level/)
|
|
21
|
+
str.should match(/--daemon/)
|
|
22
|
+
str.should match(/debug/)
|
|
23
|
+
str.should match(/\/path\/to\/log/)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should not change when executing parse! twice." do
|
|
27
|
+
obj = DRbQS::Setting::Base.new(:all_keys_defined => true, :log_level => true, :daemon => true)
|
|
28
|
+
obj.value.log_level 'debug'
|
|
29
|
+
obj.value.daemon '/path/to/log'
|
|
30
|
+
obj.parse!
|
|
31
|
+
lambda do
|
|
32
|
+
obj.parse!
|
|
33
|
+
end.should_not change(obj, :string_for_shell)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
+
|
|
3
|
+
require 'drbqs/setting/setting'
|
|
4
|
+
|
|
5
|
+
describe DRbQS::Setting::Source::DataContainer do
|
|
6
|
+
subject do
|
|
7
|
+
DRbQS::Setting::Source::DataContainer.new(Array)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
context "when setting values" do
|
|
11
|
+
it "should set a value." do
|
|
12
|
+
subject.one_argument 3
|
|
13
|
+
subject.__data__[:one_argument].should == [3]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should set values." do
|
|
17
|
+
subject.some_arguments 'hello', 123, 'world'
|
|
18
|
+
subject.__data__[:some_arguments].should == ['hello', 123, 'world']
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "should set a value by a method with '='." do
|
|
22
|
+
subject.one_argument = 3
|
|
23
|
+
subject.__data__[:one_argument].should == [3]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should set values by a method with '='." do
|
|
27
|
+
subject.some_arguments = 'hello', 123, 'world'
|
|
28
|
+
subject.__data__[:some_arguments].should == ['hello', 123, 'world']
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should delete values with a string key." do
|
|
32
|
+
subject.delete_key = 'abc', 'def'
|
|
33
|
+
lambda do
|
|
34
|
+
subject.__delete__('delete_key')
|
|
35
|
+
end.should change { subject.delete_key }.from(['abc', 'def']).to(nil)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should delete values with a symbol key." do
|
|
39
|
+
subject.delete_key = 'abc', 'def'
|
|
40
|
+
lambda do
|
|
41
|
+
subject.__delete__(:delete_key)
|
|
42
|
+
end.should change { subject.delete_key }.from(['abc', 'def']).to(nil)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "should set nil." do
|
|
46
|
+
subject.nil_key = nil
|
|
47
|
+
subject.__data__[:nil_key].should == [nil]
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context "when setting arguments" do
|
|
52
|
+
it "should add an argument" do
|
|
53
|
+
subject.argument << 'hello'
|
|
54
|
+
subject.argument.should include('hello')
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should set argumets" do
|
|
58
|
+
subject.argument = ['ABC', 'DEF']
|
|
59
|
+
subject.argument.should == ['ABC', 'DEF']
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should unshift an argument" do
|
|
63
|
+
subject.argument = ['ABC', 'DEF']
|
|
64
|
+
subject.argument.unshift('first')
|
|
65
|
+
subject.argument.should == ['first', 'ABC', 'DEF']
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
context "when cloning" do
|
|
70
|
+
it "should have same values." do
|
|
71
|
+
subject.argument = ['hello']
|
|
72
|
+
subject.some_key1 = [1, 2]
|
|
73
|
+
subject.some_key2 = 'ABCDE'
|
|
74
|
+
container_clone = DRbQS::Setting::Source.clone_container(subject)
|
|
75
|
+
subject.argument.should == container_clone.argument
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "should have a different argument." do
|
|
79
|
+
subject.argument = ['hello']
|
|
80
|
+
container_clone = DRbQS::Setting::Source.clone_container(subject)
|
|
81
|
+
subject.argument << 'world'
|
|
82
|
+
subject.argument.should_not == container_clone.argument
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "should have different values." do
|
|
86
|
+
subject.key1 = 'abc'
|
|
87
|
+
container_clone = DRbQS::Setting::Source.clone_container(subject)
|
|
88
|
+
subject.key1 = 'def'
|
|
89
|
+
subject.key1.should_not == container_clone.key1
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe DRbQS::Setting::Execute do
|
|
4
|
+
subject do
|
|
5
|
+
DRbQS::Setting::Execute.new
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "when there are invalid arguments" do
|
|
9
|
+
it "should raise error by a value of invalid argument size." do
|
|
10
|
+
subject.set_argument('first', 'second')
|
|
11
|
+
lambda do
|
|
12
|
+
subject.parse!
|
|
13
|
+
end.should raise_error
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should raise error by a value of invalid key." do
|
|
17
|
+
subject.set(:invalid_key, 1, 2, 3)
|
|
18
|
+
subject.set_argument('first')
|
|
19
|
+
lambda do
|
|
20
|
+
subject.parse!
|
|
21
|
+
end.should raise_error
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context "when parsing" do
|
|
26
|
+
it "should not raise error." do
|
|
27
|
+
subject.set(:port, 123)
|
|
28
|
+
subject.set(:server, 'server')
|
|
29
|
+
subject.set(:node, 'node')
|
|
30
|
+
subject.set(:no_server)
|
|
31
|
+
subject.set(:no_node)
|
|
32
|
+
subject.set_argument('one')
|
|
33
|
+
lambda do
|
|
34
|
+
subject.parse!
|
|
35
|
+
end.should_not raise_error
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should not change string for shell." do
|
|
39
|
+
subject.set(:port, 123)
|
|
40
|
+
subject.set(:server, 'server')
|
|
41
|
+
subject.set(:node, 'node')
|
|
42
|
+
subject.set(:no_server)
|
|
43
|
+
subject.set(:no_node)
|
|
44
|
+
subject.set_argument('one')
|
|
45
|
+
subject.parse!
|
|
46
|
+
lambda do
|
|
47
|
+
subject.parse!
|
|
48
|
+
end.should_not change(subject, :string_for_shell)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe DRbQS::Setting::Manage do
|
|
4
|
+
subject do
|
|
5
|
+
DRbQS::Setting::Manage.new
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
context "when there are invalid arguments" do
|
|
9
|
+
it "should raise error by an invalid mode." do
|
|
10
|
+
subject.set_argument('first', 'second')
|
|
11
|
+
lambda do
|
|
12
|
+
subject.parse!
|
|
13
|
+
end.should raise_error
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "should raise error by a value of invalid key." do
|
|
17
|
+
subject.set(:invalid_key, 1, 2, 3)
|
|
18
|
+
subject.set_argument('first')
|
|
19
|
+
lambda do
|
|
20
|
+
subject.parse!
|
|
21
|
+
end.should raise_error
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
[['process', 'invalid_command'],
|
|
25
|
+
['send', 'invalid_type', 'uri', 'string']].each do |args|
|
|
26
|
+
it "should raise error for #{args.inspect}." do
|
|
27
|
+
subject.set_argument(*args)
|
|
28
|
+
lambda do
|
|
29
|
+
subject.parse!
|
|
30
|
+
end.should raise_error
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context "when parsing" do
|
|
36
|
+
[['signal', 'uri', 'server-exit'],
|
|
37
|
+
['signal', 'uri', 'node-exit-after-task', '3'],
|
|
38
|
+
['signal', 'uri', 'node-wake', '4'],
|
|
39
|
+
['signal', 'uri', 'node-sleep', '5'],
|
|
40
|
+
['status', 'uri'],
|
|
41
|
+
['history', 'uri'],
|
|
42
|
+
['process', 'list'],
|
|
43
|
+
['process', 'clear'],
|
|
44
|
+
['send', 'string', 'uri', 'string'],
|
|
45
|
+
['send', 'file', 'uri', __FILE__],
|
|
46
|
+
['initialize']].each do |args|
|
|
47
|
+
it "should not raise error for #{args.inspect}." do
|
|
48
|
+
subject.set_argument(*args)
|
|
49
|
+
lambda do
|
|
50
|
+
subject.parse!
|
|
51
|
+
end.should_not raise_error
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "should not change string for shell for #{args.inspect}." do
|
|
55
|
+
subject.set_argument(*args)
|
|
56
|
+
subject.parse!
|
|
57
|
+
lambda do
|
|
58
|
+
subject.parse!
|
|
59
|
+
end.should_not change(subject, :string_for_shell)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|