drbqs 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. data/Gemfile +10 -7
  2. data/README.md +52 -11
  3. data/Rakefile +32 -10
  4. data/VERSION +1 -1
  5. data/bin/drbqs-manage +3 -93
  6. data/bin/drbqs-node +3 -89
  7. data/bin/drbqs-server +3 -117
  8. data/bin/drbqs-ssh +6 -0
  9. data/drbqs.gemspec +118 -97
  10. data/example/README.md +2 -2
  11. data/lib/drbqs/config/config.rb +88 -0
  12. data/lib/drbqs/config/process_list.rb +194 -0
  13. data/lib/drbqs/config/ssh_host.rb +41 -0
  14. data/lib/drbqs/{execute_node.rb → manage/execute_node.rb} +6 -4
  15. data/lib/drbqs/manage/manage.rb +100 -0
  16. data/lib/drbqs/manage/send_signal.rb +45 -0
  17. data/lib/drbqs/manage/ssh_execute.rb +23 -0
  18. data/lib/drbqs/manage/ssh_shell.rb +143 -0
  19. data/lib/drbqs/node/connection.rb +69 -0
  20. data/lib/drbqs/{client.rb → node/node.rb} +48 -18
  21. data/lib/drbqs/node/task_client.rb +94 -0
  22. data/lib/drbqs/server/acl_file.rb +15 -0
  23. data/lib/drbqs/server/check_alive.rb +23 -0
  24. data/lib/drbqs/server/history.rb +49 -0
  25. data/lib/drbqs/server/message.rb +142 -0
  26. data/lib/drbqs/server/node_list.rb +59 -0
  27. data/lib/drbqs/server/queue.rb +128 -0
  28. data/lib/drbqs/{server.rb → server/server.rb} +66 -74
  29. data/lib/drbqs/server/server_hook.rb +72 -0
  30. data/lib/drbqs/server/transfer_setting.rb +30 -0
  31. data/lib/drbqs/task/command_task.rb +43 -0
  32. data/lib/drbqs/{task.rb → task/task.rb} +18 -39
  33. data/lib/drbqs/{task_generator.rb → task/task_generator.rb} +2 -0
  34. data/lib/drbqs/utility/argument.rb +27 -0
  35. data/lib/drbqs/utility/command_line/command_base.rb +27 -0
  36. data/lib/drbqs/utility/command_line/command_manage.rb +121 -0
  37. data/lib/drbqs/utility/command_line/command_node.rb +103 -0
  38. data/lib/drbqs/utility/command_line/command_server.rb +165 -0
  39. data/lib/drbqs/utility/command_line/command_ssh.rb +126 -0
  40. data/lib/drbqs/utility/command_line.rb +15 -0
  41. data/lib/drbqs/utility/misc.rb +72 -0
  42. data/lib/drbqs/{server_define.rb → utility/server_define.rb} +23 -8
  43. data/lib/drbqs/utility/temporary.rb +49 -0
  44. data/lib/drbqs/{ssh/transfer.rb → utility/transfer/file_transfer.rb} +18 -58
  45. data/lib/drbqs/utility/transfer/transfer_client.rb +90 -0
  46. data/lib/drbqs.rb +10 -22
  47. data/spec/config/config_spec.rb +84 -0
  48. data/spec/config/process_list_spec.rb +149 -0
  49. data/spec/config/ssh_host_spec.rb +81 -0
  50. data/spec/integration_test/01_basic_usage_spec.rb +54 -0
  51. data/spec/integration_test/02_use_generator_spec.rb +53 -0
  52. data/spec/integration_test/03_use_temporary_file_spec.rb +26 -0
  53. data/spec/integration_test/04_use_unix_domain_spec.rb +34 -0
  54. data/spec/integration_test/05_server_exit_signal_spec.rb +23 -0
  55. data/spec/integration_test/06_node_exit_after_task_spec.rb +42 -0
  56. data/spec/integration_test/07_command_server_with_node_spec.rb +44 -0
  57. data/spec/integration_test/definition/server01.rb +20 -0
  58. data/spec/integration_test/definition/server02.rb +16 -0
  59. data/spec/integration_test/definition/task_obj_definition.rb +49 -0
  60. data/spec/manage/manage_spec.rb +33 -0
  61. data/spec/manage/send_signal_spec.rb +39 -0
  62. data/spec/{ssh_shell_spec.rb → manage/ssh_shell_spec.rb} +8 -8
  63. data/spec/node/connection_spec.rb +66 -0
  64. data/spec/node/task_client_spec.rb +212 -0
  65. data/spec/server/acl_file_spec.rb +9 -0
  66. data/spec/{server_check_alive_spec.rb → server/check_alive_spec.rb} +15 -11
  67. data/spec/{data → server/data}/acl.txt +0 -0
  68. data/spec/{history_spec.rb → server/history_spec.rb} +9 -5
  69. data/spec/server/message_spec.rb +195 -0
  70. data/spec/server/node_list_spec.rb +111 -0
  71. data/spec/server/queue_spec.rb +239 -0
  72. data/spec/{server_hook_spec.rb → server/server_hook_spec.rb} +23 -17
  73. data/spec/server/server_spec.rb +89 -0
  74. data/spec/server/transfer_setting_spec.rb +37 -0
  75. data/spec/spec_helper.rb +65 -0
  76. data/spec/task/file_transfer_spec.rb +107 -0
  77. data/spec/{task_generator_spec.rb → task/task_generator_spec.rb} +2 -2
  78. data/spec/{task_spec.rb → task/task_spec.rb} +3 -1
  79. data/spec/utility/argument_spec.rb +39 -0
  80. data/spec/utility/command_line/command_base_spec.rb +33 -0
  81. data/spec/utility/command_line/commands_spec.rb +15 -0
  82. data/spec/utility/misc_spec.rb +77 -0
  83. data/spec/utility/server_define_spec.rb +59 -0
  84. data/spec/utility/temporary_spec.rb +39 -0
  85. metadata +158 -93
  86. data/example/drbqs-manage-test.rb +0 -3
  87. data/example/drbqs-node-test.rb +0 -3
  88. data/example/drbqs-server-test.rb +0 -3
  89. data/lib/drbqs/acl_file.rb +0 -13
  90. data/lib/drbqs/config.rb +0 -98
  91. data/lib/drbqs/connection.rb +0 -67
  92. data/lib/drbqs/history.rb +0 -34
  93. data/lib/drbqs/manage.rb +0 -84
  94. data/lib/drbqs/message.rb +0 -119
  95. data/lib/drbqs/node_list.rb +0 -52
  96. data/lib/drbqs/queue.rb +0 -138
  97. data/lib/drbqs/server_hook.rb +0 -67
  98. data/lib/drbqs/ssh/host.rb +0 -26
  99. data/lib/drbqs/ssh/shell.rb +0 -139
  100. data/lib/drbqs/task_client.rb +0 -86
  101. data/lib/drbqs/utils.rb +0 -19
  102. data/spec/acl_file_spec.rb +0 -9
  103. data/spec/config_spec.rb +0 -14
  104. data/spec/connection_spec.rb +0 -49
  105. data/spec/manage_spec.rb +0 -57
  106. data/spec/message_spec.rb +0 -81
  107. data/spec/node_list_spec.rb +0 -68
  108. data/spec/queue_spec.rb +0 -59
  109. data/spec/server_define_spec.rb +0 -45
  110. data/spec/server_spec.rb +0 -56
  111. data/spec/task_client_spec.rb +0 -53
  112. data/spec/test/test1.rb +0 -13
  113. data/spec/test1_spec.rb +0 -80
  114. data/spec/test2_spec.rb +0 -69
  115. data/spec/transfer_spec.rb +0 -13
@@ -0,0 +1,149 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/config/config'
4
+
5
+ describe DRbQS::ProcessList::Server do
6
+ before(:all) do
7
+ @dir = File.join(File.dirname(__FILE__), 'tmp_process_list/server')
8
+ FileUtils.mkdir_p(@dir)
9
+ end
10
+
11
+ subject do
12
+ DRbQS::ProcessList::Server.new(@dir)
13
+ end
14
+
15
+ it "should save data" do
16
+ uri = 'druby://:13000'
17
+ h = { :pid => 1111 }
18
+ subject.save(uri, h)
19
+ subject.get(uri).should == h
20
+ end
21
+
22
+ it "should return list of server." do
23
+ uri = 'druby://:13001'
24
+ h = { :pid => 1234 }
25
+ subject.save(uri, h)
26
+ list = subject.list
27
+ list.should be_an_instance_of Hash
28
+ list[uri].should == h
29
+ end
30
+
31
+ it "should delete." do
32
+ uri = 'druby://:13002'
33
+ h = { :pid => 2222 }
34
+ subject.save(uri, h)
35
+ subject.delete(uri)
36
+ subject.get(uri).should be_nil
37
+ end
38
+
39
+ it "should get from uri." do
40
+ h = { :pid => 1111 }
41
+ subject.save('druby://:13003', h)
42
+ subject.get('druby://example.com:13003').should == h
43
+ end
44
+
45
+ it "should have server of key." do
46
+ subject.save('druby://:13004', { :key => 'key1' })
47
+ subject.server_of_key_exist?('druby://example.com:13004', 'key1').should be_true
48
+ end
49
+
50
+ it "should not have server of key." do
51
+ subject.save('druby://:13005', { :key => 'key2' })
52
+ subject.server_of_key_exist?('druby://example.com:13005', 'invalid_key').should be_false
53
+ end
54
+
55
+ it "should not have server." do
56
+ subject.delete('druby://:13005')
57
+ subject.server_of_key_exist?('druby://example.com:13006', 'key').should be_false
58
+ end
59
+
60
+ it "should clear server data that does not exist." do
61
+ uri = 'druby://:13006'
62
+ subject.save(uri, { :pid => 1 })
63
+ subject.should_receive(:delete).at_least(:once)
64
+ subject.clear_process_not_exist
65
+ end
66
+
67
+ after(:all) do
68
+ FileUtils.rm_r(@dir)
69
+ end
70
+
71
+ end
72
+
73
+ describe DRbQS::ProcessList::Node do
74
+ before(:all) do
75
+ @dir = File.join(File.dirname(__FILE__), 'tmp_process_list/node')
76
+ FileUtils.mkdir_p(@dir)
77
+ end
78
+
79
+ subject do
80
+ DRbQS::ProcessList::Node.new(@dir)
81
+ end
82
+
83
+ it "should save data" do
84
+ pid = 10000
85
+ h = { :uri => 'druby://:13000' }
86
+ subject.save(pid, h)
87
+ subject.get(pid).should == h
88
+ end
89
+
90
+ it "should return list of server." do
91
+ pid = 10001
92
+ h = { :uri => 'druby://:13001' }
93
+ subject.save(pid, h)
94
+ list = subject.list
95
+ list.should be_an_instance_of Hash
96
+ list[pid].should == h
97
+ end
98
+
99
+ it "should delete." do
100
+ pid = 10002
101
+ h = { :uri => 'druby://:13002' }
102
+ subject.save(pid, h)
103
+ subject.delete(pid)
104
+ subject.get(pid).should be_nil
105
+ end
106
+
107
+ it "should clear node data that does not exist." do
108
+ pid = 10003
109
+ h = { :uri => 'druby://:13003' }
110
+ subject.save(pid, h)
111
+ subject.should_receive(:delete).at_least(:once)
112
+ subject.clear_process_not_exist
113
+ end
114
+
115
+ after(:all) do
116
+ FileUtils.rm_r(@dir)
117
+ end
118
+
119
+ end
120
+
121
+ describe DRbQS::ProcessList do
122
+ before(:all) do
123
+ @dir = File.join(File.dirname(__FILE__), 'tmp_process_list')
124
+ FileUtils.mkdir_p(@dir)
125
+ end
126
+
127
+ subject do
128
+ DRbQS::ProcessList.new(@dir)
129
+ end
130
+
131
+ it "should create directory." do
132
+ subject
133
+ hostname = Socket.gethostname
134
+ File.exist?(File.join(@dir, 'process')).should be_true
135
+ File.exist?(File.join(@dir, 'process', 'server', hostname)).should be_true
136
+ File.exist?(File.join(@dir, 'process', 'node', hostname)).should be_true
137
+ end
138
+
139
+ it "should execute clear data of which process does not exist." do
140
+ subject.node.should_receive(:clear_process_not_exist)
141
+ subject.server.should_receive(:clear_process_not_exist)
142
+ subject.clear_process_not_exist
143
+ end
144
+
145
+ after(:all) do
146
+ FileUtils.rm_r(@dir)
147
+ end
148
+
149
+ end
@@ -0,0 +1,81 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/config/config'
4
+ require 'drbqs/utility/temporary'
5
+
6
+ describe DRbQS::Config::SSHHost do
7
+ before(:all) do
8
+ @dir = DRbQS::Temporary.directory
9
+ end
10
+
11
+ subject do
12
+ DRbQS::Config::SSHHost.new(@dir)
13
+ end
14
+
15
+ it "should return empty data" do
16
+ subject.get_options('host0').should == [nil, {}]
17
+ end
18
+
19
+ it "should return path with extension '\.yaml'." do
20
+ path = File.join(@dir, 'host1.yaml')
21
+ data = { :abc => 123 }
22
+ open(path, 'w') do |f|
23
+ f.print YAML.dump(data)
24
+ end
25
+ ary = subject.get_options('host1')
26
+ ary[0].should == path
27
+ ary[1].should == data
28
+ FileUtils.rm(path)
29
+ end
30
+
31
+ it "should return path with extension '\.yml'." do
32
+ path = File.join(@dir, 'host2.yml')
33
+ data = { :abc => 123 }
34
+ open(path, 'w') do |f|
35
+ f.print YAML.dump(data)
36
+ end
37
+ ary = subject.get_options('host2')
38
+ ary[0].should == path
39
+ ary[1].should == data
40
+ FileUtils.rm(path)
41
+ end
42
+
43
+ it "should return nil for invalid extension." do
44
+ path = File.join(@dir, 'host3.txt')
45
+ data = { :abc => 123 }
46
+ open(path, 'w') do |f|
47
+ f.print YAML.dump(data)
48
+ end
49
+ subject.get_options('host3').should == [nil, {}]
50
+ FileUtils.rm(path)
51
+ end
52
+
53
+ it "should return list of names." do
54
+ names = ['name1', 'name2', 'name3']
55
+ files = names.map do |n|
56
+ File.join(@dir, n + '.yaml')
57
+ end
58
+ data = { :abc => 123 }
59
+ files.each do |path|
60
+ open(path, 'w') do |f|
61
+ f.print YAML.dump(data)
62
+ end
63
+ end
64
+ subject.config_names.should == names.sort
65
+ FileUtils.rm(files)
66
+ end
67
+
68
+ it "should return only path." do
69
+ path = File.join(@dir, 'host4.yml')
70
+ data = { :abc => 123 }
71
+ open(path, 'w') do |f|
72
+ f.print YAML.dump(data)
73
+ end
74
+ subject.get_path('host4').should == path
75
+ FileUtils.rm(path)
76
+ end
77
+
78
+ after(:all) do
79
+ DRbQS::Temporary.delete_all
80
+ end
81
+ end
@@ -0,0 +1,54 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/task/task'
4
+ require_relative 'definition/task_obj_definition.rb'
5
+
6
+ describe DRbQS do
7
+ before(:all) do
8
+ @tasks = 5.times.map do |i|
9
+ DRbQS::Task.new(Test1.new, :echo, [i])
10
+ end
11
+ @process_id, @uri = drbqs_fork_server(13501, @tasks)
12
+ @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
13
+ end
14
+
15
+ it "should have nil instance variables" do
16
+ @node.instance_variable_get(:@task_client).should be_nil
17
+ @node.instance_variable_get(:@connection).should be_nil
18
+ @node.connect
19
+ end
20
+
21
+ it "should initialize @task_client" do
22
+ task_node = @node.instance_variable_get(:@task_client)
23
+ task_node.should be_an_instance_of DRbQS::Node::TaskClient
24
+ task_node.node_number.should be_an_instance_of Fixnum
25
+ task_node.task_empty?.should be_true
26
+ task_node.result_empty?.should be_true
27
+ end
28
+
29
+ it "should initialize @connection" do
30
+ connection = @node.instance_eval { @connection }
31
+ connection.should be_an_instance_of DRbQS::Node::Connection
32
+ connection.node_number.should be_an_instance_of Fixnum
33
+ connection.id.should be_an_instance_of String
34
+ end
35
+
36
+ it "should calculate" do
37
+ task_node = @node.instance_eval { @task_node }
38
+ # *** Too late ***
39
+ # task_node.should_receive(:add_new_task).at_least(:once)
40
+ # task_node.should_receive(:transit).exactly(5).times
41
+ # task_node.should_receive(:send_result).exactly(5).times
42
+ lambda do
43
+ @node.calculate
44
+ end.should_not raise_error
45
+ Test1.get_execute_echo_number.should == @tasks.size
46
+ end
47
+
48
+ after(:all) do
49
+ lambda do
50
+ drbqs_wait_kill_server(@process_id)
51
+ end.should_not raise_error
52
+ end
53
+
54
+ end
@@ -0,0 +1,53 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/task/task'
4
+ require_relative 'definition/task_obj_definition.rb'
5
+
6
+ describe DRbQS do
7
+ before(:all) do
8
+ @task_generators = [DRbQS::TaskGenerator.new(:iterate => 3), DRbQS::TaskGenerator.new(:iterate => 4)]
9
+ @task_generators.each do |tg|
10
+ tg.set do
11
+ @iterate.times do |i|
12
+ create_add_task(Test1.new, :echo, [i])
13
+ end
14
+ end
15
+ end
16
+ @process_id, @uri = drbqs_fork_server(13501, @task_generators)
17
+ @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
18
+ end
19
+
20
+ it "should have nil instance variables" do
21
+ @node.instance_variable_get(:@task_client).should be_nil
22
+ @node.instance_variable_get(:@connection).should be_nil
23
+ @node.connect
24
+ end
25
+
26
+ it "should initialize @task_client" do
27
+ task_client = @node.instance_variable_get(:@task_client)
28
+ task_client.should be_an_instance_of DRbQS::Node::TaskClient
29
+ task_client.node_number.should be_an_instance_of Fixnum
30
+ task_client.task_empty?.should be_true
31
+ task_client.result_empty?.should be_true
32
+ end
33
+
34
+ it "should initialize @connection" do
35
+ connection = @node.instance_eval { @connection }
36
+ connection.should be_an_instance_of DRbQS::Node::Connection
37
+ connection.node_number.should be_an_instance_of Fixnum
38
+ connection.id.should be_an_instance_of String
39
+ end
40
+
41
+ it "should calculate" do
42
+ lambda do
43
+ @node.calculate
44
+ end.should_not raise_error
45
+ end
46
+
47
+ after(:all) do
48
+ lambda do
49
+ drbqs_wait_kill_server(@process_id)
50
+ end.should_not raise_error
51
+ end
52
+
53
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/task/task'
4
+ require_relative 'definition/task_obj_definition.rb'
5
+
6
+ describe DRbQS do
7
+ before(:all) do
8
+ @tasks = [DRbQS::Task.new(Test3.new, :temp_file)]
9
+ @process_id, @uri = drbqs_fork_server(13503, @tasks)
10
+ @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
11
+ end
12
+
13
+ it "should initialize @task_client" do
14
+ lambda do
15
+ @node.connect
16
+ @node.calculate
17
+ end.should_not raise_error
18
+ end
19
+
20
+ after(:all) do
21
+ lambda do
22
+ drbqs_wait_kill_server(@process_id)
23
+ end.should_not raise_error
24
+ end
25
+
26
+ end
@@ -0,0 +1,34 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs'
4
+ require_relative 'definition/task_obj_definition.rb'
5
+
6
+ describe DRbQS::Server do
7
+ before(:all) do
8
+ @tasks = 2.times.map do |i|
9
+ DRbQS::Task.new(Test1.new, :echo, [i])
10
+ end
11
+ path = "/tmp/drbqs"
12
+ @process_id, @uri = drbqs_fork_server(path, @tasks)
13
+ @manage = DRbQS::Manage.new(:uri => @uri)
14
+ @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
15
+ end
16
+
17
+ it "should send signal and get status" do
18
+ @manage.get_status.should be_true
19
+ end
20
+
21
+ it "should calculate task" do
22
+ @node.connect
23
+ lambda do
24
+ @node.calculate
25
+ end.should_not raise_error
26
+ end
27
+
28
+ after(:all) do
29
+ lambda do
30
+ drbqs_wait_kill_server(@process_id)
31
+ end.should_not raise_error
32
+ end
33
+
34
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/task/task'
4
+ require_relative 'definition/task_obj_definition.rb'
5
+
6
+ describe DRbQS do
7
+ before(:all) do
8
+ @tasks = 3.times.map do |i|
9
+ DRbQS::Task.new(Test1.new, :echo, [i])
10
+ end
11
+ @process_id, @uri = drbqs_fork_server(13501, @tasks)
12
+ @manage = DRbQS::Manage.new(:uri => @uri)
13
+ end
14
+
15
+ it "should send exit signal" do
16
+ lambda do
17
+ @manage.send_exit_signal
18
+ end.should_not raise_error
19
+ lambda do
20
+ drbqs_wait_kill_server(@process_id)
21
+ end.should_not raise_error
22
+ end
23
+ end
@@ -0,0 +1,42 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/manage/execute_node'
4
+ require_relative 'definition/task_obj_definition.rb'
5
+
6
+ describe DRbQS::Server do
7
+ before(:all) do
8
+ @wait = 2
9
+ @tasks = 10.times.map do |i|
10
+ DRbQS::Task.new(Test2.new, :echo_wait, [@wait])
11
+ end
12
+ @server_process_id, @uri = drbqs_fork_server(13501, @tasks, :continue => true)
13
+ @manage = DRbQS::Manage.new(:uri => @uri)
14
+ end
15
+
16
+ it "should send node exit" do
17
+ execute_node = DRbQS::ExecuteNode.new(@uri, nil, nil)
18
+ execute_node.execute(1)
19
+ client_process_id = execute_node.pid[0]
20
+ sleep(@wait)
21
+ @manage.send_node_exit_after_task(1)
22
+ th = Process.detach(client_process_id)
23
+ max_wait_time = @wait * 3
24
+ max_wait_time.times do |i|
25
+ sleep(1)
26
+ unless th.alive?
27
+ break
28
+ end
29
+ if i == (max_wait_time - 1)
30
+ raise "Client does not exit."
31
+ end
32
+ end
33
+ end
34
+
35
+ after(:all) do
36
+ @manage.send_exit_signal
37
+ lambda do
38
+ drbqs_wait_kill_server(@server_process_id)
39
+ end.should_not raise_error
40
+ end
41
+
42
+ end
@@ -0,0 +1,44 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/task/task'
4
+ require 'drbqs/utility/command_line'
5
+
6
+ describe DRbQS do
7
+ context "when server is executed with nodes." do
8
+ it "should exit normally." do
9
+ @path = File.expand_path(File.join(File.dirname(__FILE__), 'definition/server01.rb'))
10
+ @port = 13600
11
+ @pid_server = fork do
12
+ DRbQS::CommandServer.exec([@path, '-p', @port.to_s, '--execute-node', '2'])
13
+ end
14
+ lambda do
15
+ i = 0
16
+ until exit_data = Process.waitpid2(@pid_server, Process::WNOHANG)
17
+ sleep(1)
18
+ if i > 10
19
+ raise "Server can not stop within 10 seconds."
20
+ end
21
+ end
22
+ exit_data[1].success?.should be_true
23
+ end.should_not raise_error
24
+ end
25
+
26
+ it "should raise error in server." do
27
+ @path = File.expand_path(File.join(File.dirname(__FILE__), 'definition/server02.rb'))
28
+ @port = 13601
29
+ @pid_server = fork do
30
+ DRbQS::CommandServer.exec([@path, '-p', @port.to_s, '--execute-node', '2'])
31
+ end
32
+ lambda do
33
+ i = 0
34
+ until exit_data = Process.waitpid2(@pid_server, Process::WNOHANG)
35
+ sleep(1)
36
+ if i > 10
37
+ raise "Server can not stop within 10 seconds."
38
+ end
39
+ end
40
+ exit_data[1].success?.should_not be_true
41
+ end.should_not raise_error
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,20 @@
1
+ require_relative 'task_obj_definition.rb'
2
+
3
+ DRbQS.option_parser do |opt, hash|
4
+ hash[:step] = 1
5
+ opt.on('--step NUM', Integer, 'Set the step size.') do |v|
6
+ hash[:step] = v
7
+ end
8
+ end
9
+
10
+ DRbQS.define_server(:finish_exit => true) do |server, argv, opts|
11
+ tgen = DRbQS::TaskGenerator.new(:step => opts[:step])
12
+ tgen.set(:generate => 2) do
13
+ 1.step(100, 50) do |i|
14
+ create_add_task(TestSum.new, :calc, [i, i + 10, @step]) do |srv, result|
15
+ puts result
16
+ end
17
+ end
18
+ end
19
+ server.add_task_generator(tgen)
20
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'task_obj_definition.rb'
2
+
3
+ DRbQS.option_parser do |opt, hash|
4
+ hash[:step] = 1
5
+ opt.on('--step NUM', Integer, 'Set the step size.') do |v|
6
+ hash[:step] = v
7
+ end
8
+ end
9
+
10
+ DRbQS.define_server(:finish_exit => true) do |server, argv, opts|
11
+ tgen = DRbQS::TaskGenerator.new(:step => opts[:step])
12
+ tgen.set(:generate => 2) do
13
+ raise "Error raise"
14
+ end
15
+ server.add_task_generator(tgen)
16
+ end
@@ -0,0 +1,49 @@
1
+ class Test1
2
+ @@execute_echo_number = 0
3
+
4
+ def echo(*args)
5
+ puts "execute Test1#echo(*#{args.inspect.strip})"
6
+ @@execute_echo_number += 1
7
+ args
8
+ end
9
+
10
+ def self.get_execute_echo_number
11
+ @@execute_echo_number
12
+ end
13
+ end
14
+
15
+ class Test2
16
+
17
+ def echo_wait(wait_time)
18
+ puts "execute Test2#echo(#{wait_time})"
19
+ sleep(wait_time)
20
+ true
21
+ end
22
+ end
23
+
24
+ class Test3
25
+ def temp_file
26
+ dir = DRbQS::Temporary.directory
27
+ file1 = File.join(dir, 'hello')
28
+ open(file1, 'w') do |f|
29
+ f.puts 'hello world'
30
+ end
31
+ file2 = DRbQS::Temporary.file
32
+ open(file2, 'w') do |f|
33
+ f.puts 'temporary'
34
+ end
35
+ puts File.read(file1)
36
+ puts File.read(file2)
37
+ true
38
+ end
39
+ end
40
+
41
+ class TestSum
42
+ def calc(start_num, end_num, step)
43
+ sum = 0
44
+ start_num.step(end_num, step) do |i|
45
+ sum += i
46
+ end
47
+ sum
48
+ end
49
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/server/message.rb'
4
+
5
+ # describe DRbQS::Manage do
6
+ # before(:all) do
7
+ # @uri = "druby://:13600"
8
+ # @ts = drbqs_test_tuple_space(@uri)
9
+ # @message = DRbQS::Server::Message.new(@ts[:message])
10
+ # @manage = DRbQS::Manage.new
11
+ # end
12
+
13
+ # it "should send exit signal" do
14
+ # lambda do
15
+ # @manage.send_exit_signal(@uri)
16
+ # end.should_not raise_error
17
+ # @message.get_message.should == [:exit_server]
18
+ # end
19
+
20
+ # it "should send node exit signal" do
21
+ # node_id = 100
22
+ # lambda do
23
+ # @manage.send_node_exit_after_task(@uri, node_id)
24
+ # end.should_not raise_error
25
+ # @message.get_message.should == [:exit_after_task, node_id]
26
+ # end
27
+
28
+ # it "should get status" do
29
+ # dummy_status = "status data"
30
+ # @ts[:message].write([:status, dummy_status])
31
+ # @manage.get_status(@uri).should == dummy_status
32
+ # end
33
+ # end
@@ -0,0 +1,39 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/manage/manage'
4
+
5
+ describe DRbQS::Manage::SendSignal do
6
+ before(:all) do
7
+ @ts = Rinda::TupleSpace.new
8
+ @send_signal = DRbQS::Manage::SendSignal.new(@ts)
9
+ end
10
+
11
+ subject do
12
+ @send_signal
13
+ end
14
+
15
+ it "should get ID of sender." do
16
+ subject.sender_id.should be_an_instance_of String
17
+ end
18
+
19
+ it "should send :exit_signal." do
20
+ @send_signal.send_exit_signal
21
+ lambda do
22
+ @ts.take([:server, :exit_server, @send_signal.sender_id], 0)
23
+ end.should_not raise_error
24
+ end
25
+
26
+ it "should send :exit_after_task." do
27
+ node_id = 100
28
+ @send_signal.send_node_exit_after_task(node_id)
29
+ lambda do
30
+ @ts.take([:server, :exit_after_task, node_id], 0)
31
+ end.should_not raise_error
32
+ end
33
+
34
+ it "should send signal to get status." do
35
+ mes = 'message'
36
+ @ts.should_receive(:take).once.and_return([:status, mes])
37
+ @send_signal.get_status.should == mes
38
+ end
39
+ end