drbqs 0.0.5 → 0.0.6
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/README.rdoc +6 -4
- data/VERSION +1 -1
- data/drbqs.gemspec +33 -7
- data/lib/drbqs/client.rb +50 -10
- data/lib/drbqs/connection.rb +13 -11
- data/lib/drbqs/message.rb +5 -40
- data/lib/drbqs/node_list.rb +41 -0
- data/lib/drbqs/queue.rb +2 -21
- data/lib/drbqs/server.rb +27 -0
- data/lib/drbqs/server_define.rb +0 -1
- data/lib/drbqs/task.rb +38 -0
- data/lib/drbqs/task_client.rb +39 -9
- data/lib/drbqs/task_generator.rb +74 -0
- data/lib/drbqs.rb +2 -0
- data/spec/connection_spec.rb +39 -0
- data/spec/manage_spec.rb +50 -0
- data/spec/message_spec.rb +71 -0
- data/spec/node_list_spec.rb +54 -0
- data/spec/queue_spec.rb +59 -0
- data/spec/server_define_spec.rb +34 -0
- data/spec/task_client_spec.rb +53 -0
- data/spec/task_generator_spec.rb +32 -0
- data/spec/task_spec.rb +21 -0
- data/spec/test/test1.rb +13 -0
- data/spec/test1_spec.rb +80 -0
- data/spec/test2_spec.rb +75 -0
- metadata +110 -65
- data/spec/drbqs_spec.rb +0 -7
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require 'drbqs/connection.rb'
|
4
|
+
|
5
|
+
describe DRbQS::ConnectionClient do
|
6
|
+
before(:all) do
|
7
|
+
@message = Rinda::TupleSpace.new
|
8
|
+
@connection = DRbQS::ConnectionClient.new(@message)
|
9
|
+
@node_id = 23
|
10
|
+
id_string = @connection.instance_variable_get(:@id_string)
|
11
|
+
@message.write([id_string, @node_id])
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should get node ID." do
|
15
|
+
@connection.get_id.should == @node_id
|
16
|
+
@message.take([:connect, nil]).should be_true
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should get no initialization method." do
|
20
|
+
@connection.get_initialization.should be_nil
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should get initialization" do
|
24
|
+
ary = [:initialize, [1, 2], :size, []]
|
25
|
+
@message.write(ary)
|
26
|
+
@connection.get_initialization.should == ary[1..-1]
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should respond :alive_p signal" do
|
30
|
+
@message.write([@node_id, :alive_p])
|
31
|
+
@connection.respond_alive_signal
|
32
|
+
@message.take([:alive, nil]).should be_true
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should respond :exit signal" do
|
36
|
+
@message.write([@node_id, :exit])
|
37
|
+
@connection.respond_alive_signal.should == :exit
|
38
|
+
end
|
39
|
+
end
|
data/spec/manage_spec.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require_relative 'test/test1.rb'
|
4
|
+
|
5
|
+
describe DRbQS do
|
6
|
+
before(:all) do
|
7
|
+
@tasks = []
|
8
|
+
5.times do |i|
|
9
|
+
@tasks << DRbQS::Task.new(Test1.new, :echo, [i])
|
10
|
+
end
|
11
|
+
@process_id = fork do
|
12
|
+
server = DRbQS::Server.new(:port => 13501)
|
13
|
+
|
14
|
+
@tasks.each do |task|
|
15
|
+
server.queue.add(task)
|
16
|
+
end
|
17
|
+
|
18
|
+
server.set_finish_hook do |serv|
|
19
|
+
serv.exit
|
20
|
+
end
|
21
|
+
|
22
|
+
server.set_signal_trap
|
23
|
+
server.start
|
24
|
+
server.wait
|
25
|
+
end
|
26
|
+
sleep(1)
|
27
|
+
|
28
|
+
@uri = 'druby://:13501'
|
29
|
+
|
30
|
+
@manage = DRbQS::Manage.new(@uri)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should send exit signal" do
|
34
|
+
lambda do
|
35
|
+
@manage.send_exit_signal
|
36
|
+
end.should_not raise_error
|
37
|
+
lambda do
|
38
|
+
i = 0
|
39
|
+
while !Process.waitpid(@process_id, Process::WNOHANG)
|
40
|
+
i += 1
|
41
|
+
if i > 10
|
42
|
+
Process.kill(:KILL, @process_id)
|
43
|
+
raise "Server process does not finish."
|
44
|
+
end
|
45
|
+
sleep(1)
|
46
|
+
end
|
47
|
+
end.should_not raise_error
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require 'drbqs/message.rb'
|
4
|
+
|
5
|
+
describe DRbQS::MessageServer do
|
6
|
+
before(:all) do
|
7
|
+
@message = Rinda::TupleSpace.new
|
8
|
+
@message_server = DRbQS::MessageServer.new(@message)
|
9
|
+
@node_id_list = []
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should return nil" do
|
13
|
+
@message_server.get_message.should be_nil
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should have no node" do
|
17
|
+
@message_server.node_not_exist?.should be_true
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should set initialization task" do
|
21
|
+
lambda do
|
22
|
+
@message.take([:initialize, nil, Symbol, nil], 0)
|
23
|
+
end.should raise_error Rinda::RequestExpiredError
|
24
|
+
@message_server.set_initialization(DRbQS::Task.new(Object.new, :object_id))
|
25
|
+
@message.take([:initialize, nil, Symbol, nil], 0).should be_true
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should get :connect message" do
|
29
|
+
5.times do |i|
|
30
|
+
id_str = "connect_test_#{i}"
|
31
|
+
@message.write([:connect, id_str])
|
32
|
+
@message_server.get_message
|
33
|
+
(ary = @message.take([id_str, Fixnum])).should be_true
|
34
|
+
@node_id_list << ary[1]
|
35
|
+
@message_server.node_not_exist?.should be_false
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should get :alive message" do
|
40
|
+
node_id = 73
|
41
|
+
@message.write([:alive, node_id])
|
42
|
+
node_list = @message_server.instance_variable_get(:@node_list)
|
43
|
+
node_list.should_receive(:set_alive).with(node_id)
|
44
|
+
@message_server.get_message
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should get :exit_server message" do
|
48
|
+
@message.write([:exit_server, 'message_test'])
|
49
|
+
@message_server.get_message.should == :exit_server
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should send exit message" do
|
53
|
+
@message_server.send_exit
|
54
|
+
@node_id_list.each do |id|
|
55
|
+
@message.take([id, :exit]).should be_true
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should delete a node" do
|
60
|
+
@message_server.check_connection.should == []
|
61
|
+
@node_id_list.each do |id|
|
62
|
+
@message.take([id, :alive_p]).should be_true
|
63
|
+
end
|
64
|
+
@message_server.check_connection.should == @node_id_list
|
65
|
+
@node_id_list.each do |id|
|
66
|
+
lambda do
|
67
|
+
@message.take([id, :alive_p], 0)
|
68
|
+
end.should raise_error Rinda::RequestExpiredError
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require 'drbqs/node_list'
|
4
|
+
|
5
|
+
describe DRbQS::NodeList do
|
6
|
+
before(:all) do
|
7
|
+
@node_list = DRbQS::NodeList.new
|
8
|
+
@id_strings = 10.times.map { |i| sprintf("%05d", i) }
|
9
|
+
@id_list = []
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be empty." do
|
13
|
+
@node_list.empty?.should be_true
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should get ids that are not duplicated." do
|
17
|
+
@id_strings.each do |str|
|
18
|
+
@id_list << @node_list.get_new_id(str)
|
19
|
+
end
|
20
|
+
@id_list.uniq!
|
21
|
+
@id_list.all? { |i| Integer === i }.should be_true
|
22
|
+
@id_list.size.should == @id_strings.size
|
23
|
+
@node_list.each do |id_num, id_str|
|
24
|
+
@id_strings.include?(id_str).should be_true
|
25
|
+
@id_list.include?(id_num).should be_true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should delete all ids" do
|
30
|
+
@node_list.empty?.should_not be_true
|
31
|
+
@node_list.set_check_connection
|
32
|
+
ids = @node_list.delete_not_alive
|
33
|
+
ids.sort.should == @id_list.sort
|
34
|
+
@node_list.empty?.should be_true
|
35
|
+
@id_list.clear
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should set alive flag" do
|
39
|
+
alive_id_num = [3, 4, 5]
|
40
|
+
@id_strings.each do |str|
|
41
|
+
@id_list << @node_list.get_new_id(str)
|
42
|
+
end
|
43
|
+
@node_list.set_check_connection
|
44
|
+
alive_id_num.each do |i|
|
45
|
+
@node_list.set_alive(@id_list[i])
|
46
|
+
end
|
47
|
+
@node_list.delete_not_alive
|
48
|
+
alive_ids = alive_id_num.map { |i| @id_list[i] }
|
49
|
+
@node_list.each do |id_num, id_str|
|
50
|
+
alive_ids.include?(id_num).should be_true
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
data/spec/queue_spec.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require 'drbqs/queue'
|
4
|
+
|
5
|
+
describe DRbQS::QueueServer do
|
6
|
+
before(:all) do
|
7
|
+
@ts = {
|
8
|
+
:queue => Rinda::TupleSpace.new,
|
9
|
+
:result => Rinda::TupleSpace.new
|
10
|
+
}
|
11
|
+
@queue_server = DRbQS::QueueServer.new(@ts[:queue], @ts[:result])
|
12
|
+
@task = { :obj => DRbQS::Task.new([1, 2, 3], :size, []), :id => nil }
|
13
|
+
@node_id = 100
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should be empty" do
|
17
|
+
@queue_server.calculating_task_number.should == 0
|
18
|
+
@queue_server.empty?.should be_true
|
19
|
+
@queue_server.finished?.should be_true
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should add a task" do
|
23
|
+
@task[:id] = @queue_server.add(@task[:obj])
|
24
|
+
@queue_server.calculating_task_number.should == 0
|
25
|
+
@queue_server.empty?.should be_false
|
26
|
+
@queue_server.finished?.should be_false
|
27
|
+
@ts[:queue].take([nil, nil, nil, nil]).should be_true
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should get accept signal" do
|
31
|
+
@ts[:result].write([:accept, @task[:id], @node_id])
|
32
|
+
@queue_server.get_accept_signal.should == 1
|
33
|
+
@queue_server.calculating_task_number.should == 1
|
34
|
+
@queue_server.empty?.should be_true
|
35
|
+
@queue_server.finished?.should be_false
|
36
|
+
@ts[:result].read_all([nil, nil, nil]).size.should == 0
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should get result" do
|
40
|
+
@ts[:result].write([:result, @task[:id], :result_object])
|
41
|
+
@queue_server.get_result
|
42
|
+
@queue_server.calculating_task_number.should == 0
|
43
|
+
@queue_server.empty?.should be_true
|
44
|
+
@queue_server.finished?.should be_true
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should delete node" do
|
48
|
+
@task[:id] = @queue_server.add(@task[:obj])
|
49
|
+
@ts[:queue].take([nil, nil, nil, nil]).should be_true
|
50
|
+
@ts[:result].write([:accept, @task[:id], 100])
|
51
|
+
@queue_server.get_accept_signal.should == 1
|
52
|
+
@queue_server.requeue_for_deleted_node_id([@node_id])
|
53
|
+
@queue_server.calculating_task_number.should == 0
|
54
|
+
@queue_server.empty?.should be_false
|
55
|
+
@queue_server.finished?.should be_false
|
56
|
+
(ary = @ts[:queue].take([nil, nil, nil, nil])).should be_true
|
57
|
+
ary[0].should == @task[:id]
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe DRbQS::ServerDefinition do
|
4
|
+
context "when we call class methods" do
|
5
|
+
before(:all) do
|
6
|
+
@server_definition = DRbQS.class_variable_get(:@@server_def)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should define server" do
|
10
|
+
@server_definition.should_receive(:define_server)
|
11
|
+
DRbQS.define_server do |server, argv, opts|
|
12
|
+
server.set_finish_hook do |serv|
|
13
|
+
serv.exit
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should set parser of options" do
|
19
|
+
@server_definition.should_receive(:option_parser)
|
20
|
+
DRbQS.option_parser do |opt, hash|
|
21
|
+
opt.on('--test') do |v|
|
22
|
+
hash[:test] = true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should parse options" do
|
28
|
+
@server_definition.should_receive(:parse_option)
|
29
|
+
DRbQS.parse_option(['--test'])
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require 'drbqs/task_client'
|
4
|
+
|
5
|
+
describe DRbQS::TaskClient do
|
6
|
+
before(:all) do
|
7
|
+
@node_id = 4
|
8
|
+
@ts_queue = Rinda::TupleSpace.new
|
9
|
+
@ts_result = Rinda::TupleSpace.new
|
10
|
+
@task_client = DRbQS::TaskClient.new(@node_id, @ts_queue, @ts_result)
|
11
|
+
@task_example = [[1, 2, 3], :size, []]
|
12
|
+
@task_id = 10
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should be empty" do
|
16
|
+
@task_client.task_empty?.should be_true
|
17
|
+
@task_client.result_empty?.should be_true
|
18
|
+
@task_client.calculating_task.should be_nil
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should queue a task" do
|
22
|
+
@ts_queue.write([@task_id] + @task_example)
|
23
|
+
@task_client.add_new_task
|
24
|
+
@task_client.task_empty?.should_not be_true
|
25
|
+
@task_client.result_empty?.should be_true
|
26
|
+
@task_client.calculating_task.should == @task_id
|
27
|
+
@ts_queue.read_all([nil, nil, nil, nil]).size.should == 0
|
28
|
+
@ts_result.take([:accept, nil, nil], 0).should be_true
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should dequeue a task" do
|
32
|
+
ary = @task_client.dequeue_task
|
33
|
+
ary.should == @task_example
|
34
|
+
@task_client.task_empty?.should be_true
|
35
|
+
@task_client.result_empty?.should be_true
|
36
|
+
@task_client.calculating_task.should == @task_id
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should queue result" do
|
40
|
+
@task_client.queue_result(@task_example[0].__send__(@task_example[1], *@task_example[2]))
|
41
|
+
@task_client.task_empty?.should be_true
|
42
|
+
@task_client.result_empty?.should_not be_true
|
43
|
+
@task_client.calculating_task.should == @task_id
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should send result" do
|
47
|
+
@task_client.send_result
|
48
|
+
@task_client.task_empty?.should be_true
|
49
|
+
@task_client.result_empty?.should be_true
|
50
|
+
@task_client.calculating_task.should be_nil
|
51
|
+
@ts_result.take([:result, nil, nil], 0).should be_true
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require 'drbqs/task_generator'
|
4
|
+
|
5
|
+
describe DRbQS::TaskGenerator do
|
6
|
+
def check_task_ary(tasks, num)
|
7
|
+
tasks.should have(num).items
|
8
|
+
tasks.all? { |t| DRbQS::Task === t }.should be_true
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { DRbQS::TaskGenerator.new(:abc => 'ABC', :def => 123, :data => [1, 2, 3]) }
|
12
|
+
|
13
|
+
it "should initialize instance varibles" do
|
14
|
+
subject.instance_variable_get('@abc').should == 'ABC'
|
15
|
+
subject.instance_variable_get('@def').should == 123
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should create new tasks" do
|
19
|
+
subject.set(2) do
|
20
|
+
@data.each do |i|
|
21
|
+
create_add_task(i, :to_s)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
check_task_ary(subject.new_tasks, 2)
|
25
|
+
check_task_ary(subject.new_tasks, 1)
|
26
|
+
subject.new_tasks.should be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should debug generator" do
|
30
|
+
subject.debug_all_tasks.should be_true
|
31
|
+
end
|
32
|
+
end
|
data/spec/task_spec.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe DRbQS::Task do
|
4
|
+
it "should not set hook" do
|
5
|
+
task = DRbQS::Task.new([1, 2, 3], :size)
|
6
|
+
task.hook.should be_nil
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should set hook" do
|
10
|
+
task = DRbQS::Task.new([1, 2, 3], :size) do |server, ret|
|
11
|
+
p ret
|
12
|
+
end
|
13
|
+
task.hook.should be_an_instance_of Proc
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should have same targets" do
|
17
|
+
task1 = DRbQS::Task.new([1, 2, 3], :concat, [3, 4, 5])
|
18
|
+
task2 = DRbQS::Task.new([1, 2, 3], :concat, [3, 4, 5])
|
19
|
+
task1.same_target?(task2).should be_true
|
20
|
+
end
|
21
|
+
end
|
data/spec/test/test1.rb
ADDED
data/spec/test1_spec.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require_relative '../lib/drbqs.rb'
|
4
|
+
require_relative 'test/test1.rb'
|
5
|
+
|
6
|
+
describe DRbQS do
|
7
|
+
before(:all) do
|
8
|
+
@tasks = []
|
9
|
+
5.times do |i|
|
10
|
+
@tasks << DRbQS::Task.new(Test1.new, :echo, [i])
|
11
|
+
end
|
12
|
+
@process_id = fork do
|
13
|
+
server = DRbQS::Server.new(:port => 13501)
|
14
|
+
|
15
|
+
@tasks.each do |task|
|
16
|
+
server.queue.add(task)
|
17
|
+
end
|
18
|
+
|
19
|
+
server.set_finish_hook do |serv|
|
20
|
+
serv.exit
|
21
|
+
end
|
22
|
+
|
23
|
+
server.set_signal_trap
|
24
|
+
server.start
|
25
|
+
server.wait
|
26
|
+
end
|
27
|
+
sleep(1)
|
28
|
+
|
29
|
+
@uri = 'druby://:13501'
|
30
|
+
@client = DRbQS::Client.new(@uri, :log_file => $stdout, :continue => true)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should have nil instance variables" do
|
34
|
+
@client.instance_variable_get(:@task_client).should be_nil
|
35
|
+
@client.instance_variable_get(:@connection).should be_nil
|
36
|
+
@client.connect
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should initialize @task_client" do
|
40
|
+
task_client = @client.instance_variable_get(:@task_client)
|
41
|
+
task_client.should be_an_instance_of DRbQS::TaskClient
|
42
|
+
task_client.node_id.should be_an_instance_of Fixnum
|
43
|
+
task_client.task_empty?.should be_true
|
44
|
+
task_client.result_empty?.should be_true
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should initialize @connection" do
|
48
|
+
connection = @client.instance_eval { @connection }
|
49
|
+
connection.should be_an_instance_of DRbQS::ConnectionClient
|
50
|
+
connection.instance_variable_get(:@id_number).should be_an_instance_of Fixnum
|
51
|
+
connection.instance_variable_get(:@id_string).should be_an_instance_of String
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should calculate" do
|
55
|
+
task_client = @client.instance_eval { @task_client }
|
56
|
+
# *** Too late ***
|
57
|
+
# task_client.should_receive(:add_new_task).at_least(:once)
|
58
|
+
# task_client.should_receive(:transit).exactly(5).times
|
59
|
+
# task_client.should_receive(:send_result).exactly(5).times
|
60
|
+
lambda do
|
61
|
+
@client.calculate
|
62
|
+
end.should_not raise_error
|
63
|
+
Test1.get_execute_echo_number.should == @tasks.size
|
64
|
+
end
|
65
|
+
|
66
|
+
after(:all) do
|
67
|
+
lambda do
|
68
|
+
i = 0
|
69
|
+
while !Process.waitpid(@process_id, Process::WNOHANG)
|
70
|
+
i += 1
|
71
|
+
if i > 10
|
72
|
+
Process.kill(:KILL, @process_id)
|
73
|
+
raise "Server process does not finish."
|
74
|
+
end
|
75
|
+
sleep(1)
|
76
|
+
end
|
77
|
+
end.should_not raise_error
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
data/spec/test2_spec.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
require_relative '../lib/drbqs.rb'
|
4
|
+
require_relative 'test/test1.rb'
|
5
|
+
|
6
|
+
describe DRbQS do
|
7
|
+
before(:all) do
|
8
|
+
@tasks = []
|
9
|
+
@task_generator = DRbQS::TaskGenerator.new(:iterate => 3)
|
10
|
+
@task_generator.set do
|
11
|
+
@iterate.times do |i|
|
12
|
+
create_add_task(Test1.new, :echo, [i])
|
13
|
+
end
|
14
|
+
end
|
15
|
+
@process_id = fork do
|
16
|
+
server = DRbQS::Server.new(:port => 13501)
|
17
|
+
|
18
|
+
server.set_task_generator(@task_generator)
|
19
|
+
|
20
|
+
server.set_finish_hook do |serv|
|
21
|
+
serv.exit
|
22
|
+
end
|
23
|
+
|
24
|
+
server.set_signal_trap
|
25
|
+
server.start
|
26
|
+
server.wait
|
27
|
+
end
|
28
|
+
sleep(1)
|
29
|
+
|
30
|
+
@uri = 'druby://:13501'
|
31
|
+
@client = DRbQS::Client.new(@uri, :log_file => $stdout, :continue => true)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should have nil instance variables" do
|
35
|
+
@client.instance_variable_get(:@task_client).should be_nil
|
36
|
+
@client.instance_variable_get(:@connection).should be_nil
|
37
|
+
@client.connect
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should initialize @task_client" do
|
41
|
+
task_client = @client.instance_variable_get(:@task_client)
|
42
|
+
task_client.should be_an_instance_of DRbQS::TaskClient
|
43
|
+
task_client.node_id.should be_an_instance_of Fixnum
|
44
|
+
task_client.task_empty?.should be_true
|
45
|
+
task_client.result_empty?.should be_true
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should initialize @connection" do
|
49
|
+
connection = @client.instance_eval { @connection }
|
50
|
+
connection.should be_an_instance_of DRbQS::ConnectionClient
|
51
|
+
connection.instance_variable_get(:@id_number).should be_an_instance_of Fixnum
|
52
|
+
connection.instance_variable_get(:@id_string).should be_an_instance_of String
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should calculate" do
|
56
|
+
lambda do
|
57
|
+
@client.calculate
|
58
|
+
end.should_not raise_error
|
59
|
+
end
|
60
|
+
|
61
|
+
after(:all) do
|
62
|
+
lambda do
|
63
|
+
i = 0
|
64
|
+
while !Process.waitpid(@process_id, Process::WNOHANG)
|
65
|
+
i += 1
|
66
|
+
if i > 10
|
67
|
+
Process.kill(:KILL, @process_id)
|
68
|
+
raise "Server process does not finish."
|
69
|
+
end
|
70
|
+
sleep(1)
|
71
|
+
end
|
72
|
+
end.should_not raise_error
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|