rims 0.2.2 → 0.2.3
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.
- checksums.yaml +4 -4
- data/.gitignore +19 -17
- data/ChangeLog +36 -0
- data/Rakefile +70 -1
- data/lib/rims.rb +3 -5
- data/lib/rims/auth.rb +5 -7
- data/lib/rims/cmd.rb +758 -188
- data/lib/rims/error.rb +8 -10
- data/lib/rims/kvs.rb +4 -0
- data/lib/rims/lock.rb +4 -1
- data/lib/rims/protocol.rb +7 -1
- data/lib/rims/protocol/decoder.rb +24 -7
- data/lib/rims/protocol/parser.rb +1 -1
- data/lib/rims/service.rb +953 -0
- data/lib/rims/version.rb +1 -1
- data/rims.gemspec +2 -0
- data/test/cmd/test_command.rb +999 -0
- data/test/test_auth.rb +3 -1
- data/test/test_cmd.rb +36 -0
- data/test/test_error.rb +22 -78
- data/test/test_protocol_auth.rb +3 -1
- data/test/test_protocol_decoder.rb +6 -3
- data/test/test_service.rb +1120 -0
- metadata +38 -11
- data/lib/rims/daemon.rb +0 -338
- data/lib/rims/server.rb +0 -567
- data/test/test_config.rb +0 -533
- data/test/test_daemon_status_file.rb +0 -169
- data/test/test_daemon_waitpid.rb +0 -72
@@ -1,169 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'fileutils'
|
4
|
-
require 'pp' if $DEBUG
|
5
|
-
require 'rims'
|
6
|
-
require 'test/unit'
|
7
|
-
|
8
|
-
module RIMS::Test
|
9
|
-
class DaemonStatusFileTest < Test::Unit::TestCase
|
10
|
-
def setup
|
11
|
-
@stat_path = "status.#{$$}"
|
12
|
-
@stat_file = RIMS::Daemon.new_status_file(@stat_path, exclusive: true)
|
13
|
-
@read_file = RIMS::Daemon.new_status_file(@stat_path, exclusive: false)
|
14
|
-
@ready_spin_lock = "ready_spin_lock.#{$$}"
|
15
|
-
@final_spin_lock = "final_spin_lock.#{$$}"
|
16
|
-
end
|
17
|
-
|
18
|
-
def teardown
|
19
|
-
FileUtils.rm_f(@stat_path)
|
20
|
-
FileUtils.rm_f(@ready_spin_lock)
|
21
|
-
FileUtils.rm_f(@final_spin_lock)
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_lock_status
|
25
|
-
@stat_file.open{
|
26
|
-
assert_equal(false, @stat_file.locked?)
|
27
|
-
@stat_file.synchronize{
|
28
|
-
assert_equal(true, @stat_file.locked?)
|
29
|
-
}
|
30
|
-
assert_equal(false, @stat_file.locked?)
|
31
|
-
}
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_should_be_locked
|
35
|
-
assert_raise(RuntimeError) {
|
36
|
-
@stat_file.should_be_locked
|
37
|
-
}
|
38
|
-
|
39
|
-
@stat_file.open{
|
40
|
-
@stat_file.synchronize{
|
41
|
-
@stat_file.should_be_locked
|
42
|
-
}
|
43
|
-
}
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_should_not_be_locked
|
47
|
-
@stat_file.should_not_be_locked
|
48
|
-
|
49
|
-
@stat_file.open{
|
50
|
-
@stat_file.synchronize{
|
51
|
-
assert_raise(RuntimeError) {
|
52
|
-
@stat_file.should_not_be_locked
|
53
|
-
}
|
54
|
-
}
|
55
|
-
}
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_lock_guard
|
59
|
-
@stat_file.open{
|
60
|
-
@stat_file.synchronize{
|
61
|
-
assert_raise(RuntimeError) {
|
62
|
-
@stat_file.lock
|
63
|
-
}
|
64
|
-
}
|
65
|
-
}
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_unlock_guard
|
69
|
-
@stat_file.open{
|
70
|
-
assert_raise(RuntimeError) {
|
71
|
-
@stat_file.unlock
|
72
|
-
}
|
73
|
-
}
|
74
|
-
end
|
75
|
-
|
76
|
-
def another_process_exclusive_lock(write_text: nil)
|
77
|
-
FileUtils.touch(@ready_spin_lock)
|
78
|
-
FileUtils.touch(@final_spin_lock)
|
79
|
-
|
80
|
-
pid = Process.fork{
|
81
|
-
lock_file = RIMS::Daemon.new_status_file(@stat_path, exclusive: true)
|
82
|
-
lock_file.open{
|
83
|
-
lock_file.synchronize{
|
84
|
-
lock_file.write(write_text) if write_text
|
85
|
-
FileUtils.rm_f(@ready_spin_lock)
|
86
|
-
while (File.exist? @final_spin_lock)
|
87
|
-
# nothing to do.
|
88
|
-
end
|
89
|
-
}
|
90
|
-
}
|
91
|
-
exit!
|
92
|
-
}
|
93
|
-
|
94
|
-
while (File.exist? @ready_spin_lock)
|
95
|
-
# nothing to do.
|
96
|
-
end
|
97
|
-
|
98
|
-
begin
|
99
|
-
yield
|
100
|
-
ensure
|
101
|
-
FileUtils.rm_f(@final_spin_lock)
|
102
|
-
Process.waitpid(pid)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
private :another_process_exclusive_lock
|
106
|
-
|
107
|
-
def test_exclusive_lock
|
108
|
-
another_process_exclusive_lock{
|
109
|
-
@stat_file.open{
|
110
|
-
assert_raise(RuntimeError) {
|
111
|
-
@stat_file.synchronize{
|
112
|
-
flunk("don't reach here.")
|
113
|
-
}
|
114
|
-
}
|
115
|
-
}
|
116
|
-
}
|
117
|
-
end
|
118
|
-
|
119
|
-
def test_readable_lock_status
|
120
|
-
assert_raise(Errno::ENOENT) {
|
121
|
-
@read_file.open
|
122
|
-
}
|
123
|
-
|
124
|
-
another_process_exclusive_lock{
|
125
|
-
@read_file.open{
|
126
|
-
assert_equal(true, @read_file.locked?)
|
127
|
-
}
|
128
|
-
}
|
129
|
-
|
130
|
-
@read_file.open{
|
131
|
-
assert_equal(false, @read_file.locked?)
|
132
|
-
}
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_readable_should_be_locked
|
136
|
-
another_process_exclusive_lock{
|
137
|
-
@read_file.open{
|
138
|
-
@read_file.should_be_locked
|
139
|
-
}
|
140
|
-
}
|
141
|
-
|
142
|
-
@read_file.open{
|
143
|
-
assert_raise(RuntimeError) {
|
144
|
-
@read_file.should_be_locked
|
145
|
-
}
|
146
|
-
}
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_write_read
|
150
|
-
another_process_exclusive_lock(write_text: "pid: #{$$}") {
|
151
|
-
@read_file.open{
|
152
|
-
assert_equal("pid: #{$$}", @read_file.read)
|
153
|
-
assert_equal("pid: #{$$}", @read_file.read, 'rewind')
|
154
|
-
}
|
155
|
-
}
|
156
|
-
|
157
|
-
@read_file.open{
|
158
|
-
assert_raise(RuntimeError) {
|
159
|
-
@read_file.read
|
160
|
-
}
|
161
|
-
}
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
# Local Variables:
|
167
|
-
# mode: Ruby
|
168
|
-
# indent-tabs-mode: nil
|
169
|
-
# End:
|
data/test/test_daemon_waitpid.rb
DELETED
@@ -1,72 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'pp' if $DEBUG
|
4
|
-
require 'test/unit'
|
5
|
-
|
6
|
-
module RIMS::Test
|
7
|
-
class DaemonWaitpidTest < Test::Unit::TestCase
|
8
|
-
def setup
|
9
|
-
@child_pid_list = []
|
10
|
-
end
|
11
|
-
|
12
|
-
def teardown
|
13
|
-
for pid in @child_pid_list
|
14
|
-
begin
|
15
|
-
unless (Process.waitpid(pid, Process::WNOHANG)) then
|
16
|
-
Process.kill('KILL', pid)
|
17
|
-
Process.wait
|
18
|
-
end
|
19
|
-
rescue SystemCallError
|
20
|
-
next
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def fork_child_process
|
26
|
-
latch_in, latch_out = IO.pipe
|
27
|
-
|
28
|
-
pid = fork{
|
29
|
-
latch_out.close
|
30
|
-
latch_in.gets
|
31
|
-
yield
|
32
|
-
exit!
|
33
|
-
}
|
34
|
-
@child_pid_list << pid
|
35
|
-
latch_in.close
|
36
|
-
|
37
|
-
return latch_out, pid
|
38
|
-
end
|
39
|
-
private :fork_child_process
|
40
|
-
|
41
|
-
def until_child_process_exit
|
42
|
-
until (pid = yield)
|
43
|
-
# nothing to do.
|
44
|
-
end
|
45
|
-
|
46
|
-
pid
|
47
|
-
end
|
48
|
-
private :until_child_process_exit
|
49
|
-
|
50
|
-
def test_waitpid
|
51
|
-
latch_out1, pid1 = fork_child_process{ exit!(0) }
|
52
|
-
latch_out2, pid2 = fork_child_process{ exit!(1) }
|
53
|
-
latch_out3, pid3 = fork_child_process{ exit!(2) }
|
54
|
-
|
55
|
-
assert_nil(Process.waitpid(-1, Process::WNOHANG))
|
56
|
-
|
57
|
-
latch_out3.puts
|
58
|
-
assert_equal(pid3, until_child_process_exit{ Process.waitpid(-1) })
|
59
|
-
|
60
|
-
latch_out1.puts
|
61
|
-
assert_equal(pid1, until_child_process_exit{ Process.waitpid(-1) })
|
62
|
-
|
63
|
-
latch_out2.puts
|
64
|
-
assert_equal(pid2, until_child_process_exit{ Process.waitpid(-1) })
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
# Local Variables:
|
70
|
-
# mode: Ruby
|
71
|
-
# indent-tabs-mode: nil
|
72
|
-
# End:
|