mojombo-bertrpc 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -26,7 +26,7 @@ Example
26
26
  require 'bertrpc'
27
27
 
28
28
  svc = BERTRPC::Service.new('localhost', 9999)
29
- svc.calc.add.call(1, 2)
29
+ svc.call.calc.add(1, 2)
30
30
  # => 3
31
31
 
32
32
  This generates a BERT-RPC request like so:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.2.0
data/bertrpc.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{bertrpc}
5
- s.version = "0.1.2"
5
+ s.version = "0.2.0"
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-05-27}
9
+ s.date = %q{2009-08-13}
10
10
  s.email = %q{tom@mojombo.com}
11
11
  s.extra_rdoc_files = [
12
12
  "LICENSE",
@@ -21,23 +21,28 @@ Gem::Specification.new do |s|
21
21
  "VERSION",
22
22
  "bertrpc.gemspec",
23
23
  "lib/bertrpc.rb",
24
+ "lib/bertrpc/call.rb",
25
+ "lib/bertrpc/call_proxy.rb",
26
+ "lib/bertrpc/encodes.rb",
24
27
  "lib/bertrpc/errors.rb",
25
- "lib/bertrpc/fun.rb",
26
28
  "lib/bertrpc/mod.rb",
27
29
  "lib/bertrpc/service.rb",
28
- "test/fun_test.rb",
30
+ "test/call_proxy_test.rb",
31
+ "test/call_test.rb",
32
+ "test/encodes_test.rb",
29
33
  "test/mod_test.rb",
30
34
  "test/service_test.rb",
31
35
  "test/test_helper.rb"
32
36
  ]
33
- s.has_rdoc = true
34
37
  s.homepage = %q{http://github.com/mojombo/bertrpc}
35
38
  s.rdoc_options = ["--charset=UTF-8"]
36
39
  s.require_paths = ["lib"]
37
- s.rubygems_version = %q{1.3.0}
40
+ s.rubygems_version = %q{1.3.5}
38
41
  s.summary = %q{BERTRPC is a Ruby BERT-RPC client library.}
39
42
  s.test_files = [
40
- "test/fun_test.rb",
43
+ "test/call_proxy_test.rb",
44
+ "test/call_test.rb",
45
+ "test/encodes_test.rb",
41
46
  "test/mod_test.rb",
42
47
  "test/service_test.rb",
43
48
  "test/test_helper.rb"
@@ -45,7 +50,7 @@ Gem::Specification.new do |s|
45
50
 
46
51
  if s.respond_to? :specification_version then
47
52
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
48
- s.specification_version = 2
53
+ s.specification_version = 3
49
54
 
50
55
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
51
56
  s.add_runtime_dependency(%q<erlectricity>, [">= 1.0.1"])
@@ -0,0 +1,33 @@
1
+ module BERTRPC
2
+ class Call
3
+ include Encodes
4
+
5
+ def initialize(svc, mod, fun, args)
6
+ @svc = svc
7
+ @mod = mod
8
+ @fun = fun
9
+ @args = args
10
+ end
11
+
12
+ def execute
13
+ bert_request = encode_ruby_request([:call, @mod, @fun, @args])
14
+ bert_response = sync_request(bert_request)
15
+ decode_bert_response(bert_response)
16
+ end
17
+
18
+ #private
19
+
20
+ def sync_request(bert_request)
21
+ sock = TCPSocket.new(@svc.host, @svc.port)
22
+ sock.write([bert_request.length].pack("N"))
23
+ sock.write(bert_request)
24
+ lenheader = sock.read(4)
25
+ raise ProtocolError.new("Unable to read length header from server.") unless lenheader
26
+ len = lenheader.unpack('N').first
27
+ bert_response = sock.read(len)
28
+ raise ProtocolError.new("Unable to read data from server.") unless bert_response
29
+ sock.close
30
+ bert_response
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,11 @@
1
+ module BERTRPC
2
+ class CallProxy
3
+ def initialize(svc)
4
+ @svc = svc
5
+ end
6
+
7
+ def method_missing(cmd, *args)
8
+ Mod.new(@svc, Call, cmd)
9
+ end
10
+ end
11
+ end
@@ -1,33 +1,5 @@
1
1
  module BERTRPC
2
- class Fun
3
- def initialize(svc, mod, fun)
4
- @svc = svc
5
- @mod = mod
6
- @fun = fun
7
- end
8
-
9
- def call(*args)
10
- args = [*args]
11
- bert_request = encode_ruby_request([:call, @mod, @fun, args])
12
- bert_response = sync_request(bert_request)
13
- decode_bert_response(bert_response)
14
- end
15
-
16
- # private
17
-
18
- def sync_request(bert_request)
19
- sock = TCPSocket.new(@svc.host, @svc.port)
20
- sock.write([bert_request.length].pack("N"))
21
- sock.write(bert_request)
22
- lenheader = sock.read(4)
23
- raise ProtocolError.new("Unable to read length header from server.") unless lenheader
24
- len = lenheader.unpack('N').first
25
- bert_response = sock.read(len)
26
- raise ProtocolError.new("Unable to read data from server.") unless bert_response
27
- sock.close
28
- bert_response
29
- end
30
-
2
+ module Encodes
31
3
  def encode_ruby_request(ruby_request)
32
4
  ruby_payload = convert(ruby_request)
33
5
  Erlectricity::Encoder.encode(ruby_payload)
data/lib/bertrpc/mod.rb CHANGED
@@ -1,12 +1,14 @@
1
1
  module BERTRPC
2
2
  class Mod
3
- def initialize(svc, mod)
3
+ def initialize(svc, type, mod)
4
4
  @svc = svc
5
+ @type = type
5
6
  @mod = mod
6
7
  end
7
8
 
8
9
  def method_missing(cmd, *args)
9
- Fun.new(@svc, @mod, cmd)
10
+ args = [*args]
11
+ @type.new(@svc, @mod, cmd, args).execute
10
12
  end
11
13
  end
12
14
  end
@@ -7,8 +7,8 @@ module BERTRPC
7
7
  @port = port
8
8
  end
9
9
 
10
- def method_missing(cmd, *args)
11
- Mod.new(self, cmd)
10
+ def call
11
+ CallProxy.new(self)
12
12
  end
13
13
  end
14
14
  end
data/lib/bertrpc.rb CHANGED
@@ -2,6 +2,8 @@ require 'erlectricity'
2
2
  require 'socket'
3
3
 
4
4
  require 'bertrpc/service'
5
+ require 'bertrpc/call_proxy'
5
6
  require 'bertrpc/mod'
6
- require 'bertrpc/fun'
7
+ require 'bertrpc/encodes'
8
+ require 'bertrpc/call'
7
9
  require 'bertrpc/errors'
@@ -0,0 +1,24 @@
1
+ require 'test_helper'
2
+
3
+ class CallProxyTest < Test::Unit::TestCase
4
+ context "A CallProxy" do
5
+ setup do
6
+ @svc = BERTRPC::Service.new('localhost', 9941)
7
+ end
8
+
9
+ should "be created with a Service" do
10
+ assert BERTRPC::CallProxy.new(@svc).is_a?(BERTRPC::CallProxy)
11
+ end
12
+ end
13
+
14
+ context "A CallProxy instance" do
15
+ setup do
16
+ svc = BERTRPC::Service.new('localhost', 9941)
17
+ @cp = BERTRPC::CallProxy.new(@svc)
18
+ end
19
+
20
+ should "return a Mod instance" do
21
+ assert @cp.myfun.is_a?(BERTRPC::Mod)
22
+ end
23
+ end
24
+ end
data/test/call_test.rb ADDED
@@ -0,0 +1,85 @@
1
+ require 'test_helper'
2
+
3
+ class CallTest < Test::Unit::TestCase
4
+ context "A Call" do
5
+ setup do
6
+ @svc = BERTRPC::Service.new('localhost', 9941)
7
+ end
8
+
9
+ should "be created with a Service, module name, fun name, and args" do
10
+ assert BERTRPC::Call.new(@svc, :mymod, :myfun, [1, 2]).is_a?(BERTRPC::Call)
11
+ end
12
+ end
13
+
14
+ context "A Call instance" do
15
+ setup do
16
+ @svc = BERTRPC::Service.new('localhost', 9941)
17
+ @enc = Enc.new
18
+ end
19
+
20
+ should "call with single-arity" do
21
+ req = @enc.encode_ruby_request([:call, :mymod, :myfun, [1]])
22
+ res = @enc.encode_ruby_request([:reply, 2])
23
+ call = BERTRPC::Call.new(@svc, :mymod, :myfun, [1])
24
+ call.expects(:sync_request).with(req).returns(res)
25
+ assert_equal 2, call.execute
26
+ end
27
+
28
+ should "call with single-arity array" do
29
+ req = @enc.encode_ruby_request([:call, :mymod, :myfun, [[1, 2, 3]]])
30
+ res = @enc.encode_ruby_request([:reply, [4, 5, 6]])
31
+ call = BERTRPC::Call.new(@svc, :mymod, :myfun, [[1, 2, 3]])
32
+ call.expects(:sync_request).with(req).returns(res)
33
+ assert_equal [4, 5, 6], call.execute
34
+ end
35
+
36
+ should "call with multi-arity" do
37
+ req = @enc.encode_ruby_request([:call, :mymod, :myfun, [1, 2, 3]])
38
+ res = @enc.encode_ruby_request([:reply, [4, 5, 6]])
39
+ call = BERTRPC::Call.new(@svc, :mymod, :myfun, [1, 2, 3])
40
+ call.expects(:sync_request).with(req).returns(res)
41
+ assert_equal [4, 5, 6], call.execute
42
+ end
43
+
44
+ context "sync_request" do
45
+ setup do
46
+ @svc = BERTRPC::Service.new('localhost', 9941)
47
+ @call = BERTRPC::Call.new(@svc, :mymod, :myfun, [])
48
+ end
49
+
50
+ should "read and write BERT-Ps from the socket" do
51
+ io = stub()
52
+ io.expects(:write).with("\000\000\000\003")
53
+ io.expects(:write).with("foo")
54
+ io.expects(:read).with(4).returns("\000\000\000\003")
55
+ io.expects(:read).with(3).returns("bar")
56
+ io.expects(:close)
57
+ TCPSocket.expects(:new).returns(io)
58
+ assert_equal "bar", @call.sync_request("foo")
59
+ end
60
+
61
+ should "raise a ProtocolError when the length is invalid" do
62
+ io = stub()
63
+ io.expects(:write).with("\000\000\000\003")
64
+ io.expects(:write).with("foo")
65
+ io.expects(:read).with(4).returns(nil)
66
+ TCPSocket.expects(:new).returns(io)
67
+ assert_raises(BERTRPC::ProtocolError) do
68
+ @call.sync_request("foo")
69
+ end
70
+ end
71
+
72
+ should "raise a ProtocolError when the data is invalid" do
73
+ io = stub()
74
+ io.expects(:write).with("\000\000\000\003")
75
+ io.expects(:write).with("foo")
76
+ io.expects(:read).with(4).returns("\000\000\000\003")
77
+ io.expects(:read).with(3).returns(nil)
78
+ TCPSocket.expects(:new).returns(io)
79
+ assert_raises(BERTRPC::ProtocolError) do
80
+ @call.sync_request("foo")
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,80 @@
1
+ require 'test_helper'
2
+
3
+ class EncodesTest < Test::Unit::TestCase
4
+ context "An Encodes includer" do
5
+ setup do
6
+ @enc = Enc.new
7
+ end
8
+
9
+ context "converter" do
10
+ should "convert top level hashes to BERT-RPC dict form" do
11
+ assert_equal([:dict, [:foo, 1], [:bar, 2]], @enc.convert({:foo => 1, :bar => 2}))
12
+ end
13
+
14
+ should "convert nested hashes in the same way" do
15
+ assert_equal([1, 2, [:dict, [:foo, 1]]], @enc.convert([1, 2, {:foo => 1}]))
16
+ end
17
+
18
+ should "keep everything else the same" do
19
+ assert_equal [1, 2, "foo", :bar, 3.14], @enc.convert([1, 2, "foo", :bar, 3.14])
20
+ end
21
+ end
22
+
23
+ context "deconverter" do
24
+ should "convert top level BERT-RPC dict forms to hashes" do
25
+ assert_equal({:foo => 1, :bar => 2}, @enc.deconvert([:dict, [:foo, 1], [:bar, 2]]))
26
+ end
27
+
28
+ should "convert nested dicts in the same way" do
29
+ assert_equal([1, 2, {:foo => 1}], @enc.deconvert([1, 2, [:dict, [:foo, 1]]]))
30
+ end
31
+
32
+ should "keep everything else the same" do
33
+ assert_equal [1, 2, "foo", :bar, 3.14], @enc.deconvert([1, 2, "foo", :bar, 3.14])
34
+ end
35
+ end
36
+
37
+ context "ruby request encoder" do
38
+ should "return BERT-RPC encoded request" do
39
+ bert = "\203h\004d\000\004calld\000\005mymodd\000\005myfunh\003a\001a\002a\003"
40
+ assert_equal bert, @enc.encode_ruby_request([:call, :mymod, :myfun, [1, 2, 3]])
41
+ end
42
+ end
43
+
44
+ context "bert response decoder" do
45
+ should "return response when successful" do
46
+ req = @enc.encode_ruby_request([:reply, [1, 2, 3]])
47
+ res = @enc.decode_bert_response(req)
48
+ assert_equal [1, 2, 3], res
49
+ end
50
+
51
+ should "raise a ProtocolError error when protocol level error is returned" do
52
+ req = @enc.encode_ruby_request([:error, [:protocol, 1, "invalid"]])
53
+ assert_raises(BERTRPC::ProtocolError) do
54
+ @enc.decode_bert_response(req)
55
+ end
56
+ end
57
+
58
+ should "raise a ServerError error when server level error is returned" do
59
+ req = @enc.encode_ruby_request([:error, [:server, 1, "invalid"]])
60
+ assert_raises(BERTRPC::ServerError) do
61
+ @enc.decode_bert_response(req)
62
+ end
63
+ end
64
+
65
+ should "raise a UserError error when user level error is returned" do
66
+ req = @enc.encode_ruby_request([:error, [:user, 1, "invalid"]])
67
+ assert_raises(BERTRPC::UserError) do
68
+ @enc.decode_bert_response(req)
69
+ end
70
+ end
71
+
72
+ should "raise a ProxyError error when proxy level error is returned" do
73
+ req = @enc.encode_ruby_request([:error, [:proxy, 1, "invalid"]])
74
+ assert_raises(BERTRPC::ProxyError) do
75
+ @enc.decode_bert_response(req)
76
+ end
77
+ end
78
+ end
79
+ end
80
+ end
data/test/mod_test.rb CHANGED
@@ -6,19 +6,25 @@ class ModTest < Test::Unit::TestCase
6
6
  @svc = BERTRPC::Service.new('localhost', 9941)
7
7
  end
8
8
 
9
- should "be created with a Service and module name" do
10
- assert BERTRPC::Mod.new(@svc, :mymod).is_a?(BERTRPC::Mod)
9
+ should "be created with a Service and type and module name" do
10
+ assert BERTRPC::Mod.new(@svc, BERTRPC::Call, :mymod).is_a?(BERTRPC::Mod)
11
11
  end
12
12
  end
13
13
 
14
14
  context "A Mod instance" do
15
15
  setup do
16
- svc = BERTRPC::Service.new('localhost', 9941)
17
- @mod = BERTRPC::Mod.new(@svc, :mymod)
16
+ @svc = BERTRPC::Service.new('localhost', 9941)
17
+ @mod = BERTRPC::Mod.new(@svc, BERTRPC::Call, :mymod)
18
18
  end
19
19
 
20
- should "return a Fun instance" do
21
- assert @mod.myfun.is_a?(BERTRPC::Fun)
20
+ should "call execute on the type" do
21
+ m = mock(:execute => nil)
22
+ BERTRPC::Call.expects(:new).with(@svc, :mymod, :myfun, [1, 2, 3]).returns(m)
23
+ @mod.myfun(1, 2, 3)
24
+
25
+ m = mock(:execute => nil)
26
+ BERTRPC::Call.expects(:new).with(@svc, :mymod, :myfun, [1]).returns(m)
27
+ @mod.myfun(1)
22
28
  end
23
29
  end
24
30
  end
data/test/service_test.rb CHANGED
@@ -21,8 +21,8 @@ class ServiceTest < Test::Unit::TestCase
21
21
  assert_equal 9941, @svc.port
22
22
  end
23
23
 
24
- should "return a Mod instance" do
25
- assert @svc.mymod.is_a?(BERTRPC::Mod)
24
+ should "return a Call instance" do
25
+ assert @svc.call.is_a?(BERTRPC::CallProxy)
26
26
  end
27
27
  end
28
28
  end
data/test/test_helper.rb CHANGED
@@ -7,5 +7,6 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
7
  $LOAD_PATH.unshift(File.dirname(__FILE__))
8
8
  require 'bertrpc'
9
9
 
10
- class Test::Unit::TestCase
11
- end
10
+ class Enc
11
+ include BERTRPC::Encodes
12
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mojombo-bertrpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
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-05-27 00:00:00 -07:00
12
+ date: 2009-08-13 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -40,16 +40,21 @@ files:
40
40
  - VERSION
41
41
  - bertrpc.gemspec
42
42
  - lib/bertrpc.rb
43
+ - lib/bertrpc/call.rb
44
+ - lib/bertrpc/call_proxy.rb
45
+ - lib/bertrpc/encodes.rb
43
46
  - lib/bertrpc/errors.rb
44
- - lib/bertrpc/fun.rb
45
47
  - lib/bertrpc/mod.rb
46
48
  - lib/bertrpc/service.rb
47
- - test/fun_test.rb
49
+ - test/call_proxy_test.rb
50
+ - test/call_test.rb
51
+ - test/encodes_test.rb
48
52
  - test/mod_test.rb
49
53
  - test/service_test.rb
50
54
  - test/test_helper.rb
51
- has_rdoc: true
55
+ has_rdoc: false
52
56
  homepage: http://github.com/mojombo/bertrpc
57
+ licenses:
53
58
  post_install_message:
54
59
  rdoc_options:
55
60
  - --charset=UTF-8
@@ -70,12 +75,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
75
  requirements: []
71
76
 
72
77
  rubyforge_project:
73
- rubygems_version: 1.2.0
78
+ rubygems_version: 1.3.5
74
79
  signing_key:
75
- specification_version: 2
80
+ specification_version: 3
76
81
  summary: BERTRPC is a Ruby BERT-RPC client library.
77
82
  test_files:
78
- - test/fun_test.rb
83
+ - test/call_proxy_test.rb
84
+ - test/call_test.rb
85
+ - test/encodes_test.rb
79
86
  - test/mod_test.rb
80
87
  - test/service_test.rb
81
88
  - test/test_helper.rb
data/test/fun_test.rb DELETED
@@ -1,148 +0,0 @@
1
- require 'test_helper'
2
-
3
- class FunTest < Test::Unit::TestCase
4
- context "A Fun" do
5
- setup do
6
- @svc = BERTRPC::Service.new('localhost', 9941)
7
- end
8
-
9
- should "be created with a Service, module name, and fun name" do
10
- assert BERTRPC::Fun.new(@svc, :mymod, :myfun).is_a?(BERTRPC::Fun)
11
- end
12
- end
13
-
14
- context "A Fun instance" do
15
- setup do
16
- svc = BERTRPC::Service.new('localhost', 9941)
17
- @fun = BERTRPC::Fun.new(svc, :mymod, :myfun)
18
- end
19
-
20
- should "call with single-arity" do
21
- req = @fun.encode_ruby_request([:call, :mymod, :myfun, [1]])
22
- res = @fun.encode_ruby_request([:reply, 2])
23
- @fun.expects(:sync_request).with(req).returns(res)
24
- assert_equal 2, @fun.call(1)
25
- end
26
-
27
- should "call with single-arity array" do
28
- req = @fun.encode_ruby_request([:call, :mymod, :myfun, [[1, 2, 3]]])
29
- res = @fun.encode_ruby_request([:reply, [4, 5, 6]])
30
- @fun.expects(:sync_request).with(req).returns(res)
31
- assert_equal [4, 5, 6], @fun.call([1, 2, 3])
32
- end
33
-
34
- should "call with multi-arity" do
35
- req = @fun.encode_ruby_request([:call, :mymod, :myfun, [1, 2, 3]])
36
- res = @fun.encode_ruby_request([:reply, [4, 5, 6]])
37
- @fun.expects(:sync_request).with(req).returns(res)
38
- assert_equal [4, 5, 6], @fun.call(1, 2, 3)
39
- end
40
-
41
- context "converter" do
42
- should "convert top level hashes to BERT-RPC dict form" do
43
- assert_equal([:dict, [:foo, 1], [:bar, 2]], @fun.convert({:foo => 1, :bar => 2}))
44
- end
45
-
46
- should "convert nested hashes in the same way" do
47
- assert_equal([1, 2, [:dict, [:foo, 1]]], @fun.convert([1, 2, {:foo => 1}]))
48
- end
49
-
50
- should "keep everything else the same" do
51
- assert_equal [1, 2, "foo", :bar, 3.14], @fun.convert([1, 2, "foo", :bar, 3.14])
52
- end
53
- end
54
-
55
- context "deconverter" do
56
- should "convert top level BERT-RPC dict forms to hashes" do
57
- assert_equal({:foo => 1, :bar => 2}, @fun.deconvert([:dict, [:foo, 1], [:bar, 2]]))
58
- end
59
-
60
- should "convert nested dicts in the same way" do
61
- assert_equal([1, 2, {:foo => 1}], @fun.deconvert([1, 2, [:dict, [:foo, 1]]]))
62
- end
63
-
64
- should "keep everything else the same" do
65
- assert_equal [1, 2, "foo", :bar, 3.14], @fun.deconvert([1, 2, "foo", :bar, 3.14])
66
- end
67
- end
68
-
69
- context "sync_request" do
70
- should "read and write BERT-Ps from the socket" do
71
- io = stub()
72
- io.expects(:write).with("\000\000\000\003")
73
- io.expects(:write).with("foo")
74
- io.expects(:read).with(4).returns("\000\000\000\003")
75
- io.expects(:read).with(3).returns("bar")
76
- io.expects(:close)
77
- TCPSocket.expects(:new).returns(io)
78
- assert_equal "bar", @fun.sync_request("foo")
79
- end
80
-
81
- should "raise a ProxyError when the length is invalid" do
82
- io = stub()
83
- io.expects(:write).with("\000\000\000\003")
84
- io.expects(:write).with("foo")
85
- io.expects(:read).with(4).returns(nil)
86
- TCPSocket.expects(:new).returns(io)
87
- assert_raises(BERTRPC::ProtocolError) do
88
- @fun.sync_request("foo")
89
- end
90
- end
91
-
92
- should "raise a ProxyError when the data is invalid" do
93
- io = stub()
94
- io.expects(:write).with("\000\000\000\003")
95
- io.expects(:write).with("foo")
96
- io.expects(:read).with(4).returns("\000\000\000\003")
97
- io.expects(:read).with(3).returns(nil)
98
- TCPSocket.expects(:new).returns(io)
99
- assert_raises(BERTRPC::ProtocolError) do
100
- @fun.sync_request("foo")
101
- end
102
- end
103
- end
104
-
105
- context "ruby request encoder" do
106
- should "return BERT-RPC encoded request" do
107
- bert = "\203h\004d\000\004calld\000\005mymodd\000\005myfunh\003a\001a\002a\003"
108
- assert_equal bert, @fun.encode_ruby_request([:call, :mymod, :myfun, [1, 2, 3]])
109
- end
110
- end
111
-
112
- context "bert response decoder" do
113
- should "return response when successful" do
114
- req = @fun.encode_ruby_request([:reply, [1, 2, 3]])
115
- res = @fun.decode_bert_response(req)
116
- assert_equal [1, 2, 3], res
117
- end
118
-
119
- should "raise a ProtocolError error when protocol level error is returned" do
120
- req = @fun.encode_ruby_request([:error, [:protocol, 1, "invalid"]])
121
- assert_raises(BERTRPC::ProtocolError) do
122
- @fun.decode_bert_response(req)
123
- end
124
- end
125
-
126
- should "raise a ServerError error when server level error is returned" do
127
- req = @fun.encode_ruby_request([:error, [:server, 1, "invalid"]])
128
- assert_raises(BERTRPC::ServerError) do
129
- @fun.decode_bert_response(req)
130
- end
131
- end
132
-
133
- should "raise a UserError error when user level error is returned" do
134
- req = @fun.encode_ruby_request([:error, [:user, 1, "invalid"]])
135
- assert_raises(BERTRPC::UserError) do
136
- @fun.decode_bert_response(req)
137
- end
138
- end
139
-
140
- should "raise a ProxyError error when proxy level error is returned" do
141
- req = @fun.encode_ruby_request([:error, [:proxy, 1, "invalid"]])
142
- assert_raises(BERTRPC::ProxyError) do
143
- @fun.decode_bert_response(req)
144
- end
145
- end
146
- end
147
- end
148
- end