rmodbus-ccutrer 2.1.0 → 2.1.1

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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/NEWS.md +14 -7
  3. data/README.md +8 -8
  4. data/examples/perfomance_rtu.rb +55 -56
  5. data/examples/perfomance_rtu_via_tcp.rb +54 -55
  6. data/examples/perfomance_tcp.rb +54 -55
  7. data/examples/simple_xpca_gateway.rb +85 -0
  8. data/examples/use_rtu_via_tcp_modbus.rb +14 -11
  9. data/examples/use_tcp_modbus.rb +14 -11
  10. data/lib/rmodbus/client/slave.rb +58 -70
  11. data/lib/rmodbus/client.rb +11 -8
  12. data/lib/rmodbus/debug.rb +7 -4
  13. data/lib/rmodbus/errors.rb +26 -2
  14. data/lib/rmodbus/ext.rb +72 -51
  15. data/lib/rmodbus/options.rb +4 -1
  16. data/lib/rmodbus/proxy.rb +14 -9
  17. data/lib/rmodbus/rtu.rb +39 -32
  18. data/lib/rmodbus/rtu_client.rb +5 -2
  19. data/lib/rmodbus/rtu_server.rb +8 -6
  20. data/lib/rmodbus/rtu_slave.rb +6 -2
  21. data/lib/rmodbus/rtu_via_tcp_server.rb +6 -4
  22. data/lib/rmodbus/server/slave.rb +4 -2
  23. data/lib/rmodbus/server.rb +97 -73
  24. data/lib/rmodbus/sp.rb +5 -2
  25. data/lib/rmodbus/tcp.rb +5 -2
  26. data/lib/rmodbus/tcp_client.rb +3 -0
  27. data/lib/rmodbus/tcp_server.rb +27 -25
  28. data/lib/rmodbus/tcp_slave.rb +17 -16
  29. data/lib/rmodbus/version.rb +3 -1
  30. data/lib/rmodbus.rb +20 -18
  31. metadata +65 -36
  32. data/Rakefile +0 -9
  33. data/examples/simple-xpca-gateway.rb +0 -84
  34. data/spec/client_spec.rb +0 -88
  35. data/spec/exception_spec.rb +0 -120
  36. data/spec/ext_spec.rb +0 -52
  37. data/spec/logging_spec.rb +0 -82
  38. data/spec/proxy_spec.rb +0 -74
  39. data/spec/read_rtu_response_spec.rb +0 -92
  40. data/spec/response_mismach_spec.rb +0 -163
  41. data/spec/rtu_client_spec.rb +0 -80
  42. data/spec/rtu_server_spec.rb +0 -29
  43. data/spec/rtu_via_tcp_client_spec.rb +0 -76
  44. data/spec/rtu_via_tcp_server_spec.rb +0 -84
  45. data/spec/slave_spec.rb +0 -55
  46. data/spec/spec_helper.rb +0 -54
  47. data/spec/tcp_client_spec.rb +0 -88
  48. data/spec/tcp_server_spec.rb +0 -158
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  begin
2
- require 'gserver'
4
+ require "gserver"
3
5
  rescue
4
6
  warn "[WARNING] Install `gserver` gem for use TCPServer"
5
7
  end
@@ -15,9 +17,9 @@ module ModBus
15
17
  # slave.input_registers = [1,2,3,4]
16
18
  # srv.logger = Logger.new($stdout)
17
19
  # srv.start
18
- class TCPServer < GServer
19
- include Debug
20
- include Server
20
+ class TCPServer < GServer
21
+ include Debug
22
+ include Server
21
23
 
22
24
  # Init server
23
25
  # @param [Integer] port listen port
@@ -25,11 +27,11 @@ module ModBus
25
27
  # @param [Hash] opts options of server
26
28
  # @option opts [String] :host host of server default '127.0.0.1'
27
29
  # @option opts [Float, Integer] :max_connection max of TCP connection with server default 4
28
- def initialize(port = 502, opts = {})
30
+ def initialize(port = 502, opts = {})
29
31
  opts[:host] = DEFAULT_HOST unless opts[:host]
30
32
  opts[:max_connection] = 4 unless opts[:max_connection]
31
- super(port, host = opts[:host], maxConnection = opts[:max_connection])
32
- end
33
+ super(port, opts[:host], opts[:max_connection])
34
+ end
33
35
 
34
36
  # set the default param
35
37
  def with_slave(uid = 255)
@@ -39,29 +41,29 @@ module ModBus
39
41
  # Serve requests
40
42
  # @param [TCPSocket] io socket
41
43
  def serve(io)
42
- while not stopped?
44
+ until stopped?
43
45
  header = io.read(7)
44
- tx_id = header[0,2]
45
- proto_id = header[2,2]
46
- len = header[4,2].unpack('n')[0]
46
+ tx_id = header[0, 2]
47
+ proto_id = header[2, 2]
48
+ len = header[4, 2].unpack1("n")
47
49
  unit_id = header.getbyte(6)
48
- if proto_id == "\x00\x00"
49
- req = io.read(len - 1)
50
- log "Server RX (#{req.size} bytes): #{logging_bytes(req)}"
50
+ next unless proto_id == "\x00\x00"
51
+
52
+ req = io.read(len - 1)
53
+ log "Server RX (#{req.size} bytes): #{logging_bytes(req)}"
51
54
 
52
- func = req.getbyte(0)
53
- params = parse_request(func, req)
54
- pdu = exec_req(unit_id, func, params, req)
55
+ func = req.getbyte(0)
56
+ params = parse_request(func, req)
57
+ pdu = exec_req(unit_id, func, params, req)
55
58
 
56
- if pdu
57
- resp = tx_id + "\0\0" + (pdu.size + 1).to_word + unit_id.chr + pdu
58
- log "Server TX (#{resp.size} bytes): #{logging_bytes(resp)}"
59
- io.write resp
60
- else
61
- log "Ignored server RX (invalid unit ID #{unit_id}, #{req.size} bytes): #{logging_bytes(req)}"
62
- end
59
+ if pdu
60
+ resp = "#{tx_id}\x00\x00#{(pdu.size + 1).to_word}#{unit_id.chr}#{pdu}"
61
+ log "Server TX (#{resp.size} bytes): #{logging_bytes(resp)}"
62
+ io.write resp
63
+ else
64
+ log "Ignored server RX (invalid unit ID #{unit_id}, #{req.size} bytes): #{logging_bytes(req)}"
63
65
  end
64
66
  end
65
67
  end
66
- end
68
+ end
67
69
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModBus
2
4
  # TCP slave implementation
3
5
  # @example
@@ -16,16 +18,17 @@ module ModBus
16
18
  # @see Slave::initialize
17
19
  def initialize(uid, io)
18
20
  @transaction = 0
19
- super(uid, io)
21
+ super
20
22
  end
21
23
 
22
24
  private
25
+
23
26
  # overide method for RTU over TCP implamentaion
24
27
  # @see Slave#query
25
28
  def send_pdu(pdu)
26
- @transaction = 0 if @transaction.next > 65535
29
+ @transaction = 0 if @transaction.next > 65_535
27
30
  @transaction += 1
28
- msg = @transaction.to_word + "\0\0" + (pdu.size + 1).to_word + @uid.chr + pdu
31
+ msg = "#{@transaction.to_word}\x00\x00#{(pdu.size + 1).to_word}#{@uid.chr}#{pdu}"
29
32
  @io.write msg
30
33
 
31
34
  log "Tx (#{msg.size} bytes): " + logging_bytes(msg)
@@ -36,19 +39,17 @@ module ModBus
36
39
  def read_pdu
37
40
  loop do
38
41
  header = @io.read(7)
39
- if header
40
- trn = header[0,2].unpack('n')[0]
41
- len = header[4,2].unpack('n')[0]
42
- msg = @io.read(len-1)
43
-
44
- log "Rx (#{(header + msg).size} bytes): " + logging_bytes(header + msg)
45
-
46
- if trn == @transaction
47
- return msg
48
- else
49
- log "Transaction number mismatch. A packet is ignored."
50
- end
51
- end
42
+ next unless header
43
+
44
+ trn = header[0, 2].unpack1("n")
45
+ len = header[4, 2].unpack1("n")
46
+ msg = @io.read(len - 1)
47
+
48
+ log "Rx (#{(header + msg).size} bytes): " + logging_bytes(header + msg)
49
+
50
+ return msg if trn == @transaction
51
+
52
+ log "Transaction number mismatch. A packet is ignored."
52
53
  end
53
54
  end
54
55
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ModBus
2
- VERSION = '2.1.0'
4
+ VERSION = "2.1.1"
3
5
  end
data/lib/rmodbus.rb CHANGED
@@ -1,21 +1,23 @@
1
- require 'rmodbus/ext'
2
- require 'rmodbus/proxy'
3
- require 'rmodbus/version'
1
+ # frozen_string_literal: true
2
+
3
+ require "rmodbus/ext"
4
+ require "rmodbus/proxy"
5
+ require "rmodbus/version"
4
6
 
5
7
  module ModBus
6
- autoload :Errors, 'rmodbus/errors'
7
- autoload :Debug, 'rmodbus/debug'
8
- autoload :Options, 'rmodbus/options'
9
- autoload :SP, 'rmodbus/sp'
10
- autoload :RTU, 'rmodbus/rtu'
11
- autoload :TCP, 'rmodbus/tcp'
12
- autoload :Client, 'rmodbus/client'
13
- autoload :Server, 'rmodbus/server'
14
- autoload :TCPSlave, 'rmodbus/tcp_slave'
15
- autoload :TCPClient, 'rmodbus/tcp_client'
16
- autoload :TCPServer, 'rmodbus/tcp_server'
17
- autoload :RTUSlave, 'rmodbus/rtu_slave'
18
- autoload :RTUClient, 'rmodbus/rtu_client'
19
- autoload :RTUServer, 'rmodbus/rtu_server'
20
- autoload :RTUViaTCPServer, 'rmodbus/rtu_via_tcp_server'
8
+ autoload :Errors, "rmodbus/errors"
9
+ autoload :Debug, "rmodbus/debug"
10
+ autoload :Options, "rmodbus/options"
11
+ autoload :SP, "rmodbus/sp"
12
+ autoload :RTU, "rmodbus/rtu"
13
+ autoload :TCP, "rmodbus/tcp"
14
+ autoload :Client, "rmodbus/client"
15
+ autoload :Server, "rmodbus/server"
16
+ autoload :TCPSlave, "rmodbus/tcp_slave"
17
+ autoload :TCPClient, "rmodbus/tcp_client"
18
+ autoload :TCPServer, "rmodbus/tcp_server"
19
+ autoload :RTUSlave, "rmodbus/rtu_slave"
20
+ autoload :RTUClient, "rmodbus/rtu_client"
21
+ autoload :RTUServer, "rmodbus/rtu_server"
22
+ autoload :RTUViaTCPServer, "rmodbus/rtu_via_tcp_server"
21
23
  end
metadata CHANGED
@@ -1,15 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rmodbus-ccutrer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - A.Timin, J. Sanders, K. Reynolds, F. Luizão, C. Cutrer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-26 00:00:00.000000000 Z
11
+ date: 2024-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ccutrer-serialport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: gserver
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.0'
13
55
  - !ruby/object:Gem::Dependency
14
56
  name: rake
15
57
  requirement: !ruby/object:Gem::Requirement
@@ -25,61 +67,61 @@ dependencies:
25
67
  - !ruby/object:Gem::Version
26
68
  version: '13.0'
27
69
  - !ruby/object:Gem::Dependency
28
- name: bundler
70
+ name: rspec
29
71
  requirement: !ruby/object:Gem::Requirement
30
72
  requirements:
31
73
  - - "~>"
32
74
  - !ruby/object:Gem::Version
33
- version: '2.2'
75
+ version: '3.11'
34
76
  type: :development
35
77
  prerelease: false
36
78
  version_requirements: !ruby/object:Gem::Requirement
37
79
  requirements:
38
80
  - - "~>"
39
81
  - !ruby/object:Gem::Version
40
- version: '2.2'
82
+ version: '3.11'
41
83
  - !ruby/object:Gem::Dependency
42
- name: rspec
84
+ name: rubocop-inst
43
85
  requirement: !ruby/object:Gem::Requirement
44
86
  requirements:
45
87
  - - "~>"
46
88
  - !ruby/object:Gem::Version
47
- version: '2.99'
89
+ version: '1.0'
48
90
  type: :development
49
91
  prerelease: false
50
92
  version_requirements: !ruby/object:Gem::Requirement
51
93
  requirements:
52
94
  - - "~>"
53
95
  - !ruby/object:Gem::Version
54
- version: '2.99'
96
+ version: '1.0'
55
97
  - !ruby/object:Gem::Dependency
56
- name: ccutrer-serialport
98
+ name: rubocop-rake
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
101
  - - "~>"
60
102
  - !ruby/object:Gem::Version
61
- version: 1.0.0
103
+ version: '0.6'
62
104
  type: :development
63
105
  prerelease: false
64
106
  version_requirements: !ruby/object:Gem::Requirement
65
107
  requirements:
66
108
  - - "~>"
67
109
  - !ruby/object:Gem::Version
68
- version: 1.0.0
110
+ version: '0.6'
69
111
  - !ruby/object:Gem::Dependency
70
- name: gserver
112
+ name: rubocop-rspec
71
113
  requirement: !ruby/object:Gem::Requirement
72
114
  requirements:
73
115
  - - "~>"
74
116
  - !ruby/object:Gem::Version
75
- version: '0.0'
117
+ version: '3.0'
76
118
  type: :development
77
119
  prerelease: false
78
120
  version_requirements: !ruby/object:Gem::Requirement
79
121
  requirements:
80
122
  - - "~>"
81
123
  - !ruby/object:Gem::Version
82
- version: '0.0'
124
+ version: '3.0'
83
125
  - !ruby/object:Gem::Dependency
84
126
  name: digest-crc
85
127
  requirement: !ruby/object:Gem::Requirement
@@ -95,7 +137,7 @@ dependencies:
95
137
  - !ruby/object:Gem::Version
96
138
  version: '0.1'
97
139
  description:
98
- email: atimin@gmail.com
140
+ email: cody@cutrer.us
99
141
  executables: []
100
142
  extensions: []
101
143
  extra_rdoc_files:
@@ -104,11 +146,10 @@ extra_rdoc_files:
104
146
  files:
105
147
  - NEWS.md
106
148
  - README.md
107
- - Rakefile
108
149
  - examples/perfomance_rtu.rb
109
150
  - examples/perfomance_rtu_via_tcp.rb
110
151
  - examples/perfomance_tcp.rb
111
- - examples/simple-xpca-gateway.rb
152
+ - examples/simple_xpca_gateway.rb
112
153
  - examples/use_rtu_via_tcp_modbus.rb
113
154
  - examples/use_tcp_modbus.rb
114
155
  - lib/rmodbus.rb
@@ -132,25 +173,13 @@ files:
132
173
  - lib/rmodbus/tcp_server.rb
133
174
  - lib/rmodbus/tcp_slave.rb
134
175
  - lib/rmodbus/version.rb
135
- - spec/client_spec.rb
136
- - spec/exception_spec.rb
137
- - spec/ext_spec.rb
138
- - spec/logging_spec.rb
139
- - spec/proxy_spec.rb
140
- - spec/read_rtu_response_spec.rb
141
- - spec/response_mismach_spec.rb
142
- - spec/rtu_client_spec.rb
143
- - spec/rtu_server_spec.rb
144
- - spec/rtu_via_tcp_client_spec.rb
145
- - spec/rtu_via_tcp_server_spec.rb
146
- - spec/slave_spec.rb
147
- - spec/spec_helper.rb
148
- - spec/tcp_client_spec.rb
149
- - spec/tcp_server_spec.rb
150
- homepage: https://github.com/ccutrer/rmodbus
176
+ homepage: https://github.com/rmodbus/rmodbus
151
177
  licenses:
152
178
  - BSD-3-Clause
153
- metadata: {}
179
+ metadata:
180
+ changelog_uri: https://github.com/rmodbus/rmodbus/blob/main/NEWS.md
181
+ source_code_uri: https://github.com/rmodbus/rmodbus
182
+ rubygems_mfa_required: 'true'
154
183
  post_install_message:
155
184
  rdoc_options:
156
185
  - "--title"
@@ -164,14 +193,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
193
  requirements:
165
194
  - - ">="
166
195
  - !ruby/object:Gem::Version
167
- version: '0'
196
+ version: '2.7'
168
197
  required_rubygems_version: !ruby/object:Gem::Requirement
169
198
  requirements:
170
199
  - - ">="
171
200
  - !ruby/object:Gem::Version
172
201
  version: '0'
173
202
  requirements: []
174
- rubygems_version: 3.1.2
203
+ rubygems_version: 3.5.11
175
204
  signing_key:
176
205
  specification_version: 4
177
206
  summary: RModBus - free implementation of protocol ModBus
data/Rakefile DELETED
@@ -1,9 +0,0 @@
1
- # encoding: utf-8
2
-
3
- begin
4
- require 'bundler/setup'
5
- rescue LoadError
6
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
- end
8
-
9
- Bundler::GemHelper.install_tasks
@@ -1,84 +0,0 @@
1
- =begin
2
- It's very simple example of implementation XPCA gateway (see http://www.xpca.org)
3
- for communication with TCP ModBus devices
4
- It receives REST requests (e.g http://127.0.0.1:4567/mb/127.0.0.1/8502/1/coils/6/17 )
5
- and returns data in JSON format addr : data:
6
- {"coils": {
7
- "6":{
8
- "value":0,
9
- "timestamp":"2011-07-12 18:11:03 +0000",
10
- "quality":"good"
11
- },
12
- "7":{
13
- "value":0,
14
- "timestamp":"2011-07-12 18:11:03 +0000",
15
- "quality":"good"
16
- }
17
- ...
18
- }
19
-
20
- This code requies gems: rmodbus, sinatra and json
21
- 2011 (c) Aleksey Timin
22
- =end
23
-
24
- require 'rubygems'
25
- require 'rmodbus'
26
- require 'sinatra'
27
- require 'json'
28
-
29
- # Launche TCP ModBus server for test
30
- IP = '127.0.0.1'
31
- PORT = 8502
32
-
33
- @srv = ModBus::TCPServer.new(PORT,1)
34
-
35
- @srv.holding_registers = Array.new(100) { |i| i = i + 1 }
36
- @srv.input_registers = Array.new(100) { |i| i = i + 1 }
37
- @srv.coils = Array.new(100) { |i| i = 0 }
38
- @srv.discrete_inputs = Array.new(100) { |i| i = 0 }
39
-
40
- @srv.start
41
-
42
-
43
- # Calc a GET request
44
- # @example
45
- # http://127.0.0.1:4567/mb/127.0.0.1/8502/1/coils/6/17
46
- #
47
- # HTTP route: GET http://localhost/mb/:ip/:port/:slave/:dataplace/:firstaddr/:lastaddr
48
- #
49
- # :ip - ip addr of ModBus TCP Server
50
- # :port - port of ModBUs TCP Server
51
- # :slave - id of slave device
52
- # :dataplace - valid values: coils, discrete_inputs, input_registers, holding_registers
53
- # :firstaddr - first addr of registers(contacts)
54
- # :lastaddr - last addr of registers(contacts)
55
- get '/mb/:ip/:port/:slave/:dataplace/:firstaddr/:lastaddr' do
56
- resp = {}
57
- begin
58
- data = []
59
- ModBus::TCPClient.new(params[:ip].to_s, params[:port].to_i) do |cl|
60
- cl.with_slave(params[:slave].to_i) do |slave|
61
- slave.debug = true
62
- dataplace = slave.send params[:dataplace]
63
- data = dataplace[params[:firstaddr].to_i .. params[:lastaddr].to_i]
64
- end
65
- end
66
-
67
- resp = { params[:dataplace] => {}}
68
- data.each_with_index do |v,i|
69
- resp[params[:dataplace]][params[:firstaddr].to_i + i] = {
70
- :value => v,
71
- :timestamp => Time.now.utc.strftime("%Y-%m-%d %H:%M:%S %z"),
72
- :quality => "good"
73
- }
74
- end
75
- rescue Exception => e
76
- resp = { :error => {
77
- :type => e.class,
78
- :message => e.message }
79
- }
80
- end
81
-
82
- content_type "application/json"
83
- resp.to_json
84
- end
data/spec/client_spec.rb DELETED
@@ -1,88 +0,0 @@
1
- # -*- coding: ascii
2
- require 'rmodbus'
3
-
4
- describe ModBus::Client do
5
- before do
6
- @cl = ModBus::Client.new
7
- end
8
-
9
- it "should give object provider for slave" do
10
- slave = @cl.with_slave(1)
11
- slave.uid.should eq(1)
12
- end
13
-
14
- it "should give object provider for slave in block" do
15
- @cl.with_slave(1) do |slave|
16
- slave.uid.should eq(1)
17
- end
18
- end
19
-
20
- it "should connect with TCP server" do
21
- ModBus::Client.connect do |cl|
22
- cl.should be_instance_of(ModBus::Client)
23
- end
24
- end
25
-
26
- it ":new alias :connect" do
27
- ModBus::Client.new do |cl|
28
- cl.should be_instance_of(ModBus::Client)
29
- end
30
- end
31
-
32
- it "should close the connection when an exception is raised in the given block" do
33
- expect {
34
- ModBus::Client.new do |client|
35
- client.should_receive(:close)
36
- raise
37
- end
38
- }.to raise_error
39
- end
40
-
41
- it 'should common for all slaves :debug flag' do
42
- @cl.logger = true
43
- @cl.with_slave(1) do |slave_1|
44
- slave_1.logger.should eq true
45
- end
46
- @cl.with_slave(2) do |slave_2|
47
- slave_2.logger = false
48
- slave_2.logger.should eq false
49
- end
50
- end
51
-
52
- it 'should common for all slaves :raise_exception_on_mismatch flag' do
53
- @cl.raise_exception_on_mismatch = true
54
- @cl.with_slave(1) do |slave_1|
55
- slave_1.raise_exception_on_mismatch.should be_truthy
56
- end
57
-
58
- @cl.with_slave(2) do |slave_2|
59
- slave_2.raise_exception_on_mismatch = false
60
- slave_2.raise_exception_on_mismatch.should be_falsey
61
- end
62
- end
63
-
64
- it 'should common for all slaves :read_retries options' do
65
- @cl.read_retries = 5
66
- @cl.with_slave(1) do |slave_1|
67
- slave_1.read_retries.should eql(5)
68
- end
69
-
70
- @cl.with_slave(2) do |slave_2|
71
- slave_2.read_retries = 15
72
- slave_2.read_retries.should eql(15)
73
- end
74
- end
75
-
76
- it 'should common for all slaves :read_retry_timeout options' do
77
- @cl.read_retry_timeout = 5
78
- @cl.with_slave(1) do |slave_1|
79
- slave_1.read_retry_timeout.should eql(5)
80
- end
81
-
82
- @cl.with_slave(2) do |slave_2|
83
- slave_2.read_retry_timeout = 15
84
- slave_2.read_retry_timeout.should eql(15)
85
- end
86
- end
87
-
88
- end