testability-driver 1.2.1 → 1.3.0
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/bin/tdriver-devtools +0 -0
- data/ext/native_extensions.c +165 -6
- data/lib/tdriver-devtools/behaviour/old/xml/update +0 -0
- data/lib/tdriver-devtools/behaviour/xml/generate.rb +0 -0
- data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +15 -1
- data/lib/tdriver-devtools/doc/update +0 -0
- data/lib/tdriver-devtools/doc/xslt/template.xsl +24 -14
- data/lib/tdriver-devtools/doc/xslt/update +0 -0
- data/lib/tdriver-devtools/tdriver-devtools.rb +0 -0
- data/lib/tdriver-devtools/tests/feature_tests/update +0 -0
- data/lib/tdriver/base/behaviour/{behaviour.rb → abstract.rb} +3 -6
- data/lib/tdriver/base/behaviour/behaviours/object_abstract.rb +107 -0
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +2 -2
- data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +47 -37
- data/lib/tdriver/base/behaviour/factory.rb +260 -382
- data/lib/tdriver/base/behaviour/loader.rb +22 -4
- data/lib/tdriver/base/controller/abstraction.rb +56 -0
- data/lib/tdriver/base/controller/loader.rb +21 -0
- data/lib/tdriver/base/loader.rb +3 -1
- data/lib/tdriver/base/sut/controller.rb +91 -74
- data/lib/tdriver/base/sut/factory.rb +8 -8
- data/lib/tdriver/base/sut/generic/behaviours/agent.rb +77 -0
- data/lib/tdriver/base/sut/generic/behaviours/sut.rb +116 -96
- data/lib/tdriver/base/sut/generic/commands/agent.rb +43 -0
- data/lib/tdriver/base/sut/sut.rb +10 -8
- data/lib/tdriver/base/test_object/abstract.rb +25 -24
- data/lib/tdriver/base/test_object/adapter.rb +67 -44
- data/lib/tdriver/base/test_object/behaviours/test_object.rb +79 -20
- data/lib/tdriver/base/test_object/factory.rb +45 -15
- data/lib/tdriver/base/test_object/xml/adapter.rb +80 -57
- data/lib/tdriver/env.rb +0 -0
- data/lib/tdriver/loader.rb +0 -0
- data/lib/tdriver/matti.rb +0 -0
- data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +1 -0
- data/lib/tdriver/report/report.rb +2 -1
- data/lib/tdriver/report/report_crash_file_capture.rb +12 -0
- data/lib/tdriver/report/report_creator.rb +6 -2
- data/lib/tdriver/report/report_execution_statistics.rb +27 -11
- data/lib/tdriver/report/report_graph_generator.rb +59 -0
- data/lib/tdriver/report/report_test_case_run.rb +34 -2
- data/lib/tdriver/report/report_writer.rb +12 -0
- data/lib/tdriver/tdriver.rb +12 -1
- data/lib/tdriver/util/agent/loader.rb +22 -0
- data/lib/tdriver/util/agent/service.rb +107 -0
- data/lib/tdriver/util/common/crc16.rb +17 -10
- data/lib/tdriver/util/common/hash.rb +4 -1
- data/lib/tdriver/util/common/kernel.rb +11 -0
- data/lib/tdriver/util/common/numeric.rb +48 -0
- data/lib/tdriver/util/common/object.rb +5 -2
- data/lib/tdriver/util/common/string.rb +8 -1
- data/lib/tdriver/util/filters/attribute_filter.rb +121 -0
- data/lib/tdriver/util/filters/loader.rb +29 -0
- data/lib/tdriver/util/fixture/loader.rb +22 -0
- data/lib/tdriver/util/fixture/service.rb +157 -0
- data/lib/tdriver/util/loader.rb +8 -2
- data/lib/tdriver/util/logger/logger.rb +12 -6
- data/lib/tdriver/util/other/config.rb +0 -0
- data/lib/tdriver/util/parameter/parameter.rb +221 -152
- data/lib/tdriver/util/plugin/error.rb +0 -0
- data/lib/tdriver/util/video/camera_linux.rb +36 -22
- data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +3 -13
- data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +13 -8
- data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +51 -9
- data/lib/tdriver/util/xml/xml.rb +4 -2
- data/lib/tdriver/verify/verify.rb +280 -621
- data/lib/tdriver/version.rb +1 -1
- data/xml/behaviours/generic.xml +34 -0
- data/xml/templates/generic.xml +20 -3
- metadata +168 -240
- data/lib/tdriver-devtools/tests/feature_tests/output/application_closable_0x3f.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/application_close.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/application_environment.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/application_executable_name.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/application_uid.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/created.rid +0 -1
- data/lib/tdriver-devtools/tests/feature_tests/output/find_find.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/flash_behaviour_flash.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/flash_behaviour_flash_images.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_application.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_capture_screen.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_child.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_clear_verify_blocks.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_connect.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_controller_execution_order.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_controller_execution_order_0x3d.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_current_application_id.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_disconnect.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_dump_count.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_freeze.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_frozen.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_application_id.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_object.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_operator_data.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_ui_dump.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_get_user_information.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_input.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_parameter.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_press_key.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_received_data.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh.feature +0 -20
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_timeout.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_tries.feature +0 -15
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_refresh_ui_dump.feature +0 -20
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_run.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_sent_data.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_state.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_translate.feature +0 -30
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_ui_type.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_ui_version.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_unfreeze.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_update.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_verify_always.feature +0 -20
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_verify_blocks.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_x_path.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data_0x3d.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/sut_xml_data_crc.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_down.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_status.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_power_up.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/switchbox_behaviour_reset.feature +0 -10
- data/lib/tdriver-devtools/tests/feature_tests/output/verification_test_object_exists_0x3f.feature +0 -15
- data/lib/tdriver/base/behaviour/factory_new.rb +0 -409
- data/lib/tdriver/base/test_object/identificator.rb +0 -518
- data/lib/tdriver/util/filters/dynamic_attributes.rb +0 -189
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
############################################################################
|
|
2
|
+
##
|
|
3
|
+
## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
|
4
|
+
## All rights reserved.
|
|
5
|
+
## Contact: Nokia Corporation (testabilitydriver@nokia.com)
|
|
6
|
+
##
|
|
7
|
+
## This file is part of Testability Driver.
|
|
8
|
+
##
|
|
9
|
+
## If you have questions regarding the use of this file, please contact
|
|
10
|
+
## Nokia at testabilitydriver@nokia.com .
|
|
11
|
+
##
|
|
12
|
+
## This library is free software; you can redistribute it and/or
|
|
13
|
+
## modify it under the terms of the GNU Lesser General Public
|
|
14
|
+
## License version 2.1 as published by the Free Software Foundation
|
|
15
|
+
## and appearing in the file LICENSE.LGPL included in the packaging
|
|
16
|
+
## of this file.
|
|
17
|
+
##
|
|
18
|
+
############################################################################
|
|
19
|
+
|
|
20
|
+
class ReportGraphGenerator
|
|
21
|
+
def initialize(columns,data)
|
|
22
|
+
@columns=columns
|
|
23
|
+
@data=data
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def generate_graph(file_name)
|
|
27
|
+
|
|
28
|
+
begin
|
|
29
|
+
require 'gruff'
|
|
30
|
+
rescue LoadError
|
|
31
|
+
$stderr.puts "Can't load the Gruff gem. If its missing from your system please run 'gem install gruff' to install it."
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
begin
|
|
35
|
+
g = Gruff::Line.new()
|
|
36
|
+
|
|
37
|
+
data_rows = Hash.new #Create hash for data
|
|
38
|
+
@columns.each do |title|
|
|
39
|
+
data_rows[title] = Array.new #Create array for data
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
@data.each do |value|
|
|
43
|
+
value.each_key do |key|
|
|
44
|
+
data_rows[key].push(value[key].to_f) #Put values in the row data
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
data_rows.each_key do |key|
|
|
49
|
+
g.data(key, data_rows[key])
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
g.write(file_name)
|
|
53
|
+
|
|
54
|
+
rescue Exception => e
|
|
55
|
+
puts "Graph creation failed #{e.message} from data: "
|
|
56
|
+
p data_rows
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -324,7 +324,31 @@ module TDriverReportCreator
|
|
|
324
324
|
def set_test_case_behaviour_log(value,test_case)
|
|
325
325
|
@test_case_behaviour_log << [value.to_s,test_case]
|
|
326
326
|
end
|
|
327
|
-
|
|
327
|
+
|
|
328
|
+
#This methods checks the available video devices
|
|
329
|
+
#
|
|
330
|
+
# === params
|
|
331
|
+
#
|
|
332
|
+
# === returns
|
|
333
|
+
# nil
|
|
334
|
+
def each_video_device
|
|
335
|
+
|
|
336
|
+
if $parameters[:report_video, nil] != nil
|
|
337
|
+
|
|
338
|
+
device_index = 0
|
|
339
|
+
$parameters[:report_video].split("|").each do | video_device |
|
|
340
|
+
if !video_device.strip.empty?
|
|
341
|
+
yield video_device.strip, device_index.to_s
|
|
342
|
+
device_index += 1
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
end
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
#This methods sets video recording of the test case
|
|
328
352
|
#
|
|
329
353
|
# === params
|
|
330
354
|
# rec_name: String, name of video file to create
|
|
@@ -338,6 +362,7 @@ module TDriverReportCreator
|
|
|
338
362
|
tc_video_width = 640
|
|
339
363
|
tc_video_height = 480
|
|
340
364
|
tc_video_fps = 30
|
|
365
|
+
tc_max_time = '99:00:00'
|
|
341
366
|
|
|
342
367
|
begin
|
|
343
368
|
tc_video_width = $parameters[ :report_video_width ].to_i
|
|
@@ -354,6 +379,11 @@ module TDriverReportCreator
|
|
|
354
379
|
rescue
|
|
355
380
|
# parameter not loaded, do nothing
|
|
356
381
|
end
|
|
382
|
+
begin
|
|
383
|
+
tc_max_time = $parameters[ :report_video_max_time ].to_i
|
|
384
|
+
rescue
|
|
385
|
+
# parameter not loaded, do nothing
|
|
386
|
+
end
|
|
357
387
|
|
|
358
388
|
|
|
359
389
|
@tc_video_recorders = []
|
|
@@ -549,7 +579,9 @@ module TDriverReportCreator
|
|
|
549
579
|
begin
|
|
550
580
|
sut_attributes[:sut].capture_screen( :Filename => dump_folder+'/'+time_stamp+'_'+sut_id.to_s+'_state.png', :Redraw => true ) if sut_attributes[:is_connected]
|
|
551
581
|
if arguments[:file]
|
|
552
|
-
|
|
582
|
+
base_name=File.basename(arguments[:file])
|
|
583
|
+
base_folder=File.dirname(arguments[:file])
|
|
584
|
+
sut_attributes[:sut].capture_screen( :Filename => "#{base_folder}/#{sut_id.to_s}_#{base_name}", :Redraw => true ) if sut_attributes[:is_connected]
|
|
553
585
|
end
|
|
554
586
|
image_html='<div class="img"><a href="state_xml/'<<
|
|
555
587
|
time_stamp+'_'+sut_id.to_s+'_state.png'<<
|
|
@@ -890,6 +890,7 @@ display: block;
|
|
|
890
890
|
format_behaviour_log(@test_case_behaviour_log)<<
|
|
891
891
|
'</dd>'<<
|
|
892
892
|
'</dl>'
|
|
893
|
+
|
|
893
894
|
end
|
|
894
895
|
if @test_case_user_data!=nil && !@test_case_user_data.empty?
|
|
895
896
|
html_body=html_body<<
|
|
@@ -899,6 +900,17 @@ display: block;
|
|
|
899
900
|
format_user_log_table( @test_case_user_data,@test_case_user_data_columns)<<
|
|
900
901
|
'</dd>'<<
|
|
901
902
|
'</dl>'
|
|
903
|
+
if $parameters[ :report_generate_duration_graph, false]=='true'
|
|
904
|
+
graph=ReportGraphGenerator.new(@test_case_user_data_columns,@test_case_user_data)
|
|
905
|
+
graph.generate_graph("#{folder}/graph.png")
|
|
906
|
+
html_body=html_body<<
|
|
907
|
+
'<dl class="togList">'<<
|
|
908
|
+
'<dt onclick="tog(this)" style="background-color: #CCCCCC;"><b style="font-size: large"><span><input id="Button1" type="button" value="Close" class="btn" /></span> Graph</b></dt>'<<
|
|
909
|
+
'<dd style="font-size: small">'<<
|
|
910
|
+
'<img border="0" src="graph.png"/>'<<
|
|
911
|
+
'</dd>'<<
|
|
912
|
+
'</dl>'
|
|
913
|
+
end
|
|
902
914
|
end
|
|
903
915
|
html_body=html_body<<
|
|
904
916
|
'</div>'
|
data/lib/tdriver/tdriver.rb
CHANGED
|
@@ -86,7 +86,7 @@ module TDriver
|
|
|
86
86
|
# ArgumentError:: Not connected to device 'id' if not connected at all / device already disconnected
|
|
87
87
|
# ArgumentError:: Sut id not given
|
|
88
88
|
# === example
|
|
89
|
-
# @sut = TDriver.reboot_sut(:Id =>'sut_qt') # for Qt, should be connected already
|
|
89
|
+
# @sut = TDriver.reboot_sut(:Id => 'sut_qt') # for Qt, should be connected already
|
|
90
90
|
def reboot_sut( sut_attributes = {} )
|
|
91
91
|
|
|
92
92
|
MobyBase::SUTFactory.instance.reboot_sut( sut_attributes )
|
|
@@ -167,6 +167,14 @@ module TDriver
|
|
|
167
167
|
File.expand_path( File.dirname( __FILE__ ) )
|
|
168
168
|
|
|
169
169
|
end
|
|
170
|
+
|
|
171
|
+
# == nodoc
|
|
172
|
+
# TODO: document me
|
|
173
|
+
def version
|
|
174
|
+
|
|
175
|
+
ENV['TDRIVER_VERSION'] || "unknown"
|
|
176
|
+
|
|
177
|
+
end
|
|
170
178
|
|
|
171
179
|
private
|
|
172
180
|
|
|
@@ -182,6 +190,9 @@ module TDriver
|
|
|
182
190
|
# set xml cache buffer size
|
|
183
191
|
MobyUtil::XML.buffer_size = $parameters[ :xml_cache_buffer_size, 10 ].to_i
|
|
184
192
|
|
|
193
|
+
# load behaviours
|
|
194
|
+
TDriver::BehaviourFactory.init( :path => File.join( config_dir, 'behaviours' ) )
|
|
195
|
+
|
|
185
196
|
# initialization done, everything is ready
|
|
186
197
|
$TDRIVER_INITIALIZED = true
|
|
187
198
|
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
############################################################################
|
|
2
|
+
##
|
|
3
|
+
## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
|
4
|
+
## All rights reserved.
|
|
5
|
+
## Contact: Nokia Corporation (testabilitydriver@nokia.com)
|
|
6
|
+
##
|
|
7
|
+
## This file is part of Testability Driver.
|
|
8
|
+
##
|
|
9
|
+
## If you have questions regarding the use of this file, please contact
|
|
10
|
+
## Nokia at testabilitydriver@nokia.com .
|
|
11
|
+
##
|
|
12
|
+
## This library is free software; you can redistribute it and/or
|
|
13
|
+
## modify it under the terms of the GNU Lesser General Public
|
|
14
|
+
## License version 2.1 as published by the Free Software Foundation
|
|
15
|
+
## and appearing in the file LICENSE.LGPL included in the packaging
|
|
16
|
+
## of this file.
|
|
17
|
+
##
|
|
18
|
+
############################################################################
|
|
19
|
+
|
|
20
|
+
# agent command services module
|
|
21
|
+
require File.expand_path( File.join( File.dirname( __FILE__ ), 'service.rb' ) )
|
|
22
|
+
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
############################################################################
|
|
2
|
+
##
|
|
3
|
+
## Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
|
4
|
+
## All rights reserved.
|
|
5
|
+
## Contact: Nokia Corporation (testabilitydriver@nokia.com)
|
|
6
|
+
##
|
|
7
|
+
## This file is part of Testability Driver.
|
|
8
|
+
##
|
|
9
|
+
## If you have questions regarding the use of this file, please contact
|
|
10
|
+
## Nokia at testabilitydriver@nokia.com .
|
|
11
|
+
##
|
|
12
|
+
## This library is free software; you can redistribute it and/or
|
|
13
|
+
## modify it under the terms of the GNU Lesser General Public
|
|
14
|
+
## License version 2.1 as published by the Free Software Foundation
|
|
15
|
+
## and appearing in the file LICENSE.LGPL included in the packaging
|
|
16
|
+
## of this file.
|
|
17
|
+
##
|
|
18
|
+
############################################################################
|
|
19
|
+
|
|
20
|
+
module TDriver
|
|
21
|
+
|
|
22
|
+
class AgentService
|
|
23
|
+
|
|
24
|
+
=begin
|
|
25
|
+
# remove all public methods
|
|
26
|
+
instance_methods.each{ | method |
|
|
27
|
+
undef_method( method ) unless method =~ /^__|^(methods|inspect|to_s|class|nil?|extend)/
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
# required by commands method to list available services
|
|
31
|
+
private :methods
|
|
32
|
+
=end
|
|
33
|
+
|
|
34
|
+
# TODO: document me
|
|
35
|
+
def initialize( options = {} )
|
|
36
|
+
|
|
37
|
+
# verify that options is type of hash
|
|
38
|
+
options.check_type Hash, 'wrong argument type $1 for AgentCommandService options (expected $2)'
|
|
39
|
+
|
|
40
|
+
# verify that sut is defined in options hash
|
|
41
|
+
options.require_key :sut
|
|
42
|
+
|
|
43
|
+
sut = options[ :sut ]
|
|
44
|
+
|
|
45
|
+
TDriver::BehaviourFactory.apply_behaviour(
|
|
46
|
+
:object => self,
|
|
47
|
+
:object_type => [ 'AgentCommandService' ],
|
|
48
|
+
:env => [ '*', *sut.environment.to_s.split(";") ],
|
|
49
|
+
:input_type => [ '*', *sut.input.to_s.split(";") ],
|
|
50
|
+
:version => [ '*', *sut.ui_version.to_s.split(";") ]
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# store given options
|
|
54
|
+
@options = options
|
|
55
|
+
|
|
56
|
+
# store sut variable
|
|
57
|
+
@sut = sut
|
|
58
|
+
|
|
59
|
+
# store caller backtrace
|
|
60
|
+
@caller = caller
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# TODO: document me
|
|
65
|
+
def commands
|
|
66
|
+
|
|
67
|
+
class << self
|
|
68
|
+
|
|
69
|
+
# retrieve all public methods
|
|
70
|
+
instance_methods( false ).select{ | name | true unless name =~ /^__|^commands$/ }
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
private
|
|
77
|
+
|
|
78
|
+
# TODO: document me
|
|
79
|
+
def execute_command( command_data_object )
|
|
80
|
+
|
|
81
|
+
begin
|
|
82
|
+
|
|
83
|
+
# execute command
|
|
84
|
+
@sut.__send__( :execute_command, command_data_object )
|
|
85
|
+
|
|
86
|
+
rescue MobyBase::ControllerNotFoundError
|
|
87
|
+
|
|
88
|
+
# raise exception if sut doesn't have controller for the command data object
|
|
89
|
+
raise NotImplementedError, "Agent command #{ command_data_object.parameters[ :command ].inspect } is not supported on #{ @sut.id.inspect }", @caller
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
private
|
|
96
|
+
|
|
97
|
+
# TODO: document me
|
|
98
|
+
def method_missing( id, *args )
|
|
99
|
+
|
|
100
|
+
# raise exception if unknown command or not supported by sut
|
|
101
|
+
raise RuntimeError, "agent command #{ id.inspect } not supported by #{ @options[ :sut ].id }", caller
|
|
102
|
+
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end # AgentCommandService
|
|
106
|
+
|
|
107
|
+
end # TDriver
|
|
@@ -73,20 +73,27 @@ module TDriver
|
|
|
73
73
|
|
|
74
74
|
public
|
|
75
75
|
|
|
76
|
-
#
|
|
77
|
-
|
|
76
|
+
# check if implementation is already loaded from TDriver native Ruby C Extension; native crc routines are ~10% faster
|
|
77
|
+
unless instance_methods.include?( 'native_extension' )
|
|
78
|
+
|
|
79
|
+
# CRC-16-CCITT
|
|
80
|
+
def crc16( buf, crc = 0 )
|
|
78
81
|
|
|
79
|
-
|
|
80
|
-
|
|
82
|
+
# calculate the checksum
|
|
83
|
+
buf.each_byte{ | x | crc = ( ( crc << 8 ) ^ @CCITT_16[ ( crc >> 8 ) ^ x ] ) & 0xffff }
|
|
81
84
|
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
# result
|
|
86
|
+
crc
|
|
84
87
|
|
|
85
|
-
|
|
88
|
+
end # crc16
|
|
89
|
+
|
|
90
|
+
# determines that native extension is not in use
|
|
91
|
+
def native_extension
|
|
92
|
+
|
|
93
|
+
false
|
|
94
|
+
|
|
95
|
+
end
|
|
86
96
|
|
|
87
|
-
# check if implementation is already loaded from TDriver native Ruby C Extension; native crc routines are ~10% faster
|
|
88
|
-
unless instance_methods.include?( 'crc16_ibm' )
|
|
89
|
-
|
|
90
97
|
# IBM-CRC-16: fallback when native extensions are not supported (e.g. jruby)
|
|
91
98
|
def crc16_ibm( buf, crc = 0xffff )
|
|
92
99
|
|
|
@@ -66,9 +66,12 @@ class Hash
|
|
|
66
66
|
# verify that receiver object contains all of given keys. Raises exception is key not found.
|
|
67
67
|
def require_key( key, message = 'required key $1 not found from hash' )
|
|
68
68
|
|
|
69
|
+
# store caller backtrace before calling fetch
|
|
70
|
+
backtrace = caller
|
|
71
|
+
|
|
69
72
|
fetch( key ){
|
|
70
73
|
|
|
71
|
-
raise ArgumentError, message.gsub
|
|
74
|
+
raise ArgumentError, message.gsub( "$1", key.inspect ), backtrace
|
|
72
75
|
|
|
73
76
|
}
|
|
74
77
|
|
|
@@ -27,6 +27,17 @@ module Kernel
|
|
|
27
27
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
+
# TODO: document me
|
|
31
|
+
def __method_path__
|
|
32
|
+
|
|
33
|
+
# retrieve filename, line number and method name
|
|
34
|
+
/^(.+?):(\d+)(?::in `(.*)')?/.match( caller.reverse[ -2 ].to_s )
|
|
35
|
+
|
|
36
|
+
# construct string with module/class and method name
|
|
37
|
+
"#{ ( [ Class, Module ].include?( self.class ) ? self.name : self.class.name ).to_s }##{ caller.first.to_s.scan(/`(.+)'$/).to_s }"
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
30
41
|
# TODO: document me
|
|
31
42
|
def warn_caller( message, remove_eval = true )
|
|
32
43
|
|
|
@@ -48,6 +48,54 @@ class Numeric
|
|
|
48
48
|
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
+
# TODO: document me
|
|
52
|
+
def not_negative( message = 'Given value ($1) must not be negative', exception = ArgumentError )
|
|
53
|
+
|
|
54
|
+
if negative?
|
|
55
|
+
|
|
56
|
+
# replace macros
|
|
57
|
+
message.gsub!( '$1', self.inspect )
|
|
58
|
+
|
|
59
|
+
raise exception, message, caller
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
self
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# TODO: document me
|
|
68
|
+
def not_zero( message = 'Given value must not be zero', exception = ArgumentError )
|
|
69
|
+
|
|
70
|
+
if zero?
|
|
71
|
+
|
|
72
|
+
# replace macros
|
|
73
|
+
message.gsub!( '$1', self.inspect )
|
|
74
|
+
|
|
75
|
+
raise exception, message, caller
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
self
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# TODO: document me
|
|
84
|
+
def not_positive( message = 'Given value ($1) must not be positive', exception = ArgumentError )
|
|
85
|
+
|
|
86
|
+
if positive?
|
|
87
|
+
|
|
88
|
+
# replace macros
|
|
89
|
+
message.gsub!( '$1', self.inspect )
|
|
90
|
+
|
|
91
|
+
raise exception, message, caller
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
self
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
|
|
51
99
|
# TODO: document me
|
|
52
100
|
def check_range( range, message = "value $1 is out of range ($2)" )
|
|
53
101
|
|
|
@@ -27,26 +27,29 @@ class Object
|
|
|
27
27
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
+
# TODO: document me
|
|
30
31
|
def true?
|
|
31
32
|
|
|
32
33
|
false
|
|
33
34
|
|
|
34
35
|
end
|
|
35
36
|
|
|
37
|
+
# TODO: document me
|
|
36
38
|
def false?
|
|
37
39
|
|
|
38
40
|
false
|
|
39
41
|
|
|
40
42
|
end
|
|
41
43
|
|
|
42
|
-
|
|
44
|
+
# TODO: document me
|
|
45
|
+
def not_blank( message = "object must not be blank", exception = ArgumentError )
|
|
43
46
|
|
|
44
47
|
raise exception, message, caller if blank?
|
|
45
48
|
|
|
46
49
|
self
|
|
47
50
|
|
|
48
51
|
end
|
|
49
|
-
|
|
52
|
+
|
|
50
53
|
# define method to class instance
|
|
51
54
|
def meta_def( method_name, &block )
|
|
52
55
|
|