ernie 0.3.4 → 0.3.5
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/Rakefile +1 -1
- data/VERSION.yml +1 -1
- data/elib/ernie_server.erl +5 -5
- data/ernie.gemspec +13 -9
- data/lib/ernie.rb +3 -3
- data/test/ernie_server_test.rb +73 -0
- data/test/ernie_test.rb +1 -1
- data/test/handler.rb +37 -0
- data/test/helper.rb +17 -0
- metadata +9 -5
- data/test/test_helper.rb +0 -12
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ begin
|
|
12
12
|
gem.files.include(["ext"])
|
13
13
|
gem.extensions << 'ext/extconf.rb'
|
14
14
|
gem.add_dependency('erlectricity', '>= 1.0.1')
|
15
|
-
gem.add_dependency('bertrpc', '>= 0.
|
15
|
+
gem.add_dependency('bertrpc', '>= 0.3.4')
|
16
16
|
|
17
17
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
18
18
|
end
|
data/VERSION.yml
CHANGED
data/elib/ernie_server.erl
CHANGED
@@ -71,9 +71,7 @@ handle_call(_Request, _From, State) ->
|
|
71
71
|
handle_cast({process, Sock}, State) ->
|
72
72
|
Request = #request{sock = Sock},
|
73
73
|
State2 = receive_term(Request, State),
|
74
|
-
|
75
|
-
State3 = State2#state{count = Count + 1},
|
76
|
-
{noreply, State3};
|
74
|
+
{noreply, State2};
|
77
75
|
handle_cast({asset_freed}, State) ->
|
78
76
|
case queue:is_empty(State#state.pending) of
|
79
77
|
false ->
|
@@ -187,15 +185,17 @@ process_request(Request, State) ->
|
|
187
185
|
end.
|
188
186
|
|
189
187
|
try_process_now(Request, State) ->
|
188
|
+
Count = State#state.count,
|
189
|
+
State2 = State#state{count = Count + 1},
|
190
190
|
case asset_pool:lease() of
|
191
191
|
{ok, Asset} ->
|
192
192
|
% io:format("i", []),
|
193
193
|
spawn(fun() -> process_now(Request, Asset) end),
|
194
|
-
|
194
|
+
State2;
|
195
195
|
empty ->
|
196
196
|
% io:format("q", []),
|
197
197
|
Pending2 = queue:in(Request, State#state.pending),
|
198
|
-
|
198
|
+
State2#state{pending = Pending2}
|
199
199
|
end.
|
200
200
|
|
201
201
|
process_now(Request, Asset) ->
|
data/ernie.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{ernie}
|
5
|
-
s.version = "0.3.
|
5
|
+
s.version = "0.3.5"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Tom Preston-Werner"]
|
9
|
-
s.date = %q{2009-09-
|
9
|
+
s.date = %q{2009-09-25}
|
10
10
|
s.default_executable = %q{ernie}
|
11
11
|
s.email = %q{tom@mojombo.com}
|
12
12
|
s.executables = ["ernie"]
|
@@ -37,9 +37,11 @@ Gem::Specification.new do |s|
|
|
37
37
|
"ext/Makefile",
|
38
38
|
"ext/extconf.rb",
|
39
39
|
"lib/ernie.rb",
|
40
|
+
"test/ernie_server_test.rb",
|
40
41
|
"test/ernie_test.rb",
|
41
|
-
"test/
|
42
|
-
"test/
|
42
|
+
"test/handler.rb",
|
43
|
+
"test/helper.rb",
|
44
|
+
"test/load.rb"
|
43
45
|
]
|
44
46
|
s.homepage = %q{http://github.com/mojombo/ernie}
|
45
47
|
s.rdoc_options = ["--charset=UTF-8"]
|
@@ -47,9 +49,11 @@ Gem::Specification.new do |s|
|
|
47
49
|
s.rubygems_version = %q{1.3.5}
|
48
50
|
s.summary = %q{Ernie is a BERT-RPC server implementation.}
|
49
51
|
s.test_files = [
|
50
|
-
"test/
|
52
|
+
"test/ernie_server_test.rb",
|
53
|
+
"test/ernie_test.rb",
|
54
|
+
"test/handler.rb",
|
55
|
+
"test/helper.rb",
|
51
56
|
"test/load.rb",
|
52
|
-
"test/test_helper.rb",
|
53
57
|
"examples/calc.rb"
|
54
58
|
]
|
55
59
|
|
@@ -59,13 +63,13 @@ Gem::Specification.new do |s|
|
|
59
63
|
|
60
64
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
61
65
|
s.add_runtime_dependency(%q<erlectricity>, [">= 1.0.1"])
|
62
|
-
s.add_runtime_dependency(%q<bertrpc>, [">= 0.
|
66
|
+
s.add_runtime_dependency(%q<bertrpc>, [">= 0.3.4"])
|
63
67
|
else
|
64
68
|
s.add_dependency(%q<erlectricity>, [">= 1.0.1"])
|
65
|
-
s.add_dependency(%q<bertrpc>, [">= 0.
|
69
|
+
s.add_dependency(%q<bertrpc>, [">= 0.3.4"])
|
66
70
|
end
|
67
71
|
else
|
68
72
|
s.add_dependency(%q<erlectricity>, [">= 1.0.1"])
|
69
|
-
s.add_dependency(%q<bertrpc>, [">= 0.
|
73
|
+
s.add_dependency(%q<bertrpc>, [">= 0.3.4"])
|
70
74
|
end
|
71
75
|
end
|
data/lib/ernie.rb
CHANGED
@@ -59,7 +59,7 @@ class Ernie
|
|
59
59
|
def self.dispatch(mod, fun, args)
|
60
60
|
xargs = deconvert(args)
|
61
61
|
self.log("-- " + [mod, fun, xargs].inspect)
|
62
|
-
self.mods[mod] || raise(ServerError.new("No such module
|
62
|
+
self.mods[mod] || raise(ServerError.new("No such module '#{mod}'"))
|
63
63
|
self.mods[mod].funs[fun] || raise(ServerError.new("No such function '#{mod}:#{fun}'"))
|
64
64
|
res = self.mods[mod].funs[fun].call(*xargs)
|
65
65
|
convert(res)
|
@@ -77,12 +77,12 @@ class Ernie
|
|
77
77
|
self.log("<- " + xres.inspect)
|
78
78
|
f.send!(xres)
|
79
79
|
rescue ServerError => e
|
80
|
-
xres = [:error, [:server, 0, e.message, e.backtrace]]
|
80
|
+
xres = [:error, [:server, 0, e.class.to_s, e.message, e.backtrace]]
|
81
81
|
self.log("<- " + xres.inspect)
|
82
82
|
self.log(e.backtrace.join("\n"))
|
83
83
|
f.send!(xres)
|
84
84
|
rescue Object => e
|
85
|
-
xres = [:error, [:user, 0, e.message, e.backtrace]]
|
85
|
+
xres = [:error, [:user, 0, e.class.to_s, e.message, e.backtrace]]
|
86
86
|
self.log("<- " + xres.inspect)
|
87
87
|
self.log(e.backtrace.join("\n"))
|
88
88
|
f.send!(xres)
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
PORT = 27118
|
4
|
+
|
5
|
+
class ErnieServerTest < Test::Unit::TestCase
|
6
|
+
context "An Ernie Server" do
|
7
|
+
setup do
|
8
|
+
`#{ERNIE_ROOT}/bin/ernie -h #{ERNIE_ROOT}/test/handler.rb \
|
9
|
+
-P /tmp/ernie.pid \
|
10
|
+
-p #{PORT} \
|
11
|
+
-d`
|
12
|
+
@svc = BERTRPC::Service.new('localhost', PORT)
|
13
|
+
loop do
|
14
|
+
begin
|
15
|
+
@svc.call.test.zeronary
|
16
|
+
break
|
17
|
+
rescue Object => e
|
18
|
+
sleep 0.1
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "call" do
|
24
|
+
should "handle zeronary" do
|
25
|
+
assert_equal :foo, @svc.call.test.zeronary
|
26
|
+
end
|
27
|
+
|
28
|
+
should "handle unary" do
|
29
|
+
assert_equal 5, @svc.call.test.unary(5)
|
30
|
+
end
|
31
|
+
|
32
|
+
should "handle binary" do
|
33
|
+
assert_equal 7, @svc.call.test.binary(5, 2)
|
34
|
+
end
|
35
|
+
|
36
|
+
should "handle ternary" do
|
37
|
+
assert_equal 10, @svc.call.test.ternary(5, 2, 3)
|
38
|
+
end
|
39
|
+
|
40
|
+
should "get an error on missing module" do
|
41
|
+
begin
|
42
|
+
@svc.call.failboat.mcfail(:fail)
|
43
|
+
fail "Expected a BERTRPC::ServerError"
|
44
|
+
rescue BERTRPC::ServerError => e
|
45
|
+
assert_equal "No such module 'failboat'", e.message
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
should "get an error on missing function" do
|
50
|
+
begin
|
51
|
+
@svc.call.test.mcfail(:fail)
|
52
|
+
fail "Expected a BERTRPC::ServerError"
|
53
|
+
rescue BERTRPC::ServerError => e
|
54
|
+
assert_equal "No such function 'test:mcfail'", e.message
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "cast" do
|
60
|
+
should "be received and return immediately" do
|
61
|
+
t0 = Time.now
|
62
|
+
assert_equal nil, @svc.cast.test.set_state(7)
|
63
|
+
assert Time.now - t0 < 1
|
64
|
+
assert_equal 7, @svc.call.test.get_state
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
teardown do
|
69
|
+
pid = File.read('/tmp/ernie.pid')
|
70
|
+
`kill -9 #{pid}`
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/test/ernie_test.rb
CHANGED
data/test/handler.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
require 'ernie'
|
3
|
+
|
4
|
+
state = 0
|
5
|
+
|
6
|
+
# Just about the easiest example I could thing of.
|
7
|
+
mod(:test) do
|
8
|
+
fun(:zeronary) do
|
9
|
+
:foo
|
10
|
+
end
|
11
|
+
|
12
|
+
fun(:unary) do |a|
|
13
|
+
a
|
14
|
+
end
|
15
|
+
|
16
|
+
fun(:binary) do |a, b|
|
17
|
+
a + b
|
18
|
+
end
|
19
|
+
|
20
|
+
fun(:ternary) do |a, b, c|
|
21
|
+
a + b + c
|
22
|
+
end
|
23
|
+
|
24
|
+
fun(:set_state) do |x|
|
25
|
+
state = x
|
26
|
+
sleep 5
|
27
|
+
nil
|
28
|
+
end
|
29
|
+
|
30
|
+
fun(:get_state) do
|
31
|
+
state
|
32
|
+
end
|
33
|
+
|
34
|
+
fun(:cry) do
|
35
|
+
raise "abandon hope!"
|
36
|
+
end
|
37
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda'
|
4
|
+
|
5
|
+
ERNIE_ROOT = File.join(File.dirname(__FILE__), *%w[..])
|
6
|
+
|
7
|
+
$:.unshift(File.join(ERNIE_ROOT, 'lib'))
|
8
|
+
|
9
|
+
require 'ernie'
|
10
|
+
begin
|
11
|
+
require 'bertrpc'
|
12
|
+
rescue LoadError
|
13
|
+
puts "You need bertrpc gem installed to run tests."
|
14
|
+
exit!(1)
|
15
|
+
end
|
16
|
+
|
17
|
+
$test = true
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ernie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Preston-Werner
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-09-
|
12
|
+
date: 2009-09-25 00:00:00 -07:00
|
13
13
|
default_executable: ernie
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.3.4
|
34
34
|
version:
|
35
35
|
description:
|
36
36
|
email: tom@mojombo.com
|
@@ -63,9 +63,11 @@ files:
|
|
63
63
|
- ext/Makefile
|
64
64
|
- ext/extconf.rb
|
65
65
|
- lib/ernie.rb
|
66
|
+
- test/ernie_server_test.rb
|
66
67
|
- test/ernie_test.rb
|
68
|
+
- test/handler.rb
|
69
|
+
- test/helper.rb
|
67
70
|
- test/load.rb
|
68
|
-
- test/test_helper.rb
|
69
71
|
has_rdoc: true
|
70
72
|
homepage: http://github.com/mojombo/ernie
|
71
73
|
licenses: []
|
@@ -95,7 +97,9 @@ signing_key:
|
|
95
97
|
specification_version: 3
|
96
98
|
summary: Ernie is a BERT-RPC server implementation.
|
97
99
|
test_files:
|
100
|
+
- test/ernie_server_test.rb
|
98
101
|
- test/ernie_test.rb
|
102
|
+
- test/handler.rb
|
103
|
+
- test/helper.rb
|
99
104
|
- test/load.rb
|
100
|
-
- test/test_helper.rb
|
101
105
|
- examples/calc.rb
|
data/test/test_helper.rb
DELETED