thrift_client 0.1.3 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,6 @@
1
+ v0.2.1. Don't turn off strict_read by default; allow override.
2
+
3
+ v0.2. Add ThriftClient::Simple (Robey).
1
4
 
2
5
  v0.1.3. Define methods explicitly.
3
6
 
data/README CHANGED
@@ -14,6 +14,7 @@ The public certificate for this gem is here[http://rubyforge.org/frs/download.ph
14
14
  * Transparent connection management
15
15
  * Configurable failover and retry backoff
16
16
  * Ruby 1.9 compatibility
17
+ * ThriftClient::Simple class, for working without generated bindings.
17
18
 
18
19
  The Github source repository is {here}[http://github.com/fauna/thrift_client/]. Patches and contributions are very welcome.
19
20
 
data/Rakefile CHANGED
@@ -12,5 +12,6 @@ Echoe.new("thrift_client") do |p|
12
12
  p.rdoc_pattern = /^(lib|bin|tasks|ext)|^README|^CHANGELOG|^TODO|^LICENSE|^COPYING$/
13
13
  p.url = "http://blog.evanweaver.com/files/doc/fauna/thrift_client/"
14
14
  p.docs_host = "blog.evanweaver.com:~/www/bax/public/files/doc/"
15
+ p.spec_pattern = "spec/*_spec.rb"
15
16
  end
16
17
 
data/lib/thrift_client.rb CHANGED
@@ -9,6 +9,7 @@ class ThriftClient
9
9
 
10
10
  DEFAULTS = {
11
11
  :protocol => Thrift::BinaryProtocol,
12
+ :protocol_extra_params => [],
12
13
  :transport => Thrift::FramedTransport,
13
14
  :randomize_server_list => true,
14
15
  :exception_classes => [
@@ -33,6 +34,7 @@ Create a new ThriftClient instance. Accepts an internal Thrift client class (suc
33
34
  Valid optional parameters are:
34
35
 
35
36
  <tt>:protocol</tt>:: Which Thrift protocol to use. Defaults to <tt>Thrift::BinaryProtocol</tt>.
37
+ <tt>:protocol_extra_params</tt>:: An array of additional parameters to pass to the protocol initialization call. Defaults to <tt>[]</tt>.
36
38
  <tt>:transport</tt>:: Which Thrift transport to use. Defaults to <tt>Thrift::FramedTransport</tt>.
37
39
  <tt>:randomize_server_list</tt>:: Whether to connect to the servers randomly, instead of in order. Defaults to <tt>true</tt>.
38
40
  <tt>:raise</tt>:: Whether to reraise errors if no responsive servers are found. Defaults to <tt>true</tt>.
@@ -69,7 +71,7 @@ Valid optional parameters are:
69
71
  @transport = @options[:transport].new(
70
72
  Thrift::Socket.new(server.first, server.last.to_i, @options[:timeouts].default))
71
73
  @transport.open
72
- @client = @client_class.new(@options[:protocol].new(@transport, false))
74
+ @client = @client_class.new(@options[:protocol].new(@transport, *@options[:protocol_extra_params]))
73
75
  end
74
76
 
75
77
  # Force the client to disconnect from the server.
@@ -0,0 +1,137 @@
1
+
2
+ require "#{File.dirname(__FILE__)}/test_helper"
3
+
4
+ class SimpleTest < Test::Unit::TestCase
5
+
6
+ S = ThriftClient::Simple
7
+ S.make_struct("Example", S::Field.new(:name, S::STRING, 1))
8
+ S.make_struct("Args")
9
+ S.make_struct("Retval", S::Field.new(:rv, S::I32, 0))
10
+
11
+ def test_definition
12
+ assert Struct::ST_Example
13
+ assert Struct::ST_Args
14
+ assert Struct::ST_Retval
15
+ end
16
+
17
+ ## Encoding
18
+
19
+ def test_boolean_encoding
20
+ assert_equal "\001", S.pack_value(S::BOOL, true)
21
+ assert_equal "\000", S.pack_value(S::BOOL, false)
22
+ end
23
+
24
+ def test_byte_encoding
25
+ assert_equal "\xc7", S.pack_value(S::BYTE, 199)
26
+ end
27
+
28
+ def test_i16_encoding
29
+ assert_equal "\x00\x96", S.pack_value(S::I16, 150)
30
+ end
31
+
32
+ def test_i32_encoding
33
+ assert_equal "\x00\x96\xb4\x3f", S.pack_value(S::I32, 9876543)
34
+ end
35
+
36
+ def test_i64_encoding
37
+ assert_equal "\x00\x00\x00\x1c\xbb\xf3\x09\x04", S.pack_value(S::I64, 123412351236)
38
+ end
39
+
40
+ def test_double_encoding
41
+ assert_equal "\x40\x23\x00\x00\x00\x00\x00\x00", S.pack_value(S::DOUBLE, 9.5)
42
+ end
43
+
44
+ def test_string_encoding
45
+ assert_equal "\x00\x00\x00\x05hello", S.pack_value(S::STRING, "hello")
46
+ end
47
+
48
+ def test_list_encoding
49
+ assert_equal "\x08\x00\x00\x00\x03\x00\x00\x00\x17\x00\x00\x00\x16\x00\x00\x00\x15",
50
+ S.pack_value(S::ListType.new(S::I32), [ 23, 22, 21 ])
51
+ end
52
+
53
+ def test_map_encoding
54
+ assert_equal "\x0b\x08\x00\x00\x00\x01\x00\x00\x00\x03cat\x00\x00\x00\x05",
55
+ S.pack_value(S::MapType.new(S::STRING, S::I32), "cat" => 5)
56
+ end
57
+
58
+ def test_set_encoding
59
+ assert_equal "\x08\x00\x00\x00\x01\x00\x00\x00\x04",
60
+ S.pack_value(S::SetType.new(S::I32), [ 4 ])
61
+ end
62
+
63
+ def test_struct_encoding
64
+ assert_equal "\x0b\x00\x01\x00\x00\x00\x06Commie\x00",
65
+ S.pack_value(S::StructType.new(Struct::ST_Example), Struct::ST_Example.new("Commie"))
66
+ end
67
+
68
+ def test_request_encoding
69
+ assert_equal "\x80\x01\x00\x01\x00\x00\x00\x09getHeight\x00\x00\x00\x17\x00",
70
+ S.pack_request("getHeight", Struct::ST_Args.new, 23)
71
+ end
72
+
73
+ ## Decoding
74
+
75
+ def test_boolean_decoding
76
+ assert_equal true, S.read_value(StringIO.new("\x01"), S::BOOL)
77
+ assert_equal false, S.read_value(StringIO.new("\x00"), S::BOOL)
78
+ end
79
+
80
+ def test_byte_decoding
81
+ assert_equal -57, S.read_value(StringIO.new("\xc7"), S::BYTE)
82
+ end
83
+
84
+ def test_i16_decoding
85
+ assert_equal 150, S.read_value(StringIO.new("\x00\x96"), S::I16)
86
+ end
87
+
88
+ def test_i32_decoding
89
+ assert_equal 9876543, S.read_value(StringIO.new("\x00\x96\xb4\x3f"), S::I32)
90
+ end
91
+
92
+ def test_i64_decoding
93
+ assert_equal 123412351236,
94
+ S.read_value(StringIO.new("\x00\x00\x00\x1c\xbb\xf3\x09\x04"), S::I64)
95
+ end
96
+
97
+ def test_double_decoding
98
+ assert_equal 9.5,
99
+ S.read_value(StringIO.new("\x40\x23\x00\x00\x00\x00\x00\x00"), S::DOUBLE)
100
+ end
101
+
102
+ def test_string_decoding
103
+ assert_equal "hello", S.read_value(StringIO.new("\x00\x00\x00\x05hello"), S::STRING)
104
+ end
105
+
106
+ def test_list_decoding
107
+ assert_equal [ 23, 22, 21 ],
108
+ S.read_value(StringIO.new("\x08\x00\x00\x00\x03\x00\x00\x00\x17\x00\x00\x00\x16\x00\x00\x00\x15"),
109
+ S::ListType.new(S::I32))
110
+ end
111
+
112
+ def test_map_decoding
113
+ assert_equal({ "cat" => 5 },
114
+ S.read_value(StringIO.new("\x0b\x08\x00\x00\x00\x01\x00\x00\x00\x03cat\x00\x00\x00\x05"),
115
+ S::MapType.new(S::STRING, S::I32)))
116
+ end
117
+
118
+ def test_set_decoding
119
+ assert_equal [ 4 ],
120
+ S.read_value(StringIO.new("\x08\x00\x00\x00\x01\x00\x00\x00\x04"),
121
+ S::ListType.new(S::I32))
122
+ end
123
+
124
+ def test_struct_decoding
125
+ assert_equal Struct::ST_Example.new("Commie"),
126
+ S.read_value(StringIO.new("\x0b\x00\x01\x00\x00\x00\x06Commie\x00"),
127
+ S::StructType.new(Struct::ST_Example))
128
+ end
129
+
130
+ def test_response_decoding
131
+ assert_equal [ "getHeight", 255, 1 ],
132
+ S.read_response(
133
+ StringIO.new("\x80\x01\x00\x02\x00\x00\x00\x09getHeight\x00\x00\x00\xff\x08\x00\x00\x00\x00\x00\x01\x00"),
134
+ Struct::ST_Retval)
135
+ end
136
+
137
+ end
data/test/test_helper.rb CHANGED
@@ -2,5 +2,6 @@
2
2
  require 'test/unit'
3
3
  $LOAD_PATH << "#{File.expand_path(File.dirname(__FILE__))}/../lib"
4
4
  require 'thrift_client'
5
+ require 'thrift_client/simple'
5
6
  require 'scribe'
6
7
  begin; require 'ruby-debug'; rescue LoadError; end
@@ -4,45 +4,46 @@ class ThriftClientTest < Test::Unit::TestCase
4
4
  def setup
5
5
  @entry = [ScribeThrift::LogEntry.new(:message => "something", :category => "thrift_client")]
6
6
  @servers = ["127.0.0.1:1461", "127.0.0.1:1462", "127.0.0.1:1463"]
7
+ @options = {:protocol_extra_params => [false]}
7
8
  end
8
9
 
9
10
  def test_live_server
10
11
  assert_nothing_raised do
11
- ThriftClient.new(ScribeThrift::Client, @servers.last).Log(@entry)
12
+ ThriftClient.new(ScribeThrift::Client, @servers.last, @options).Log(@entry)
12
13
  end
13
14
  end
14
15
 
15
16
  def test_non_random_fall_through
16
17
  assert_nothing_raised do
17
- ThriftClient.new(ScribeThrift::Client, @servers, :randomize_server_list => false).Log(@entry)
18
+ ThriftClient.new(ScribeThrift::Client, @servers, @options).Log(@entry)
18
19
  end
19
20
  end
20
21
 
21
22
  def test_dont_raise
22
23
  assert_nothing_raised do
23
- ThriftClient.new(ScribeThrift::Client, @servers.first, :raise => false).Log(@entry)
24
+ ThriftClient.new(ScribeThrift::Client, @servers.first, @options.merge(:raise => false)).Log(@entry)
24
25
  end
25
26
  end
26
27
 
27
28
  def test_dont_raise_with_defaults
28
- client = ThriftClient.new(ScribeThrift::Client, @servers.first, :raise => false, :defaults => {:Log => 1})
29
+ client = ThriftClient.new(ScribeThrift::Client, @servers.first, @options.merge(:raise => false, :defaults => {:Log => 1}))
29
30
  assert_equal 1, client.Log(@entry)
30
31
  end
31
32
 
32
33
  def test_defaults_dont_override_no_method_error
33
- client = ThriftClient.new(ScribeThrift::Client, @servers, :raise => false, :defaults => {:Missing => 2})
34
+ client = ThriftClient.new(ScribeThrift::Client, @servers, @options.merge(:raise => false, :defaults => {:Missing => 2}))
34
35
  assert_raises(NoMethodError) { client.Missing(@entry) }
35
36
  end
36
37
 
37
38
  def test_random_server_list
38
39
  @lists = []
39
- @lists << ThriftClient.new(ScribeThrift::Client, @servers).server_list while @lists.size < 10
40
+ @lists << ThriftClient.new(ScribeThrift::Client, @servers, @options).server_list while @lists.size < 10
40
41
  assert @lists.uniq.size > 1
41
42
  end
42
43
 
43
44
  def test_random_fall_through
44
45
  assert_nothing_raised do
45
- 10.times { ThriftClient.new(ScribeThrift::Client, @servers).Log(@entry) }
46
+ 10.times { ThriftClient.new(ScribeThrift::Client, @servers, @options).Log(@entry) }
46
47
  end
47
48
  end
48
49
 
@@ -54,12 +55,12 @@ class ThriftClientTest < Test::Unit::TestCase
54
55
 
55
56
  def test_no_servers_eventually_raise
56
57
  assert_raises(Thrift::TransportException) do
57
- ThriftClient.new(ScribeThrift::Client, @servers[0,2]).Log(@entry)
58
+ ThriftClient.new(ScribeThrift::Client, @servers[0,2], @options).Log(@entry)
58
59
  end
59
60
  end
60
61
 
61
62
  def test_retry_period
62
- client = ThriftClient.new(ScribeThrift::Client, @servers[0,2], :server_retry_period => 1)
63
+ client = ThriftClient.new(ScribeThrift::Client, @servers[0,2], @options.merge(:server_retry_period => 1))
63
64
  assert_raises(Thrift::TransportException) { client.Log(@entry) }
64
65
  assert_raises(ThriftClient::NoServersAvailable) { client.Log(@entry) }
65
66
  sleep 1
@@ -2,16 +2,16 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{thrift_client}
5
- s.version = "0.1.3"
5
+ s.version = "0.2.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0.8") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Evan Weaver"]
9
9
  s.cert_chain = ["/Users/eweaver/p/configuration/gem_certificates/evan_weaver-original-public_cert.pem"]
10
- s.date = %q{2009-10-19}
10
+ s.date = %q{2009-10-28}
11
11
  s.description = %q{A Thrift client wrapper that encapsulates some common failover behavior.}
12
12
  s.email = %q{}
13
13
  s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README", "lib/thrift_client.rb", "lib/thrift_client/thrift.rb"]
14
- s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "lib/thrift_client.rb", "lib/thrift_client/thrift.rb", "test/test_helper.rb", "test/thrift_client_test.rb", "thrift_client.gemspec"]
14
+ s.files = ["CHANGELOG", "LICENSE", "Manifest", "README", "Rakefile", "lib/thrift_client.rb", "lib/thrift_client/thrift.rb", "test/test_helper.rb", "test/thrift_client_test.rb", "thrift_client.gemspec", "test/simple_test.rb"]
15
15
  s.homepage = %q{http://blog.evanweaver.com/files/doc/fauna/thrift_client/}
16
16
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Thrift_client", "--main", "README"]
17
17
  s.require_paths = ["lib"]
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.rubygems_version = %q{1.3.4}
20
20
  s.signing_key = %q{/Users/eweaver/p/configuration/gem_certificates/evan_weaver-original-private_key.pem}
21
21
  s.summary = %q{A Thrift client wrapper that encapsulates some common failover behavior.}
22
- s.test_files = ["test/test_helper.rb", "test/thrift_client_test.rb"]
22
+ s.test_files = ["test/simple_test.rb", "test/test_helper.rb", "test/thrift_client_test.rb"]
23
23
 
24
24
  if s.respond_to? :specification_version then
25
25
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thrift_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Weaver
@@ -30,7 +30,7 @@ cert_chain:
30
30
  yZ0=
31
31
  -----END CERTIFICATE-----
32
32
 
33
- date: 2009-10-19 00:00:00 -07:00
33
+ date: 2009-10-28 00:00:00 -07:00
34
34
  default_executable:
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
@@ -100,5 +100,6 @@ signing_key:
100
100
  specification_version: 3
101
101
  summary: A Thrift client wrapper that encapsulates some common failover behavior.
102
102
  test_files:
103
+ - test/simple_test.rb
103
104
  - test/test_helper.rb
104
105
  - test/thrift_client_test.rb
metadata.gz.sig CHANGED
@@ -1 +1,3 @@
1
- z���]H7���=_�i~���Pl:Em�P:�ގ ���?�2U�ix���a�qyY����\B���S�R#e0a��h0{"��Q� �t��JJ�,��^��*+yI}�2�����׫����{<�9FV�MV�؁�c&��-��|�w�Jk -�d��� � ���$Ҿ�/�q�������η D�S2���.����x��<�.X�������lUн�����f�\"�=I�C������fgMW
1
+ Q1He�����H�)����8�2'X+0'�?�1(O/�0�˪v������9G0u%����
2
+ �����d�U��bǷ��=��
3
+ ^đ��