testability-driver-qt-sut-plugin 1.0.3 → 1.0.4

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 (46) hide show
  1. data/installer/extconf.rb +1 -1
  2. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/action.rb +5 -5
  3. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/application.rb +174 -236
  4. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/attribute.rb +3 -3
  5. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/behaviour.rb +5 -5
  6. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/configure_behaviour.rb +7 -7
  7. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/events.rb +7 -7
  8. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/file_transfer.rb +1 -1
  9. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/find.rb +3 -3
  10. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/fixture.rb +5 -5
  11. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/gesture.rb +73 -60
  12. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/infologger.rb +3 -3
  13. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/key_press.rb +6 -6
  14. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/locale_db.rb +8 -8
  15. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/method.rb +1 -1
  16. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/multitouch.rb +348 -329
  17. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/os.rb +5 -5
  18. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/qt_api_method.rb +3 -3
  19. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/record.rb +7 -7
  20. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/screen_capture.rb +9 -9
  21. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/sut.rb +79 -27
  22. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/synchronization.rb +3 -3
  23. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/treewidgetitemcolumn.rb +5 -5
  24. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/type_text.rb +3 -3
  25. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/view_item.rb +5 -5
  26. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/webkit.rb +13 -11
  27. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/behaviours/widget.rb +70 -67
  28. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/commands/qt.rb +1 -1
  29. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/configure_command.rb +1 -1
  30. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/find_object.rb +1 -1
  31. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/fixture.rb +2 -3
  32. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/group.rb +1 -1
  33. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/infologger_command.rb +1 -1
  34. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/key_sequence.rb +3 -3
  35. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/screen_capture.rb +1 -1
  36. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/tap.rb +1 -1
  37. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/controllers/widget.rb +30 -14
  38. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/plugin.rb +8 -3
  39. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/adapter.rb +160 -29
  40. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/communication.rb +6 -8
  41. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/sut/controller.rb +13 -2
  42. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/find_object_generator.rb +50 -35
  43. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/message_composer.rb +129 -95
  44. data/lib/testability-driver-plugins/testability-driver-qt-sut-plugin/util/widget.rb +4 -4
  45. data/xml/behaviour/qt.xml +8 -12
  46. metadata +53 -72
@@ -40,7 +40,7 @@ module MobyController
40
40
  end
41
41
 
42
42
  # enable hooking for performance measurement & debug logging
43
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
43
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
44
44
 
45
45
  end #module FindObjectCommand
46
46
 
@@ -31,7 +31,7 @@ module MobyController
31
31
  # == raises
32
32
  # NotImplementedError: raised if unsupported command type
33
33
  def execute
34
- Kernel::raise ArgumentError.new( "Fixture '%s' not found for sut id '%s'" % [ @name, @sut_adapter.sut_id ] ) if ( plugin_params = MobyUtil::Parameter[ @sut_adapter.sut_id.to_sym ][ :fixtures ][ @params[:name].to_sym, nil ] ).nil?
34
+ Kernel::raise ArgumentError.new( "Fixture '%s' not found for sut id '%s'" % [ @name, @sut_adapter.sut_id ] ) if ( plugin_params = $parameters[ @sut_adapter.sut_id.to_sym ][ :fixtures ][ @params[:name].to_sym, nil ] ).nil?
35
35
 
36
36
  fixture_plugin = plugin_params.kind_of?(String) ? plugin_params : plugin_params[:plugin]
37
37
  @sut_adapter.send_service_request(Comms::MessageGenerator.generate(make_fixture_message(fixture_plugin, @params)))
@@ -43,8 +43,7 @@ module MobyController
43
43
  end
44
44
 
45
45
  # enable hooking for performance measurement & debug logging
46
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
47
-
46
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
48
47
 
49
48
  end # Fixture
50
49
 
@@ -43,7 +43,7 @@ module MobyController
43
43
  end
44
44
 
45
45
  # enable hooking for performance measurement & debug logging
46
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
46
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
47
47
 
48
48
  end #module Group
49
49
 
@@ -52,7 +52,7 @@ module MobyController
52
52
  end
53
53
 
54
54
  # enable hooking for performance measurement & debug logging
55
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
55
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
56
56
 
57
57
 
58
58
  end # InfoLoggerCommand
@@ -64,10 +64,10 @@ module MobyController
64
64
  Kernel::raise ArgumentError.new( "Wrong argument type %s for key (Expected: %s)" % [ key.class, "Symbol/Fixnum" ] ) unless [ Fixnum, Symbol ].include?( key.class )
65
65
 
66
66
  # verify that keymap is defined for sut if symbol used.
67
- Kernel::raise ArgumentError.new("Symbol #{ key.inspect } cannot be used due to no keymap defined for #{ sut.id } in TDriver configuration file.") if key.kind_of?( Symbol ) && MobyUtil::Parameter[ sut.id ][ :keymap ].nil?
67
+ Kernel::raise ArgumentError.new("Symbol #{ key.inspect } cannot be used due to no keymap defined for #{ sut.id } in TDriver configuration file.") if key.kind_of?( Symbol ) && $parameters[ sut.id ][ :keymap ].nil?
68
68
 
69
69
  # retrieve corresponding scan code (type of string, convert to fixnum) for symbol from keymap if available
70
- key = MobyUtil::Parameter[ sut.id ][ :keymap ][ key ].hex unless MobyUtil::Parameter[ sut.id ][ :keymap ][ key ].nil?
70
+ key = $parameters[ sut.id ][ :keymap ][ key ].hex unless $parameters[ sut.id ][ :keymap ][ key ].nil?
71
71
 
72
72
  # raise exception if value is other than fixnum
73
73
  Kernel::raise ArgumentError.new( "Scan code for :%s not defined in keymap" % key ) unless key.kind_of?( Fixnum )
@@ -90,7 +90,7 @@ module MobyController
90
90
  end
91
91
 
92
92
  # enable hooking for performance measurement & debug logging
93
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
93
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
94
94
 
95
95
  end #class
96
96
 
@@ -44,7 +44,7 @@ module MobyController
44
44
  end
45
45
 
46
46
  # enable hooking for performance measurement & debug logging
47
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
47
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
48
48
 
49
49
 
50
50
  end # ScreenCapture
@@ -42,7 +42,7 @@ module MobyController
42
42
  end
43
43
 
44
44
  # enable hooking for performance measurement & debug logging
45
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
45
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
46
46
 
47
47
  end # Tap
48
48
 
@@ -32,37 +32,53 @@ module MobyController
32
32
  # == raises
33
33
  # NotImplementedError: raised if unsupported command type
34
34
  def execute
35
- command_params = {:eventType => get_event_type, :name => get_command_name}
36
- command_params.merge!(get_command_params) if get_command_params
35
+
36
+ command_params = { :eventType => get_event_type, :name => get_command_name }
37
+
38
+ command_params.merge!( get_command_params ) if get_command_params
37
39
 
38
40
  builder = Nokogiri::XML::Builder.new{
39
- TasCommands( :id=> get_application_id, :transitions => get_transitions, :service => get_service || 'uiCommand' ) {
40
- Target( :TasId => get_object_id, :type => get_object_type ) {
41
- if get_command_value.kind_of? Array
42
- get_command_value.each do | command_part |
43
- Command( command_part[ :value ], command_part[ :params ] )
41
+
42
+ TasCommands( :id => get_application_id, :transitions => get_transitions, :service => get_service || 'uiCommand' ) {
43
+
44
+ Target( :TasId => get_object_id, :type => get_object_type ) {
45
+
46
+ if get_command_value.kind_of?( Array )
47
+
48
+ get_command_value.each do | command_part |
49
+ Command( command_part[ :value ], command_part[ :params ] )
50
+ end
51
+
52
+ elsif get_command_value
53
+
54
+ Command( get_command_value, command_params )
55
+
56
+ else
57
+
58
+ Command( command_params )
59
+
44
60
  end
45
- else
46
- Command( get_command_value || "", command_params )
47
- end
61
+
62
+ }
48
63
  }
49
- }
50
64
  }
51
65
 
52
66
  if @sut_adapter.group?
53
- @sut_adapter.append_command(builder.doc.root.children)
67
+ @sut_adapter.append_command( builder.doc.root.children )
54
68
  else
55
- @sut_adapter.send_service_request(Comms::MessageGenerator.generate(builder.to_xml))
69
+ @sut_adapter.send_service_request( Comms::MessageGenerator.generate( builder.to_xml ) )
56
70
  end
57
71
 
58
72
  end
59
73
 
60
74
  def set_adapter( adapter )
75
+
61
76
  @sut_adapter = adapter
77
+
62
78
  end
63
79
 
64
80
  # enable hooking for performance measurement & debug logging
65
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
81
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
66
82
 
67
83
 
68
84
  end #module Action
@@ -20,6 +20,11 @@
20
20
  # verify that TDriver is loaded
21
21
  Kernel::raise RuntimeError.new( "This SUT plugin requires Testability Driver and cannot be launched in standalone mode" ) unless (defined?( MATTI ) || defined?( TDriver ))
22
22
 
23
+ include TDriverVerify
24
+
25
+ require 'socket'
26
+ require 'zlib'
27
+
23
28
  module MobyPlugin
24
29
 
25
30
  module QT
@@ -95,8 +100,8 @@ module MobyPlugin
95
100
  def self.make_sut( sut_id )
96
101
 
97
102
  # tcp/ip read/write timeouts, default: 15 (seconds)
98
- socket_read_timeout = MobyUtil::Parameter[ sut_id ][ :socket_read_timeout, "15" ].to_i
99
- socket_write_timeout = MobyUtil::Parameter[ sut_id ][ :socket_write_timeout, "15" ].to_i
103
+ socket_read_timeout = $parameters[ sut_id ][ :socket_read_timeout, "15" ].to_i
104
+ socket_write_timeout = $parameters[ sut_id ][ :socket_write_timeout, "15" ].to_i
100
105
 
101
106
  MobyBase::SUT.new(
102
107
  MobyBase::SutController.new( "QT", MobyController::QT::SutAdapter.new( sut_id, socket_read_timeout, socket_write_timeout ) ),
@@ -107,7 +112,7 @@ module MobyPlugin
107
112
  end
108
113
 
109
114
  # enable hooking for performance measurement & debug logging
110
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
115
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
111
116
 
112
117
  # register plugin
113
118
  MobyUtil::PluginService.instance.register_plugin( self ) # Note: self is MobyPlugin::QT::SUT
@@ -24,16 +24,18 @@ module MobyController
24
24
  # Sut adapter that used TCP/IP connections to send and receive data from QT side.
25
25
  class SutAdapter < MobyController::SutAdapter
26
26
 
27
- attr_reader :sut_id
27
+ attr_reader(
28
+ :sut_id,
29
+ :socket_received_bytes,
30
+ :socket_sent_bytes,
31
+ :socket_received_packets,
32
+ :socket_sent_packets
33
+ )
28
34
 
29
35
  attr_accessor(
30
-
31
- :socket_read_timeout,
32
- :socket_write_timeout,
33
- :socket_received_bytes,
34
- :socket_sent_bytes
35
-
36
- )
36
+ :socket_read_timeout,
37
+ :socket_write_timeout
38
+ )
37
39
 
38
40
  # TODO: better way to set the host and port parameters
39
41
  # Initialize the tcp adapter for communicating with the device.
@@ -47,8 +49,12 @@ module MobyController
47
49
 
48
50
  @socket = nil
49
51
  @connected = false
50
- @socket_received_bytes=0
51
- @socket_sent_bytes=0
52
+
53
+ @socket_received_bytes = 0
54
+ @socket_sent_bytes = 0
55
+
56
+ @socket_received_packets = 0
57
+ @socket_sent_packets = 0
52
58
 
53
59
  @sut_id = sut_id
54
60
 
@@ -56,6 +62,7 @@ module MobyController
56
62
  @socket_read_timeout = receive_timeout
57
63
  @socket_write_timeout = send_timeout
58
64
 
65
+
59
66
  @counter = rand( 1000 )
60
67
 
61
68
  # connect socket
@@ -63,6 +70,7 @@ module MobyController
63
70
 
64
71
  end
65
72
 
73
+ # TODO: document me
66
74
  def disconnect
67
75
 
68
76
  @socket.close if @connected
@@ -71,18 +79,19 @@ module MobyController
71
79
 
72
80
  end
73
81
 
82
+ # TODO: document me
74
83
  def connect( id = nil )
75
84
 
76
85
  id ||= @sut_id
77
86
 
78
87
  begin
79
88
 
80
- @socket = TCPSocket.open( MobyUtil::Parameter[ id ][ :qttas_server_ip ], MobyUtil::Parameter[ id ][ :qttas_server_port ].to_i )
89
+ @socket = TCPSocket.open( $parameters[ id ][ :qttas_server_ip ], $parameters[ id ][ :qttas_server_port ].to_i )
81
90
 
82
91
  rescue => ex
83
92
 
84
- ip = "no ip" if ( ip = MobyUtil::Parameter[ id ][ :qttas_server_ip, "" ] ).empty?
85
- port = "no port" if ( port = MobyUtil::Parameter[ id ][ :qttas_server_port, "" ] ).empty?
93
+ ip = "no ip" if ( ip = $parameters[ id ][ :qttas_server_ip, "" ] ).empty?
94
+ port = "no port" if ( port = $parameters[ id ][ :qttas_server_port, "" ] ).empty?
86
95
 
87
96
  Kernel::raise IOError.new("Unable to connect QTTAS server, verify that it is running properly (#{ ip }:#{ port }): .\nException: #{ ex.message }")
88
97
  end
@@ -91,18 +100,27 @@ module MobyController
91
100
 
92
101
  end
93
102
 
103
+ # TODO: document me
94
104
  def group?
105
+
95
106
  @_group
107
+
96
108
  end
97
109
 
98
110
  # Set the document builder for the grouped behaviour message.
99
111
  def set_message_builder(builder)
112
+
100
113
  @_group = true
114
+
101
115
  @_builder = builder
116
+
102
117
  end
103
118
 
119
+ # TODO: document me
104
120
  def append_command(node_list)
121
+
105
122
  node_list.each {|ch| @_builder.doc.root.add_child(ch)}
123
+
106
124
  end
107
125
 
108
126
  # Sends a grouped command message to the server. Sets group to false and nils the builder
@@ -110,11 +128,17 @@ module MobyController
110
128
  # == returns
111
129
  # the amout of commands grouped (and send)
112
130
  def send_grouped_request
131
+
113
132
  @_group = false
133
+
114
134
  size = @_builder.doc.root.children.size
135
+
115
136
  send_service_request(Comms::MessageGenerator.generate(@_builder.to_xml))
137
+
116
138
  @_builder = nil
139
+
117
140
  size
141
+
118
142
  end
119
143
 
120
144
  # Send the message to the qt server
@@ -131,7 +155,7 @@ module MobyController
131
155
  message.message_id = ( @counter += 1 )
132
156
 
133
157
  # write request message to socket
134
- write_socket( message.make_binary_message(@counter) )
158
+ write_socket( message.make_binary_message( @counter ) )
135
159
 
136
160
  # read response to determine was the message handled properly and parse the header
137
161
  # header[ 0 ] = command_flag
@@ -141,6 +165,7 @@ module MobyController
141
165
  # header[ 4 ] = message_id
142
166
 
143
167
  header = nil
168
+
144
169
  body = nil
145
170
 
146
171
  read_message_id = 0
@@ -149,8 +174,10 @@ module MobyController
149
174
 
150
175
  header = read_socket( 12 ).unpack( 'CISCI' )
151
176
 
177
+ body = read_socket( header[ 1 ] )
178
+
152
179
  # read the message body and compare crc checksum
153
- Kernel::raise IOError.new( "CRC do not match. Maybe the message is corrupted!" ) if CRC::Crc16.crc16_ibm( body = read_socket( header[ 1 ] ) , 0xffff ) != header[ 2 ]
180
+ Kernel::raise IOError, "CRC do not match, response message body may be corrupted!" if CRC::Crc16.crc16_ibm( body, 0xffff ) != header[ 2 ]
154
181
 
155
182
  # validate response message; check that response message id matches the request
156
183
  # if smaller than expected try to read the next message but if bigger raise error
@@ -158,14 +185,15 @@ module MobyController
158
185
 
159
186
  if read_message_id < @counter
160
187
 
161
- MobyUtil::Logger.instance.log "warning" , "Response to request did not match: \"#{ header[ 4 ].to_s }\"<\"#{ @counter.to_s }\""
188
+ $logger.log "warning", "Response to request did not match: \"#{ header[ 4 ].to_s }\"<\"#{ @counter.to_s }\""
162
189
 
163
190
  elsif read_message_id > @counter
164
191
 
165
- MobyUtil::Logger.instance.log "fatal" , "Response to request did not match: \"#{ header[ 4 ].to_s }\">\"#{ @counter.to_s }\""
192
+ $logger.log "fatal", "Response to request did not match: \"#{ header[ 4 ].to_s }\">\"#{ @counter.to_s }\""
166
193
 
167
194
  # save to file?
168
- MobyUtil::Logger.instance.log "fatal" , body
195
+ $logger.log "fatal", body
196
+
169
197
  Kernel::raise RuntimeError.new( "Response to request did not match: \"#{ header[ 4 ].to_s }\"!=\"#{ @counter.to_s }\"" )
170
198
 
171
199
  end
@@ -174,8 +202,11 @@ module MobyController
174
202
 
175
203
  # inflate the message body if compressed
176
204
  if ( header[ 3 ] == 2 )
177
-
178
- body = Zlib::Inflate.inflate( body ) unless ( body = body[ 4..-1 ] ).empty?
205
+
206
+ # remove leading 4 bytes
207
+ body = body[ 4 .. -1 ]
208
+
209
+ body = Zlib::Inflate.inflate( body ) unless body.empty?
179
210
 
180
211
  end
181
212
 
@@ -184,13 +215,19 @@ module MobyController
184
215
  # 0 -> ERROR_MSG
185
216
  # 1 -> VALID_MSG
186
217
  # 2 -> OK_MESSAGE
187
- if header[ 0 ] == 0
188
- if body =~ /The application with Id \d+ is no longer available/
189
- Kernel::raise MobyBase::ApplicationNotAvailableError.new( body )
190
- else
191
- Kernel::raise RuntimeError.new( body )
192
- end
193
- end
218
+ if header[ 0 ] == 0
219
+
220
+ if body =~ /The application with Id \d+ is no longer available/
221
+
222
+ Kernel::raise MobyBase::ApplicationNotAvailableError, body
223
+
224
+ else
225
+
226
+ Kernel::raise RuntimeError, body
227
+
228
+ end
229
+
230
+ end
194
231
 
195
232
  # return the body ( and crc if required )
196
233
  return_crc ? [ body, header[ 2 ] ] : body
@@ -199,6 +236,7 @@ module MobyController
199
236
 
200
237
  private
201
238
 
239
+ # TODO: document me
202
240
  def read_socket( bytes_count )
203
241
 
204
242
  # store time before start receving data
@@ -214,26 +252,119 @@ module MobyController
214
252
 
215
253
  }
216
254
 
255
+ # useless?
217
256
  Kernel::raise IOError.new( "Socket reading error for %i bytes - No data retrieved" % [ bytes_count ] ) if read_buffer.nil?
218
257
 
219
258
  @socket_received_bytes += read_buffer.size
259
+
260
+ @socket_received_packets += 1
261
+
220
262
  read_buffer
263
+
264
+ =begin
265
+ begin
266
+
267
+ read_buffer = @socket.read_nonblock( bytes_count )
268
+
269
+ rescue Errno::EWOULDBLOCK
270
+
271
+ if TCPSocket.select( [ @socket ], nil, nil, @socket_read_timeout )
272
+
273
+ read_buffer = @socket.read_nonblock( bytes_count )
274
+
275
+ else
276
+
277
+ Kernel::raise IOError.new( "Socket reading timeout (%i) exceeded for %i bytes" % [ @socket_read_timeout, bytes_count ] )
278
+
279
+ end
280
+
281
+ end
282
+
283
+ read_buffer
284
+ =end
285
+
286
+ =begin
287
+ #Kernel::raise ThreadError, "Timeout within critical session" if Thread.critical
288
+
289
+ begin
290
+
291
+ # store current thread
292
+ main_thread = Thread.current
293
+
294
+ # create timeout thread
295
+ timeout_thread = Thread.new( @socket_read_timeout ){ | timeout, bytes_count |
296
+
297
+ # sleep the timeout
298
+ sleep time
299
+
300
+ # raise exception if timeout exceeds
301
+ main_thread.raise IOError.new( "Socket reading timeout (%i) exceeded for %i bytes" % [ timeout, bytes_count ] ) if main_thread.alive?
302
+
303
+ }
304
+
305
+ # read data from socket
306
+ @socket.read( bytes_count )
307
+
308
+ ensure
309
+
310
+ # ensure that timeout thread is terminated
311
+ timeout_thread.kill if timeout_thread && timeout_thread.alive?
312
+
313
+ @socket_received_bytes += bytes_count
314
+
315
+ end
316
+ =end
221
317
 
222
318
  end
223
319
 
320
+ # TODO: document me
224
321
  def write_socket( data )
225
-
322
+
226
323
  @socket_sent_bytes += data.size
227
324
 
325
+ @socket_sent_packets += 1
326
+
228
327
  @socket.write( data )
229
328
 
230
329
  # verify that there is no data in writing buffer
231
330
  Kernel::raise IOError.new( "Socket writing timeout (%i) exceeded for %i bytes" % [ @socket_write_timeout, data.length ] ) if TCPSocket::select( nil, [ @socket ], nil, @socket_write_timeout ).nil?
331
+
332
+ =begin
333
+
334
+ begin
335
+
336
+ # store current thread
337
+ main_thread = Thread.current
338
+
339
+ # create timeout thread
340
+ timeout_thread = Thread.new( @socket_write_timeout ){ | timeout, data.size |
341
+
342
+ # sleep the timeout
343
+ sleep time
344
+
345
+ # raise exception if timeout exceeds
346
+ main_thread.raise IOError.new( "Socket writing timeout (%i) exceeded for %i bytes" % [ timeout, bytes_count ] ) if main_thread.alive?
347
+
348
+ }
349
+
350
+ # read data from socket
351
+ @socket.write( data )
352
+
353
+ ensure
354
+
355
+ # ensure that timeout thread is terminated
356
+ timeout_thread.kill if timeout_thread and timeout_thread.alive?
357
+
358
+ @socket_sent_bytes += data.size
359
+
360
+ end
361
+
362
+ =end
232
363
 
233
364
  end
234
365
 
235
366
  # enable hooking for performance measurement & debug logging
236
- MobyUtil::Hooking.instance.hook_methods( self ) if defined?( MobyUtil::Hooking )
367
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
237
368
 
238
369
  end # SutAdapter
239
370