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.
Files changed (101) hide show
  1. data/VERSION +1 -1
  2. data/bin/drbqs-execute +6 -0
  3. data/bin/drbqs-manage +2 -2
  4. data/bin/drbqs-node +2 -2
  5. data/bin/drbqs-server +2 -2
  6. data/bin/drbqs-ssh +2 -2
  7. data/drbqs.gemspec +53 -16
  8. data/example/error_server/error.rb +6 -0
  9. data/example/error_server/server_def.rb +7 -0
  10. data/example/{error → error_task}/error.rb +0 -0
  11. data/example/{error → error_task}/server_def.rb +0 -0
  12. data/example/sum2/execute_def.rb +27 -0
  13. data/lib/drbqs/command_line/argument.rb +29 -0
  14. data/lib/drbqs/command_line/command_base.rb +81 -0
  15. data/lib/drbqs/command_line/command_execute.rb +33 -0
  16. data/lib/drbqs/command_line/command_line.rb +19 -0
  17. data/lib/drbqs/command_line/command_manage.rb +34 -0
  18. data/lib/drbqs/command_line/command_node.rb +26 -0
  19. data/lib/drbqs/command_line/command_server.rb +41 -0
  20. data/lib/drbqs/command_line/command_ssh.rb +51 -0
  21. data/lib/drbqs/command_line/option_setting.rb +42 -0
  22. data/lib/drbqs/execute/process_define.rb +213 -0
  23. data/lib/drbqs/execute/register.rb +147 -0
  24. data/lib/drbqs/{utility → execute}/server_define.rb +7 -14
  25. data/lib/drbqs/manage/execute_node.rb +4 -2
  26. data/lib/drbqs/manage/manage.rb +23 -16
  27. data/lib/drbqs/manage/send_signal.rb +31 -4
  28. data/lib/drbqs/manage/ssh_execute.rb +50 -6
  29. data/lib/drbqs/manage/ssh_shell.rb +95 -50
  30. data/lib/drbqs/node/connection.rb +1 -1
  31. data/lib/drbqs/node/node.rb +67 -17
  32. data/lib/drbqs/node/state.rb +109 -0
  33. data/lib/drbqs/node/task_client.rb +7 -7
  34. data/lib/drbqs/server/history.rb +16 -0
  35. data/lib/drbqs/server/message.rb +80 -15
  36. data/lib/drbqs/server/node_list.rb +16 -3
  37. data/lib/drbqs/server/prof.rb +48 -0
  38. data/lib/drbqs/server/queue.rb +20 -2
  39. data/lib/drbqs/server/server.rb +112 -70
  40. data/lib/drbqs/server/server_hook.rb +26 -6
  41. data/lib/drbqs/server/test/node.rb +34 -0
  42. data/lib/drbqs/server/test/server.rb +74 -0
  43. data/lib/drbqs/setting/base.rb +120 -0
  44. data/lib/drbqs/setting/data_container.rb +39 -0
  45. data/lib/drbqs/setting/execute.rb +71 -0
  46. data/lib/drbqs/setting/manage.rb +163 -0
  47. data/lib/drbqs/setting/node.rb +84 -0
  48. data/lib/drbqs/setting/server.rb +230 -0
  49. data/lib/drbqs/setting/setting.rb +14 -0
  50. data/lib/drbqs/setting/source.rb +220 -0
  51. data/lib/drbqs/setting/ssh.rb +165 -0
  52. data/lib/drbqs/task/task_generator.rb +4 -2
  53. data/lib/drbqs/utility/misc.rb +15 -1
  54. data/lib/drbqs/utility/temporary.rb +4 -2
  55. data/lib/drbqs.rb +3 -2
  56. data/spec/command_line/command_base_spec.rb +47 -0
  57. data/spec/{utility/command_line → command_line}/commands_spec.rb +3 -3
  58. data/spec/command_line/option_setting_spec.rb +29 -0
  59. data/spec/execute/def/execute1.rb +24 -0
  60. data/spec/execute/def/no_def.rb +2 -0
  61. data/spec/execute/process_define_spec.rb +167 -0
  62. data/spec/execute/register_spec.rb +77 -0
  63. data/spec/{utility → execute}/server_define_spec.rb +0 -0
  64. data/spec/integration_test/01_basic_usage_spec.rb +1 -1
  65. data/spec/integration_test/02_use_generator_spec.rb +1 -1
  66. data/spec/integration_test/03_use_temporary_file_spec.rb +1 -1
  67. data/spec/integration_test/04_use_unix_domain_spec.rb +1 -1
  68. data/spec/integration_test/05_server_exit_signal_spec.rb +1 -1
  69. data/spec/integration_test/06_node_exit_after_task_spec.rb +1 -1
  70. data/spec/integration_test/07_command_server_with_node_spec.rb +19 -16
  71. data/spec/integration_test/08_shutdown_unused_nodes_spec.rb +38 -0
  72. data/spec/integration_test/09_server_process_data_spec.rb +74 -0
  73. data/spec/integration_test/10_test_server_spec.rb +18 -0
  74. data/spec/integration_test/definition/task_obj_definition.rb +14 -0
  75. data/spec/manage/send_signal_spec.rb +8 -0
  76. data/spec/manage/ssh_shell_spec.rb +1 -1
  77. data/spec/node/state_spec.rb +148 -0
  78. data/spec/node/task_client_spec.rb +15 -0
  79. data/spec/server/history_spec.rb +51 -20
  80. data/spec/server/message_spec.rb +7 -2
  81. data/spec/server/node_list_spec.rb +1 -1
  82. data/spec/server/queue_spec.rb +93 -4
  83. data/spec/server/server_hook_spec.rb +62 -0
  84. data/spec/setting/base_spec.rb +35 -0
  85. data/spec/setting/data_container_spec.rb +92 -0
  86. data/spec/setting/execute_spec.rb +51 -0
  87. data/spec/setting/manage_spec.rb +63 -0
  88. data/spec/setting/node_spec.rb +43 -0
  89. data/spec/setting/server_spec.rb +46 -0
  90. data/spec/setting/source_spec.rb +245 -0
  91. data/spec/spec_helper.rb +17 -10
  92. data/spec/utility/argument_spec.rb +7 -7
  93. metadata +179 -146
  94. data/lib/drbqs/utility/argument.rb +0 -27
  95. data/lib/drbqs/utility/command_line/command_base.rb +0 -27
  96. data/lib/drbqs/utility/command_line/command_manage.rb +0 -121
  97. data/lib/drbqs/utility/command_line/command_node.rb +0 -103
  98. data/lib/drbqs/utility/command_line/command_server.rb +0 -165
  99. data/lib/drbqs/utility/command_line/command_ssh.rb +0 -126
  100. data/lib/drbqs/utility/command_line.rb +0 -15
  101. data/spec/utility/command_line/command_base_spec.rb +0 -33
@@ -0,0 +1,167 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/execute/process_define'
4
+
5
+ describe DRbQS::ProcessDefinition do
6
+ def definition_file(name)
7
+ File.join(File.dirname(__FILE__), 'def', name)
8
+ end
9
+
10
+ context "when creating without default process names" do
11
+ subject do
12
+ DRbQS::ProcessDefinition.new(nil, nil, nil)
13
+ end
14
+
15
+ before(:all) do
16
+ subject.load(definition_file('execute1.rb'))
17
+ @info = subject.information
18
+ end
19
+
20
+ it "should get server list." do
21
+ info = @info[:server].sort_by { |a| a [0] }
22
+ info.should == [[:server_local, :server], [:server_ssh, :ssh]].sort_by { |a| a [0] }
23
+ end
24
+
25
+ it "should get node list." do
26
+ info = @info[:node].sort_by { |a| a[0] }
27
+ info.should == [[:node_local, :node], [:node_ssh, :ssh]].sort_by { |a| a[0] }
28
+ end
29
+
30
+ it "should get default server." do
31
+ @info[:default][:server].should == :server_local
32
+ end
33
+
34
+ it "should get default nodes." do
35
+ info = @info[:default][:node].sort
36
+ info.should == @info[:node].map { |a| a[0] }.sort
37
+ end
38
+
39
+ it "should get default port." do
40
+ @info[:default][:port].should be_an_instance_of Fixnum
41
+ end
42
+
43
+ it "should get information as string." do
44
+ subject.information_string.should be_an_instance_of String
45
+ end
46
+
47
+ it "should get usage." do
48
+ subject.usage.should be_an_instance_of String
49
+ end
50
+
51
+ after(:all) do
52
+ DRbQS.clear_definition
53
+ end
54
+ end
55
+
56
+ context "when there is no definition" do
57
+ subject do
58
+ DRbQS::ProcessDefinition.new(nil, nil, nil)
59
+ end
60
+
61
+ before(:all) do
62
+ subject.load(definition_file('no_def.rb'))
63
+ @info = subject.information
64
+ end
65
+
66
+ it "should get server list." do
67
+ @info[:server].should be_empty
68
+ end
69
+
70
+ it "should get node list." do
71
+ @info[:node].should be_empty
72
+ end
73
+
74
+ it "should get default server." do
75
+ @info[:default][:server].should be_nil
76
+ end
77
+
78
+ it "should get default nodes." do
79
+ @info[:default][:node].should be_empty
80
+ end
81
+
82
+ it "should get default port." do
83
+ @info[:default][:port].should be_an_instance_of Fixnum
84
+ end
85
+
86
+ it "should get information as string." do
87
+ subject.information_string.should be_an_instance_of String
88
+ end
89
+
90
+ it "should get usage." do
91
+ subject.usage.should be_an_instance_of String
92
+ end
93
+
94
+ after(:all) do
95
+ DRbQS.clear_definition
96
+ end
97
+ end
98
+
99
+ context "when execute all nodes" do
100
+ before(:all) do
101
+ @port = 11111
102
+ @hostname = 'localhost' # defined in execute1.rb
103
+ @tmp = '/tmp/drbqs_tmp_log' # defined in execute1.rb
104
+ @process_def = DRbQS::ProcessDefinition.new(nil, nil, @port)
105
+ @process_def.load(definition_file('execute1.rb'))
106
+ @server_setting = subject.__send__(:get_server_setting)[:setting]
107
+ @node_local_setting = subject.__send__(:get_node_data, :node_local)[:setting]
108
+ @node_ssh_setting = subject.__send__(:get_node_data, :node_ssh)[:setting]
109
+ end
110
+
111
+ subject do
112
+ @process_def
113
+ end
114
+
115
+ it "should check port number of server." do
116
+ @server_setting.should_receive(:exec)
117
+ subject.execute_server([])
118
+ @server_setting.get_first(:port).should == @port
119
+ end
120
+
121
+ it "should check port number set in node." do
122
+ @node_local_setting.should_receive(:exec)
123
+ @node_ssh_setting.should_receive(:exec)
124
+ subject.execute_node
125
+ uri = "druby://#{@hostname}:#{@port}"
126
+ @node_local_setting.value.argument.should == [uri]
127
+ @node_ssh_setting.mode_setting.value.argument == [uri]
128
+ end
129
+
130
+ after(:all) do
131
+ FileUtils.rm_r(@tmp)
132
+ end
133
+ end
134
+
135
+ context "when execute a specified node" do
136
+ before(:all) do
137
+ @port = DRbQS::ROOT_DEFAULT_PORT
138
+ @hostname = 'localhost' # defined in execute1.rb
139
+ @tmp = '/tmp/drbqs_tmp_log' # defined in execute1.rb
140
+ @process_def = DRbQS::ProcessDefinition.new(nil, [:node_local], nil)
141
+ @process_def.load(definition_file('execute1.rb'))
142
+ @server_setting = subject.__send__(:get_server_setting)[:setting]
143
+ @node_local_setting = subject.__send__(:get_node_data, :node_local)[:setting]
144
+ end
145
+
146
+ subject do
147
+ @process_def
148
+ end
149
+
150
+ it "should check port number of server." do
151
+ @server_setting.should_receive(:exec)
152
+ subject.execute_server([])
153
+ @server_setting.get_first(:port).should == @port
154
+ end
155
+
156
+ it "should check port number set in node." do
157
+ @node_local_setting.should_receive(:exec)
158
+ subject.execute_node
159
+ uri = "druby://#{@hostname}:#{@port}"
160
+ @node_local_setting.value.argument.should == [uri]
161
+ end
162
+
163
+ after(:all) do
164
+ FileUtils.rm_r(@tmp)
165
+ end
166
+ end
167
+ end
@@ -0,0 +1,77 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/execute/process_define'
4
+
5
+ describe DRbQS::ProcessDefinition::Register do
6
+ subject do
7
+ DRbQS::ProcessDefinition::Register.new
8
+ end
9
+
10
+ context "when registering a server" do
11
+ it "should define a server on localhost." do
12
+ load_file = 'file.rb'
13
+ subject.register_server(:server1) do |server|
14
+ server.load load_file
15
+ end
16
+ name, data = subject.__server__.assoc(:server1)
17
+ data[:type].should == :server
18
+ data[:setting].get(:load).should == [load_file]
19
+ end
20
+
21
+ it "should define a server over ssh." do
22
+ dest = "user@example.com"
23
+ load_file = 'file.rb'
24
+ subject.register_server(:server1) do |server, ssh|
25
+ server.load load_file
26
+ ssh.connect dest
27
+ end
28
+ name, data = subject.__server__.assoc(:server1)
29
+ data[:type].should == :ssh
30
+ setting = data[:setting]
31
+ setting.get(:connect).should == [dest]
32
+ setting.mode_setting.get(:load).should == [load_file]
33
+ end
34
+ end
35
+
36
+ context "when registering a node" do
37
+ it "should define a node on localhost." do
38
+ uri = 'druby://:12345'
39
+ subject.register_node(:node1) do |node|
40
+ node.connect uri
41
+ end
42
+ name, data = subject.__node__.assoc(:node1)
43
+ data[:type].should == :node
44
+ data[:setting].get(:connect).should == [uri]
45
+ end
46
+
47
+ it "should define a node over ssh." do
48
+ dest = "user@example.com"
49
+ uri = 'druby://:12345'
50
+ subject.register_node(:node2) do |node, ssh|
51
+ node.connect uri
52
+ ssh.connect dest
53
+ end
54
+ name, data = subject.__node__.assoc(:node2)
55
+ data[:type].should == :ssh
56
+ setting = data[:setting]
57
+ setting.get(:connect).should == [dest]
58
+ setting.mode_setting.get(:connect).should == [uri]
59
+ end
60
+ end
61
+
62
+ context "when setting default" do
63
+ it "should set default server and default port." do
64
+ subject.default(:server => :server1, :port => 1234)
65
+ h = subject.__default__
66
+ h[:server].should == :server1
67
+ h[:port].should == 1234
68
+ end
69
+
70
+ it "should set default server and default port with conversion." do
71
+ subject.default(:server => 'server2', :port => '12345')
72
+ h = subject.__default__
73
+ h[:server].should == :server2
74
+ h[:port].should == 12345
75
+ end
76
+ end
77
+ end
File without changes
@@ -8,7 +8,7 @@ describe DRbQS do
8
8
  @tasks = 5.times.map do |i|
9
9
  DRbQS::Task.new(Test1.new, :echo, [i])
10
10
  end
11
- @process_id, @uri = drbqs_fork_server(13501, @tasks)
11
+ @process_id, @uri = drbqs_fork_server(14010, :task => @tasks)
12
12
  @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
13
13
  end
14
14
 
@@ -13,7 +13,7 @@ describe DRbQS do
13
13
  end
14
14
  end
15
15
  end
16
- @process_id, @uri = drbqs_fork_server(13501, @task_generators)
16
+ @process_id, @uri = drbqs_fork_server(14020, :task => @task_generators)
17
17
  @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
18
18
  end
19
19
 
@@ -6,7 +6,7 @@ require_relative 'definition/task_obj_definition.rb'
6
6
  describe DRbQS do
7
7
  before(:all) do
8
8
  @tasks = [DRbQS::Task.new(Test3.new, :temp_file)]
9
- @process_id, @uri = drbqs_fork_server(13503, @tasks)
9
+ @process_id, @uri = drbqs_fork_server(14030, :task => @tasks)
10
10
  @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
11
11
  end
12
12
 
@@ -9,7 +9,7 @@ describe DRbQS::Server do
9
9
  DRbQS::Task.new(Test1.new, :echo, [i])
10
10
  end
11
11
  path = "/tmp/drbqs"
12
- @process_id, @uri = drbqs_fork_server(path, @tasks)
12
+ @process_id, @uri = drbqs_fork_server(path, :task => @tasks)
13
13
  @manage = DRbQS::Manage.new(:uri => @uri)
14
14
  @node = DRbQS::Node.new(@uri, :log_file => $stdout, :continue => true)
15
15
  end
@@ -8,7 +8,7 @@ describe DRbQS do
8
8
  @tasks = 3.times.map do |i|
9
9
  DRbQS::Task.new(Test1.new, :echo, [i])
10
10
  end
11
- @process_id, @uri = drbqs_fork_server(13501, @tasks)
11
+ @process_id, @uri = drbqs_fork_server(14050, :task => @tasks)
12
12
  @manage = DRbQS::Manage.new(:uri => @uri)
13
13
  end
14
14
 
@@ -9,7 +9,7 @@ describe DRbQS::Server do
9
9
  @tasks = 10.times.map do |i|
10
10
  DRbQS::Task.new(Test2.new, :echo_wait, [@wait])
11
11
  end
12
- @server_process_id, @uri = drbqs_fork_server(13501, @tasks, :continue => true)
12
+ @server_process_id, @uri = drbqs_fork_server(14060, :task => @tasks, :continue => true)
13
13
  @manage = DRbQS::Manage.new(:uri => @uri)
14
14
  end
15
15
 
@@ -1,15 +1,15 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  require 'drbqs/task/task'
4
- require 'drbqs/utility/command_line'
4
+ require 'drbqs/command_line/command_line'
5
5
 
6
6
  describe DRbQS do
7
7
  context "when server is executed with nodes." do
8
8
  it "should exit normally." do
9
9
  @path = File.expand_path(File.join(File.dirname(__FILE__), 'definition/server01.rb'))
10
- @port = 13600
10
+ @port = 14070
11
11
  @pid_server = fork do
12
- DRbQS::CommandServer.exec([@path, '-p', @port.to_s, '--execute-node', '2'])
12
+ DRbQS::Command::Server.exec([@path, '-p', @port.to_s, '--execute-node', '2'])
13
13
  end
14
14
  lambda do
15
15
  i = 0
@@ -25,20 +25,23 @@ describe DRbQS do
25
25
 
26
26
  it "should raise error in server." do
27
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
28
+ @port = 14071
32
29
  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
30
+ DRbQS::Command::Server.exec([@path, '-p', @port.to_s, '--execute-node', '2'])
31
+ end.should raise_error
32
+ # @pid_server = fork do
33
+ # DRbQS::Command::Server.exec([@path, '-p', @port.to_s, '--execute-node', '2'])
34
+ # end
35
+ # lambda do
36
+ # i = 0
37
+ # until exit_data = Process.waitpid2(@pid_server, Process::WNOHANG)
38
+ # sleep(1)
39
+ # if i > 10
40
+ # raise "Server can not stop within 10 seconds."
41
+ # end
42
+ # end
43
+ # exit_data[1].success?.should_not be_true
44
+ # end.should_not raise_error
42
45
  end
43
46
  end
44
47
  end
@@ -0,0 +1,38 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/task/task'
4
+ require 'drbqs/command_line/command_line'
5
+
6
+ describe DRbQS::Server do
7
+ before(:all) do
8
+ @max_wait_time = 10
9
+ @server_process_id, @uri = drbqs_fork_server(14080, :continue => true, :opts => { :shutdown_unused_nodes => true })
10
+ @manage = DRbQS::Manage.new(:uri => @uri)
11
+ end
12
+
13
+ it "should send node exit" do
14
+ execute_node = DRbQS::ExecuteNode.new(@uri, nil, nil)
15
+ execute_node.execute(1)
16
+ client_process_id = execute_node.pid[0]
17
+ th = Process.detach(client_process_id)
18
+ lambda do
19
+ @max_wait_time.times do |i|
20
+ sleep(1)
21
+ unless th.alive?
22
+ break
23
+ end
24
+ if i == (@max_wait_time - 1)
25
+ raise "Client does not exit."
26
+ end
27
+ end
28
+ end.should_not raise_error
29
+ end
30
+
31
+ after(:all) do
32
+ @manage.send_exit_signal
33
+ lambda do
34
+ drbqs_wait_kill_server(@server_process_id)
35
+ end.should_not raise_error
36
+ end
37
+
38
+ end
@@ -0,0 +1,74 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/command_line/command_line'
4
+ require 'drbqs/task/task'
5
+ require 'drbqs/utility/temporary'
6
+
7
+ describe DRbQS::Server do
8
+ def wait_file_creation(path)
9
+ @max_wait_time.times do |i|
10
+ if File.exist?(path)
11
+ break
12
+ end
13
+ sleep(1)
14
+ end
15
+ end
16
+
17
+ before(:all) do
18
+ @file = DRbQS::Temporary.file
19
+ @initial_data = ['abc', 'def']
20
+ @max_wait_time = 10
21
+ @server_process_id, @uri = drbqs_fork_server(14090, :continue => true) do |server|
22
+ server.add_hook(:process_data) do |srv, data|
23
+ open(@file, 'a+') do |f|
24
+ f.print data
25
+ end
26
+ end
27
+ server.set_data(*@initial_data)
28
+ end
29
+ @manage = DRbQS::Manage.new(:uri => @uri)
30
+ end
31
+
32
+ it "should process initial data." do
33
+ wait_file_creation(@file)
34
+ File.read(@file).should == 'abcdef'
35
+ end
36
+
37
+ it "should save to the file." do
38
+ data = 'hello world'
39
+ @manage.send_data(data)
40
+ wait_file_creation(@file)
41
+ File.read(@file).should == data
42
+ end
43
+
44
+ it "should send string by command." do
45
+ data = 'send command'
46
+ fork do
47
+ DRbQS::Command::Manage.exec(['send', 'string', @uri, data])
48
+ end
49
+ wait_file_creation(@file)
50
+ File.read(@file).should == data
51
+ end
52
+
53
+ it "should send file by command." do
54
+ path = File.expand_path(__FILE__)
55
+ fork do
56
+ DRbQS::Command::Manage.exec(['send', 'file', @uri, path])
57
+ end
58
+ wait_file_creation(@file)
59
+ File.read(@file).should == File.read(path)
60
+ end
61
+
62
+ after(:each) do
63
+ FileUtils.rm(@file) if File.exist?(@file)
64
+ end
65
+
66
+ after(:all) do
67
+ DRbQS::Temporary.delete_all
68
+ @manage.send_exit_signal
69
+ lambda do
70
+ drbqs_wait_kill_server(@server_process_id)
71
+ end.should_not raise_error
72
+ end
73
+
74
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/server/test/server'
4
+ require_relative 'definition/task_obj_definition.rb'
5
+
6
+ describe DRbQS::Test::Server do
7
+ it "should execute as test." do
8
+ DRbQS.define_server do |server, argv, opts|
9
+ 5.times do |i|
10
+ server.queue.add(DRbQS::Task.new(TestCount.new, :calc))
11
+ end
12
+ end
13
+ server = DRbQS.create_test_server({})
14
+ data = server.test_exec
15
+ data.should be_an_instance_of Hash
16
+ TestCount.get.should == 5
17
+ end
18
+ end
@@ -47,3 +47,17 @@ class TestSum
47
47
  sum
48
48
  end
49
49
  end
50
+
51
+ class TestCount
52
+ @@count = 0
53
+
54
+ def calc
55
+ @@count += 1
56
+ end
57
+
58
+ def self.get
59
+ n = @@count
60
+ @@count = 0
61
+ n
62
+ end
63
+ end
@@ -36,4 +36,12 @@ describe DRbQS::Manage::SendSignal do
36
36
  @ts.should_receive(:take).once.and_return([:status, mes])
37
37
  @send_signal.get_status.should == mes
38
38
  end
39
+
40
+ it "should send data." do
41
+ data = 'hello world'
42
+ @send_signal.send_data(data)
43
+ lambda do
44
+ @ts.take([:server, :new_data, data], 0)
45
+ end.should_not raise_error
46
+ end
39
47
  end
@@ -12,7 +12,7 @@ describe DRbQS::Manage::SSHShell do
12
12
  end
13
13
 
14
14
  it "should split destination including directory" do
15
- ssh = DRbQS::Manage::SSHShell.new('user@hostname:22', :dir => '/path/to/directory')
15
+ ssh = DRbQS::Manage::SSHShell.new('user@hostname:22', :directory => '/path/to/directory')
16
16
  ssh.user.should == 'user'
17
17
  ssh.host.should == 'hostname'
18
18
  ssh.port.should == 22
@@ -0,0 +1,148 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe DRbQS::Node::State do
4
+ subject do
5
+ DRbQS::Node::State.new(:wait)
6
+ end
7
+
8
+ context "when state is :wait" do
9
+ before(:each) do
10
+ subject.change(:wait)
11
+ end
12
+
13
+ it "should change to :wait." do
14
+ lambda do
15
+ subject.change_to_wait
16
+ end.should_not change { subject.state }
17
+ end
18
+
19
+ it "should change to :sleep." do
20
+ lambda do
21
+ subject.change_to_sleep
22
+ end.should change { subject.state }.from(:wait).to(:sleep)
23
+ end
24
+
25
+ it "should change to :calculate." do
26
+ lambda do
27
+ subject.change_to_calculate
28
+ end.should change { subject.state }.from(:wait).to(:calculate)
29
+ end
30
+ end
31
+
32
+ context "when state is :sleep" do
33
+ before(:each) do
34
+ subject.change(:sleep)
35
+ end
36
+
37
+ it "should change to :sleep." do
38
+ lambda do
39
+ subject.change_to_wait
40
+ end.should change { subject.state }.from(:sleep).to(:wait)
41
+ end
42
+
43
+ it "should change to :sleep." do
44
+ lambda do
45
+ subject.change_to_sleep
46
+ end.should_not change { subject.state }
47
+ end
48
+
49
+ it "should change to :calculate." do
50
+ lambda do
51
+ subject.change_to_calculate
52
+ end.should change { subject.state }.from(:sleep).to(:calculate)
53
+ end
54
+ end
55
+
56
+ context "when state is :calculate" do
57
+ before(:each) do
58
+ subject.change(:calculate)
59
+ end
60
+
61
+ it "should change to :sleep." do
62
+ lambda do
63
+ subject.change_to_wait
64
+ end.should_not change { subject.state }
65
+ end
66
+
67
+ it "should change to :sleep." do
68
+ lambda do
69
+ subject.change_to_sleep
70
+ end.should_not change { subject.state }
71
+ end
72
+
73
+ it "should change to :calculate." do
74
+ lambda do
75
+ subject.change_to_calculate
76
+ end.should_not change { subject.state }
77
+ end
78
+ end
79
+
80
+ context "when getting load average." do
81
+ it "should get load average." do
82
+ File.stub(:read).with(DRbQS::Node::State::LOADAVG_PATH).and_return('0.00 0.01 0.05 1/404 5903')
83
+ ary = subject.__send__(:get_load_average)
84
+ ary.should be_an_instance_of Array
85
+ ary.should have(3).items
86
+ ary.all? do |num|
87
+ Float === num
88
+ end.should be_true
89
+ end
90
+ end
91
+
92
+ context "when setting load average" do
93
+ subject do
94
+ DRbQS::Node::State.new(:wait, :max_loadavg => 2)
95
+ end
96
+
97
+ it "should be true" do
98
+ subject.stub(:get_load_average).and_return([2.0, 2,0, 2.0])
99
+ subject.system_busy?.should be_true
100
+ end
101
+
102
+ it "should be nil" do
103
+ subject.stub(:get_load_average).and_return([1.0, 1,0, 1.0])
104
+ subject.system_busy?.should be_nil
105
+ end
106
+ end
107
+
108
+ context "when changing state to finish calculating" do
109
+ before(:each) do
110
+ subject.change(:calculate)
111
+ end
112
+
113
+ it "should change to :wait." do
114
+ lambda do
115
+ subject.change_to_finish_calculating
116
+ end.should change { subject.state }.from(:calculate).to(:wait)
117
+ end
118
+
119
+ it "should change to :sleep." do
120
+ subject.change_to_sleep
121
+ lambda do
122
+ subject.change_to_finish_calculating
123
+ end.should change { subject.state }.from(:calculate).to(:sleep)
124
+ end
125
+ end
126
+
127
+ context "when setting auto wakeup" do
128
+ subject do
129
+ DRbQS::Node::State.new(:wait, :sleep_time => 0)
130
+ end
131
+
132
+ it "should do nothing." do
133
+ subject.stub(:system_busy?).and_return(nil)
134
+ subject.change(:wait)
135
+ lambda do
136
+ subject.wakeup_automatically_for_unbusy_system
137
+ end.should_not change { subject.state }
138
+ end
139
+
140
+ it "should do nothing." do
141
+ subject.stub(:system_busy?).and_return(nil)
142
+ subject.sleep_with_auto_wakeup
143
+ lambda do
144
+ subject.wakeup_automatically_for_unbusy_system
145
+ end.should change { subject.state }.from(:sleep).to(:wait)
146
+ end
147
+ end
148
+ end