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,107 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/utility/transfer/file_transfer'
4
+
5
+ describe DRbQS::FileTransfer do
6
+ def create_file(path, str)
7
+ path = File.join(@tmp, path)
8
+ open(path, 'w') do |f|
9
+ f.puts str
10
+ end
11
+ path
12
+ end
13
+
14
+ def create_directory(path)
15
+ path = File.join(@tmp, path)
16
+ FileUtils.mkdir_p(path)
17
+ path
18
+ end
19
+
20
+ before(:all) do
21
+ @tmp = FileName.create('/tmp/drbqs_test', :directory => :self)
22
+ end
23
+
24
+ it "should be empty." do
25
+ DRbQS::FileTransfer.empty?.should be_true
26
+ end
27
+
28
+ it "should return nil when file queue is empty" do
29
+ DRbQS::FileTransfer.dequeue_all.should be_nil
30
+ end
31
+
32
+ it "should enqueue path." do
33
+ path = create_file('file1.txt', 'file1')
34
+ DRbQS::FileTransfer.enqueue(path)
35
+ DRbQS::FileTransfer.dequeue.should == path
36
+ end
37
+
38
+ it "should compress and enqueue path." do
39
+ path = create_file('file2.txt', 'file2')
40
+ DRbQS::FileTransfer.enqueue(path, :compress => true)
41
+ DRbQS::FileTransfer.dequeue.should == path + '.gz'
42
+ end
43
+
44
+ it "should rename and enqueue path." do
45
+ path = create_file('file3.txt', 'file3')
46
+ rename = 'rename.txt'
47
+ new_path = File.join(@tmp, rename)
48
+ DRbQS::FileTransfer.enqueue(path, :rename => rename)
49
+ DRbQS::FileTransfer.dequeue.should == new_path
50
+ File.exist?(new_path).should be_true
51
+ end
52
+
53
+ it "should rename to some directory." do
54
+ path = create_file('file4.txt', 'file4')
55
+ rename = 'dir/rename.txt'
56
+ new_path = File.join(@tmp, rename)
57
+ DRbQS::FileTransfer.enqueue(path, :rename => rename)
58
+ DRbQS::FileTransfer.dequeue.should == new_path
59
+ File.exist?(new_path).should be_true
60
+ end
61
+
62
+ it "should rename, compress, and enqueue path." do
63
+ path = create_file('file5.txt', 'file5')
64
+ rename = 'dir2/rename.txt'
65
+ new_path = File.join(@tmp, rename + '.gz')
66
+ DRbQS::FileTransfer.enqueue(path, :rename => rename, :compress => true)
67
+ DRbQS::FileTransfer.dequeue.should == new_path
68
+ File.exist?(new_path).should be_true
69
+ end
70
+
71
+ it "should return array of files" do
72
+ files = [create_file('file6.txt', 'file6'),
73
+ create_file('file8.txt', 'file8'),
74
+ create_file('file8.txt', 'file8')]
75
+ files.each do |path|
76
+ DRbQS::FileTransfer.enqueue(path)
77
+ end
78
+ DRbQS::FileTransfer.dequeue_all.should == files
79
+ DRbQS::FileTransfer.empty?.should be_true
80
+ end
81
+
82
+ it "should enqueue path of directory." do
83
+ path = create_directory('dir/dir1')
84
+ DRbQS::FileTransfer.enqueue(path)
85
+ DRbQS::FileTransfer.dequeue.should == path
86
+ end
87
+
88
+ it "should compress and enqueue path of directory." do
89
+ path = create_directory('dir/dir2')
90
+ file_path = create_file('dir/dir2/test.txt', 'hello world')
91
+ DRbQS::FileTransfer.enqueue(path, :compress => true)
92
+ DRbQS::FileTransfer.dequeue.should == path + '.tar.gz'
93
+ end
94
+
95
+ it "should rename, compress, and enqueue path of directory." do
96
+ path = create_directory('dir/dir3')
97
+ file_path = create_file('dir/dir3/test.txt', 'hello world')
98
+ rename = 'rename_dir'
99
+ DRbQS::FileTransfer.enqueue(path, :compress => true, :rename => rename)
100
+ DRbQS::FileTransfer.dequeue.should == File.join(@tmp, 'dir', rename + '.tar.gz')
101
+ end
102
+
103
+ after(:all) do
104
+ FileUtils.rm_r(@tmp)
105
+ end
106
+
107
+ end
@@ -1,6 +1,6 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
- require 'drbqs/task_generator'
3
+ require 'drbqs/task/task'
4
4
 
5
5
  describe DRbQS::TaskGenerator do
6
6
  def check_task_ary(tasks, num, cl = DRbQS::Task)
@@ -1,4 +1,6 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/task/task'
2
4
 
3
5
  describe DRbQS::Task do
4
6
  it "should not set hook" do
@@ -0,0 +1,39 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/utility/command_line'
4
+
5
+ describe DRbQS::CommandLineArgument do
6
+
7
+ it "should split arguments" do
8
+ ary = ['abc', 'def', '--', '123', '45', '6']
9
+ a1, a2 = DRbQS::CommandLineArgument.split_arguments(ary)
10
+ a1.should == ['abc', 'def']
11
+ a2.should == ['123', '45', '6']
12
+ end
13
+
14
+ context "when checking size of array" do
15
+ it "should return true" do
16
+ ary = [1, 2, 3]
17
+ DRbQS::CommandLineArgument.check_argument_size(ary, :>=, 1).should be_true
18
+ end
19
+
20
+ it "should return true" do
21
+ ary = [1, 2, 3]
22
+ DRbQS::CommandLineArgument.check_argument_size(ary, :>=, 1, :<=, 4).should be_true
23
+ end
24
+
25
+ it "should raise error" do
26
+ ary = [1, 2, 3]
27
+ lambda do
28
+ DRbQS::CommandLineArgument.check_argument_size(ary, :==, 9)
29
+ end.should raise_error
30
+ end
31
+
32
+ it "should raise error" do
33
+ ary = [1, 2, 3]
34
+ lambda do
35
+ DRbQS::CommandLineArgument.check_argument_size(ary, :>, 0, :<=, 2)
36
+ end.should raise_error
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'drbqs/utility/command_line'
4
+
5
+ describe DRbQS::CommandBase do
6
+ it "should define DRbQS::CommandBase.exec." do
7
+ argv = [1, 2, 3]
8
+ obj = mock
9
+ DRbQS::CommandBase.should_receive(:new).and_return(obj)
10
+ obj.should_receive(:parse_option)
11
+ obj.should_receive(:exec)
12
+ DRbQS::CommandBase.exec(argv)
13
+ end
14
+
15
+ subject do
16
+ DRbQS::CommandBase.new
17
+ end
18
+
19
+ it "should exit with 0." do
20
+ Kernel.should_receive(:exit).with(0)
21
+ subject.__send__(:exit_normally)
22
+ end
23
+
24
+ it "should exit." do
25
+ Kernel.should_receive(:exit)
26
+ subject.__send__(:exit_unusually)
27
+ end
28
+
29
+ it "should exit." do
30
+ Kernel.should_receive(:exit)
31
+ subject.__send__(:exit_invalid_option)
32
+ end
33
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ require 'drbqs/utility/command_line'
4
+
5
+ [DRbQS::CommandServer, DRbQS::CommandNode, DRbQS::CommandManage, DRbQS::CommandSSH].each do |cls|
6
+ describe cls do
7
+ it "should have defined parse_option." do
8
+ cls.method_defined?(:parse_option).should be_true
9
+ end
10
+
11
+ it "should have defined exec." do
12
+ cls.method_defined?(:exec).should be_true
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,77 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/utility/temporary'
4
+
5
+ describe DRbQS::LoggerDummy do
6
+ subject do
7
+ DRbQS::LoggerDummy.new
8
+ end
9
+
10
+ it "should respond to info." do
11
+ subject.should respond_to(:info)
12
+ end
13
+
14
+ it "should respond to warn." do
15
+ subject.should respond_to(:warn)
16
+ end
17
+
18
+ it "should respond to error." do
19
+ subject.should respond_to(:error)
20
+ end
21
+
22
+ it "should respond to debug." do
23
+ subject.should respond_to(:debug)
24
+ end
25
+ end
26
+
27
+ describe DRbQS::Misc do
28
+ context "when creating new uri" do
29
+ it "should return uri of druby." do
30
+ DRbQS::Misc.create_uri(:port => 10000).should == "druby://:10000"
31
+ end
32
+
33
+ it "should return uri of drbunix." do
34
+ tmp_path = DRbQS::Temporary.file
35
+ DRbQS::Misc.create_uri(:unix => tmp_path).should == "drbunix:#{tmp_path}"
36
+ end
37
+
38
+ it "should raise error for non-existing parent directory." do
39
+ tmp_dir = DRbQS::Temporary.file
40
+ tmp_path = File.join(tmp_dir, 'tmp_file')
41
+ lambda do
42
+ DRbQS::Misc.create_uri(:unix => tmp_path)
43
+ end.should raise_error
44
+ end
45
+
46
+ it "should raise error for existing path." do
47
+ tmp_path = DRbQS::Temporary.file
48
+ open(tmp_path, 'w') do |f|
49
+ f.puts 'hello world'
50
+ end
51
+ lambda do
52
+ DRbQS::Misc.create_uri(:unix => tmp_path)
53
+ end.should raise_error
54
+ end
55
+
56
+ after(:all) do
57
+ DRbQS::Temporary.delete_all
58
+ end
59
+ end
60
+
61
+ it "should create logger." do
62
+ logger = DRbQS::Misc.create_logger(File.join(HOME_FOR_SPEC, 'tmp.log'), Logger::INFO)
63
+ logger.should be_an_instance_of(Logger)
64
+ end
65
+
66
+ it "should return time string for history." do
67
+ DRbQS::Misc.time_to_history_string(Time.now).should be_an_instance_of String
68
+ end
69
+
70
+ it "should return ramdom key" do
71
+ a = DRbQS::Misc.random_key
72
+ b = DRbQS::Misc.random_key
73
+ a.should be_an_instance_of String
74
+ b.should be_an_instance_of String
75
+ a.should_not == b
76
+ end
77
+ end
@@ -0,0 +1,59 @@
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
+ subject do
6
+ DRbQS.class_variable_get(:@@server_def)
7
+ end
8
+
9
+ it "should define server." do
10
+ lambda do
11
+ DRbQS.define_server do |server, argv, opts|
12
+ server.add_hook(:finish) do |serv|
13
+ serv.exit
14
+ end
15
+ end
16
+ end.should change { subject.instance_variable_get(:@default_server_opts) }.from(nil).to({})
17
+ end
18
+
19
+ it "should set parser of options." do
20
+ lambda do
21
+ DRbQS.option_parser do |opt, hash|
22
+ opt.on('--test') do |v|
23
+ hash[:test] = true
24
+ end
25
+ end
26
+ end.should change { subject.instance_variable_get(:@option_parse) }.from(nil)
27
+ end
28
+
29
+ it "should parse options." do
30
+ lambda do
31
+ DRbQS.parse_option(['--test'])
32
+ end.should change { subject.instance_variable_get(:@argv) }.from(nil)
33
+ end
34
+
35
+ it "should start server." do
36
+ DRbQS::Server.should_receive(:new)
37
+ begin
38
+ # After DRbQS::Server.new returns nil, raise error
39
+ DRbQS.start_server(:uri => 'druby://localhost:13500')
40
+ rescue
41
+ end
42
+ end
43
+
44
+ it "should return empty help message" do
45
+ DRbQS.clear_definition
46
+ DRbQS.option_help_message.should be_nil
47
+ end
48
+
49
+ it "should return help message." do
50
+ DRbQS.option_parser do |opt, hash|
51
+ opt.on('--test') do |v|
52
+ hash[:test] = true
53
+ end
54
+ end
55
+ DRbQS.option_help_message.should be_an_instance_of String
56
+ end
57
+ end
58
+
59
+ end
@@ -0,0 +1,39 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'drbqs/utility/temporary'
4
+
5
+ describe DRbQS::Temporary do
6
+ before(:all) do
7
+ DRbQS::Temporary.file
8
+ end
9
+
10
+ it "should create base directory." do
11
+ File.exist?(DRbQS::Temporary.root).should be_true
12
+ end
13
+
14
+ it "should create empty directory." do
15
+ dir = DRbQS::Temporary.directory
16
+ File.directory?(dir).should be_true
17
+ Dir.entries(dir).should have(2).items
18
+ end
19
+
20
+ it "should return new path of file." do
21
+ path = DRbQS::Temporary.file
22
+ File.exist?(path).should_not be_true
23
+ open(path, 'w') do |f|
24
+ f.puts 'hello'
25
+ end
26
+ end
27
+
28
+ it "should make directory empty." do
29
+ Dir.entries(DRbQS::Temporary.root).size.should > 2
30
+ DRbQS::Temporary.delete
31
+ Dir.entries(DRbQS::Temporary.root).should have(2).items
32
+ end
33
+
34
+ it "should all directories." do
35
+ root = DRbQS::Temporary.root
36
+ DRbQS::Temporary.delete_all
37
+ File.exist?(root).should_not be_true
38
+ end
39
+ end