cutedriver-driver 2.0.0.20210120164037

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 (226) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +16 -0
  3. data/bin/start_app_perf +200 -0
  4. data/bin/tdriver-devtools +3 -0
  5. data/config/sut_parameters.rb +52 -0
  6. data/config/sut_setup.rb +32 -0
  7. data/config/sut_teardown.rb +32 -0
  8. data/config/tdriver_custom_error_recovery.rb +83 -0
  9. data/ext/extconf.rb +70 -0
  10. data/ext/native_extensions.c +315 -0
  11. data/lib/matti.rb +25 -0
  12. data/lib/tdriver-devtools/behaviour/old/xml/example/flick-example.rb +120 -0
  13. data/lib/tdriver-devtools/behaviour/old/xml/example/impl.rb_invalid +194 -0
  14. data/lib/tdriver-devtools/behaviour/old/xml/generate_behaviour_xml.rb +95 -0
  15. data/lib/tdriver-devtools/behaviour/old/xml/lib/tdriver_generator.rb +722 -0
  16. data/lib/tdriver-devtools/behaviour/old/xml/qdoc_generator.rb +321 -0
  17. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.method.template +43 -0
  18. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.module.template +54 -0
  19. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.argument.template +7 -0
  20. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.argument_type.template +7 -0
  21. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.exception.template +5 -0
  22. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.howto.line.template +2 -0
  23. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.howto.template +5 -0
  24. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.method.template +23 -0
  25. data/lib/tdriver-devtools/behaviour/old/xml/templates/behaviour.xml.template +14 -0
  26. data/lib/tdriver-devtools/behaviour/old/xml/update +3 -0
  27. data/lib/tdriver-devtools/behaviour/xml/generate.rb +88 -0
  28. data/lib/tdriver-devtools/behaviour/xml/rdoc_behaviour_xml_generator.rb +1945 -0
  29. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument.default.template +1 -0
  30. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument.template +3 -0
  31. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.argument_type.template +4 -0
  32. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.exception.template +4 -0
  33. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.arguments.template +4 -0
  34. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.deprecated.template +3 -0
  35. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.exceptions.template +3 -0
  36. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.info.template +1 -0
  37. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.returns.template +3 -0
  38. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.tables.template +3 -0
  39. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.method.template +12 -0
  40. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.returns.template +5 -0
  41. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.item.template +1 -0
  42. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.row.template +2 -0
  43. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.table.template +8 -0
  44. data/lib/tdriver-devtools/behaviour/xml/templates/behaviour.xml.template +14 -0
  45. data/lib/tdriver-devtools/doc/behaviour_xml/QtExampleGestureBehaviour.xml +138 -0
  46. data/lib/tdriver-devtools/doc/behaviour_xml/created.rid +1 -0
  47. data/lib/tdriver-devtools/doc/behaviour_xml/tdriver.hash +1 -0
  48. data/lib/tdriver-devtools/doc/feature_xml/qt_widget_hold.feature.xml +9 -0
  49. data/lib/tdriver-devtools/doc/feature_xml/qt_widget_tap.feature.xml +9 -0
  50. data/lib/tdriver-devtools/doc/generate.rb +917 -0
  51. data/lib/tdriver-devtools/doc/update +1 -0
  52. data/lib/tdriver-devtools/doc/xslt/html.rb +7 -0
  53. data/lib/tdriver-devtools/doc/xslt/template.xsl +2170 -0
  54. data/lib/tdriver-devtools/doc/xslt/update +3 -0
  55. data/lib/tdriver-devtools/plugin/placeholder.txt +1 -0
  56. data/lib/tdriver-devtools/tdriver-devtools.rb +404 -0
  57. data/lib/tdriver-devtools/tests/feature_tests/example/behaviour_example.rb +100 -0
  58. data/lib/tdriver-devtools/tests/feature_tests/generate.rb +82 -0
  59. data/lib/tdriver-devtools/tests/feature_tests/lib/custom_rdoc_generator.rb +468 -0
  60. data/lib/tdriver-devtools/tests/feature_tests/templates/feature_attribute.template +5 -0
  61. data/lib/tdriver-devtools/tests/feature_tests/templates/feature_method.template +5 -0
  62. data/lib/tdriver-devtools/tests/feature_tests/templates/scenario_attribute.template +5 -0
  63. data/lib/tdriver-devtools/tests/feature_tests/templates/scenario_method.template +5 -0
  64. data/lib/tdriver-devtools/tests/feature_tests/update +3 -0
  65. data/lib/tdriver.rb +23 -0
  66. data/lib/tdriver/base/behaviour/abstract.rb +29 -0
  67. data/lib/tdriver/base/behaviour/behaviours/object_abstract.rb +107 -0
  68. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_composition.rb +99 -0
  69. data/lib/tdriver/base/behaviour/behaviours/object_behaviour_description.rb +278 -0
  70. data/lib/tdriver/base/behaviour/behaviours/object_composition.rb +119 -0
  71. data/lib/tdriver/base/behaviour/factory.rb +495 -0
  72. data/lib/tdriver/base/behaviour/loader.rb +46 -0
  73. data/lib/tdriver/base/command_data/command_data.rb +51 -0
  74. data/lib/tdriver/base/command_data/loader.rb +29 -0
  75. data/lib/tdriver/base/controller/abstraction.rb +56 -0
  76. data/lib/tdriver/base/controller/loader.rb +21 -0
  77. data/lib/tdriver/base/errors.rb +134 -0
  78. data/lib/tdriver/base/loader.rb +47 -0
  79. data/lib/tdriver/base/state_object.rb +373 -0
  80. data/lib/tdriver/base/sut/adapter.rb +54 -0
  81. data/lib/tdriver/base/sut/controller.rb +151 -0
  82. data/lib/tdriver/base/sut/factory.rb +339 -0
  83. data/lib/tdriver/base/sut/generic/behaviours/agent.rb +77 -0
  84. data/lib/tdriver/base/sut/generic/behaviours/application.rb +427 -0
  85. data/lib/tdriver/base/sut/generic/behaviours/controller.rb +67 -0
  86. data/lib/tdriver/base/sut/generic/behaviours/find.rb +107 -0
  87. data/lib/tdriver/base/sut/generic/behaviours/flash_behaviour.rb +337 -0
  88. data/lib/tdriver/base/sut/generic/behaviours/sut.rb +1888 -0
  89. data/lib/tdriver/base/sut/generic/behaviours/switchbox_behaviour.rb +210 -0
  90. data/lib/tdriver/base/sut/generic/behaviours/verification.rb +222 -0
  91. data/lib/tdriver/base/sut/generic/commands/agent.rb +43 -0
  92. data/lib/tdriver/base/sut/generic/commands/application.rb +274 -0
  93. data/lib/tdriver/base/sut/generic/commands/fixture.rb +47 -0
  94. data/lib/tdriver/base/sut/generic/commands/key_sequence.rb +94 -0
  95. data/lib/tdriver/base/sut/generic/commands/screen_capture.rb +64 -0
  96. data/lib/tdriver/base/sut/generic/plugin.rb +97 -0
  97. data/lib/tdriver/base/sut/loader.rb +35 -0
  98. data/lib/tdriver/base/sut/sut.rb +98 -0
  99. data/lib/tdriver/base/test_object/abstract.rb +208 -0
  100. data/lib/tdriver/base/test_object/adapter.rb +740 -0
  101. data/lib/tdriver/base/test_object/behaviours/syncronization.rb +144 -0
  102. data/lib/tdriver/base/test_object/behaviours/test_object.rb +1047 -0
  103. data/lib/tdriver/base/test_object/cache.rb +134 -0
  104. data/lib/tdriver/base/test_object/factory.rb +684 -0
  105. data/lib/tdriver/base/test_object/loader.rb +51 -0
  106. data/lib/tdriver/base/test_object/verification.rb +178 -0
  107. data/lib/tdriver/base/test_object/xml/abstraction.rb +63 -0
  108. data/lib/tdriver/base/test_object/xml/adapter.rb +773 -0
  109. data/lib/tdriver/env.rb +21 -0
  110. data/lib/tdriver/loader.rb +57 -0
  111. data/lib/tdriver/matti.rb +35 -0
  112. data/lib/tdriver/report/error_recovery/tdriver_custom_error_recovery.rb +83 -0
  113. data/lib/tdriver/report/error_recovery/tdriver_error_recovery.rb +168 -0
  114. data/lib/tdriver/report/error_recovery/tdriver_error_recovery_settings.rb +106 -0
  115. data/lib/tdriver/report/report.rb +61 -0
  116. data/lib/tdriver/report/report_api.rb +348 -0
  117. data/lib/tdriver/report/report_combine.rb +86 -0
  118. data/lib/tdriver/report/report_crash_file_capture.rb +178 -0
  119. data/lib/tdriver/report/report_creator.rb +665 -0
  120. data/lib/tdriver/report/report_cucumber.rb +158 -0
  121. data/lib/tdriver/report/report_cucumber_listener.rb +184 -0
  122. data/lib/tdriver/report/report_cucumber_reporter.rb +181 -0
  123. data/lib/tdriver/report/report_data_presentation.rb +156 -0
  124. data/lib/tdriver/report/report_data_table.rb +64 -0
  125. data/lib/tdriver/report/report_execution_statistics.rb +400 -0
  126. data/lib/tdriver/report/report_file_capture.rb +159 -0
  127. data/lib/tdriver/report/report_graph_generator.rb +59 -0
  128. data/lib/tdriver/report/report_grouping.rb +541 -0
  129. data/lib/tdriver/report/report_javascript.rb +199 -0
  130. data/lib/tdriver/report/report_junit_xml.rb +147 -0
  131. data/lib/tdriver/report/report_rspec.rb +108 -0
  132. data/lib/tdriver/report/report_test_case_run.rb +725 -0
  133. data/lib/tdriver/report/report_test_run.rb +1476 -0
  134. data/lib/tdriver/report/report_test_unit.rb +223 -0
  135. data/lib/tdriver/report/report_writer.rb +1621 -0
  136. data/lib/tdriver/tdriver.rb +209 -0
  137. data/lib/tdriver/util/agent/loader.rb +22 -0
  138. data/lib/tdriver/util/agent/service.rb +107 -0
  139. data/lib/tdriver/util/common/array.rb +39 -0
  140. data/lib/tdriver/util/common/boolean.rb +48 -0
  141. data/lib/tdriver/util/common/crc16.rb +149 -0
  142. data/lib/tdriver/util/common/environment.rb +154 -0
  143. data/lib/tdriver/util/common/error.rb +40 -0
  144. data/lib/tdriver/util/common/exception.rb +53 -0
  145. data/lib/tdriver/util/common/exceptions.rb +12 -0
  146. data/lib/tdriver/util/common/file.rb +328 -0
  147. data/lib/tdriver/util/common/gem.rb +109 -0
  148. data/lib/tdriver/util/common/hash.rb +288 -0
  149. data/lib/tdriver/util/common/kernel.rb +253 -0
  150. data/lib/tdriver/util/common/loader.rb +47 -0
  151. data/lib/tdriver/util/common/numeric.rb +159 -0
  152. data/lib/tdriver/util/common/object.rb +159 -0
  153. data/lib/tdriver/util/common/retryable.rb +179 -0
  154. data/lib/tdriver/util/common/stackable.rb +185 -0
  155. data/lib/tdriver/util/common/string.rb +174 -0
  156. data/lib/tdriver/util/database/access.rb +240 -0
  157. data/lib/tdriver/util/database/connection.rb +44 -0
  158. data/lib/tdriver/util/database/error.rb +34 -0
  159. data/lib/tdriver/util/database/loader.rb +28 -0
  160. data/lib/tdriver/util/filters/attribute_filter.rb +121 -0
  161. data/lib/tdriver/util/filters/loader.rb +29 -0
  162. data/lib/tdriver/util/fixture/loader.rb +22 -0
  163. data/lib/tdriver/util/fixture/service.rb +211 -0
  164. data/lib/tdriver/util/hooking/hooking.rb +477 -0
  165. data/lib/tdriver/util/keymap/keymap.rb +81 -0
  166. data/lib/tdriver/util/loader.rb +80 -0
  167. data/lib/tdriver/util/localisation/error.rb +31 -0
  168. data/lib/tdriver/util/localisation/loader.rb +25 -0
  169. data/lib/tdriver/util/localisation/localisation.rb +762 -0
  170. data/lib/tdriver/util/logger/loader.rb +22 -0
  171. data/lib/tdriver/util/logger/logger.rb +591 -0
  172. data/lib/tdriver/util/operator_data/error.rb +29 -0
  173. data/lib/tdriver/util/operator_data/loader.rb +27 -0
  174. data/lib/tdriver/util/operator_data/operator_data.rb +93 -0
  175. data/lib/tdriver/util/other/config.rb +221 -0
  176. data/lib/tdriver/util/parameter/error.rb +48 -0
  177. data/lib/tdriver/util/parameter/loader.rb +25 -0
  178. data/lib/tdriver/util/parameter/parameter.rb +1161 -0
  179. data/lib/tdriver/util/plugin/abstract.rb +61 -0
  180. data/lib/tdriver/util/plugin/error.rb +0 -0
  181. data/lib/tdriver/util/plugin/loader.rb +28 -0
  182. data/lib/tdriver/util/plugin/service.rb +319 -0
  183. data/lib/tdriver/util/recorder/loader.rb +25 -0
  184. data/lib/tdriver/util/recorder/recorder.rb +72 -0
  185. data/lib/tdriver/util/recorder/scripter.rb +294 -0
  186. data/lib/tdriver/util/statistics/statistics.rb +89 -0
  187. data/lib/tdriver/util/user_data/error.rb +28 -0
  188. data/lib/tdriver/util/user_data/loader.rb +25 -0
  189. data/lib/tdriver/util/user_data/user_data.rb +104 -0
  190. data/lib/tdriver/util/video/camera.rb +67 -0
  191. data/lib/tdriver/util/video/camera_linux.rb +153 -0
  192. data/lib/tdriver/util/video/camera_windows.rb +174 -0
  193. data/lib/tdriver/util/video/loader.rb +31 -0
  194. data/lib/tdriver/util/video/video_utils.rb +139 -0
  195. data/lib/tdriver/util/xml/abstraction.rb +117 -0
  196. data/lib/tdriver/util/xml/attribute.rb +32 -0
  197. data/lib/tdriver/util/xml/builder.rb +53 -0
  198. data/lib/tdriver/util/xml/comment.rb +32 -0
  199. data/lib/tdriver/util/xml/document.rb +32 -0
  200. data/lib/tdriver/util/xml/element.rb +32 -0
  201. data/lib/tdriver/util/xml/error.rb +46 -0
  202. data/lib/tdriver/util/xml/loader.rb +62 -0
  203. data/lib/tdriver/util/xml/nil_node.rb +95 -0
  204. data/lib/tdriver/util/xml/nodeset.rb +32 -0
  205. data/lib/tdriver/util/xml/parsers/libxml/libxml.rb +140 -0
  206. data/lib/tdriver/util/xml/parsers/loader.rb +21 -0
  207. data/lib/tdriver/util/xml/parsers/nokogiri/abstraction.rb +167 -0
  208. data/lib/tdriver/util/xml/parsers/nokogiri/attribute.rb +66 -0
  209. data/lib/tdriver/util/xml/parsers/nokogiri/builder.rb +64 -0
  210. data/lib/tdriver/util/xml/parsers/nokogiri/comment.rb +39 -0
  211. data/lib/tdriver/util/xml/parsers/nokogiri/document.rb +66 -0
  212. data/lib/tdriver/util/xml/parsers/nokogiri/element.rb +39 -0
  213. data/lib/tdriver/util/xml/parsers/nokogiri/loader.rb +58 -0
  214. data/lib/tdriver/util/xml/parsers/nokogiri/node.rb +212 -0
  215. data/lib/tdriver/util/xml/parsers/nokogiri/nodeset.rb +237 -0
  216. data/lib/tdriver/util/xml/parsers/nokogiri/text.rb +39 -0
  217. data/lib/tdriver/util/xml/text.rb +32 -0
  218. data/lib/tdriver/util/xml/xml.rb +332 -0
  219. data/lib/tdriver/verify/verify.rb +2398 -0
  220. data/lib/tdriver/version.rb +21 -0
  221. data/xml/behaviours/generic.xml +530 -0
  222. data/xml/defaults/generic.xml +11 -0
  223. data/xml/defaults/sut_generic.xml +8 -0
  224. data/xml/parameters/tdriver_parameters.xml +23 -0
  225. data/xml/templates/generic.xml +292 -0
  226. metadata +324 -0
@@ -0,0 +1,54 @@
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
+
21
+ module MobyController
22
+
23
+ # Abstract class SutAdapter. Not supposed to be instantiated as is
24
+ class SutAdapter
25
+
26
+ def add_hook( id, &block )
27
+
28
+ raise ArgumentError, 'Unable to add hook due to no block was given' unless block_given?
29
+ @hooks = {} unless @hooks
30
+ @hooks[ id ] = block
31
+
32
+ end
33
+
34
+ private
35
+
36
+ # TODO: document me
37
+ def execute_hook( id, *arguments )
38
+
39
+ @hooks[ id ].call( *arguments )
40
+
41
+ end
42
+
43
+ # TODO: document me
44
+ def hooked? ( id )
45
+ @hooks = {} unless @hooks
46
+ @hooks.has_key?( id )
47
+
48
+ end
49
+
50
+
51
+
52
+ end # SutAdapter
53
+
54
+ end # MobyController
@@ -0,0 +1,151 @@
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 MobyBase
21
+
22
+ class SutController
23
+
24
+ attr_accessor :sut_controllers, :execution_order #, :test_object_adapter, :test_object_factory
25
+
26
+ # Creating new SutController associates SutAdapter to the controller
27
+ # == params
28
+ # sut_adapter:: MobyController::SutAdapter descendant, e.g. MobyController::QT::SutAdapter
29
+ # == raises
30
+ # TypeError:: Wrong argument type $1 for SUT controller (expected $2)
31
+ # NameError:: No SUT controller found for <type> (<class>)
32
+ def initialize( sut_controllers, sut_adapter )
33
+
34
+ sut_controllers.check_type String, 'Wrong argument type $1 for SUT controller (expected $2)'
35
+
36
+ @sut_adapter = sut_adapter
37
+
38
+ # empty sut controllers hash
39
+ @sut_controllers = {}
40
+
41
+ # empty sut controller execution order, this will be used when multiple sut controllers given
42
+ @execution_order = []
43
+
44
+ sut_controllers.split( ';' ).each{ | sut_type |
45
+
46
+ begin
47
+
48
+ # add sut_controller to execution order list
49
+ @execution_order << sut_type
50
+
51
+ # store sut controller
52
+ @sut_controllers[ sut_type ] = "MobyController::#{ sut_type }"
53
+
54
+ # extend controller module
55
+ extend( eval( "#{ @sut_controllers[ sut_type ] }::SutController" ) )
56
+
57
+ rescue NameError
58
+
59
+ raise MobyBase::ControllerNotFoundError, "No SUT controller found for #{ sut_type } (#{ @sut_controllers[ sut_type ] }::SutController)"
60
+
61
+ end
62
+
63
+ }
64
+
65
+ end
66
+
67
+ # Function to execute a command on a SutController
68
+ # This method is not meant to be overwritten in descendants.
69
+ #
70
+ # Associates MobyCommand::CommandData implementation based on the MobyCommand class name,
71
+ # by finding implementation from the same module as the SutController instance.
72
+ #
73
+ # example: MobyController::QT::SutController instance associates MobyController::QT::Application (module)
74
+ # implementation to MobyCommand::Application command_data object
75
+ #
76
+ # == params
77
+ # command_data:: MobyCommand::CommandData descendant
78
+ # == returns
79
+ # command_data implementation specific return value
80
+ # == raises
81
+ # TypeError:: Wrong argument type $1 for command_data (expected $2)
82
+ # MobyBase::CommandNotFoundError:: if no implementation is found for the CommandData object
83
+ def execute_command( command_data )
84
+
85
+ command_data.check_type MobyCommand::CommandData, 'Wrong argument type $1 for command_data (expected $2)'
86
+
87
+ _command_class_suffix = command_data.class.name.gsub(/^MobyCommand::/, '')
88
+
89
+ _execution_order_count = @execution_order.count
90
+
91
+ # retrieve controller for command; iterate through each sut controller
92
+ @execution_order.each_with_index do | controller, index |
93
+
94
+ begin
95
+
96
+ # extend command_data with combinination of corresponding sut specific controller
97
+ command_data.extend eval( "#{ @sut_controllers[ controller ] }::#{ _command_class_suffix }" )
98
+
99
+ # controller found
100
+ break
101
+
102
+ rescue NameError
103
+
104
+ # raise exception only if none controller found
105
+ if ( index + 1 ) == _execution_order_count
106
+
107
+ raise MobyBase::ControllerNotFoundError, "No controller found for command data object #{ command_data.inspect }"
108
+
109
+ end
110
+
111
+ end
112
+
113
+ end
114
+
115
+ # pass sut_adapter for command_data
116
+ command_data.set_adapter( @sut_adapter )
117
+
118
+ retries = 0
119
+
120
+ begin
121
+
122
+ # execute the command
123
+ command_data.execute
124
+
125
+ # retry in case of IO/connection error
126
+ rescue Errno::EPIPE, IOError
127
+
128
+ raise if retries == 1
129
+
130
+ retries += 1
131
+
132
+ if TDriver::SUTFactory.connected_suts.include?( @sut_adapter.sut_id.to_sym )
133
+
134
+ @sut_adapter.disconnect
135
+
136
+ @sut_adapter.connect( @sut_adapter.sut_id )
137
+
138
+ end
139
+
140
+ retry
141
+
142
+ end
143
+
144
+ end # execute_command
145
+
146
+ # enable hooking for performance measurement & debug logging
147
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
148
+
149
+ end # SutController
150
+
151
+ end # MobyBase
@@ -0,0 +1,339 @@
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 SUTFactory
23
+
24
+ # private methods and variables
25
+ class << self
26
+
27
+ private
28
+
29
+ # TODO: document me
30
+ def initialize_class
31
+
32
+ reset
33
+
34
+ end
35
+
36
+ def mapped_sut?( sut_id )
37
+
38
+ $parameters[ :mappings, {} ].has_key?( sut_id.to_sym )
39
+
40
+ end
41
+
42
+ def get_mapped_sut( sut_id )
43
+
44
+ $parameters[ :mappings ][ sut_id.to_sym ].to_sym
45
+
46
+ end
47
+
48
+ # gets sut from sut-factorys list - if not connected tries to reconnect first
49
+ def get_sut_from_list( id )
50
+
51
+ unless @_sut_list[ id ][ :is_connected ]
52
+
53
+ @_sut_list[ id ][ :sut ].connect( id )
54
+ @_sut_list[ id ][ :is_connected ] = true
55
+
56
+ end
57
+
58
+ @_sut_list[ id ][ :sut ]
59
+
60
+ end
61
+
62
+ def sut_exists?( sut_id )
63
+
64
+ @_sut_list.has_key?( sut_id )
65
+
66
+ end
67
+
68
+ def retrieve_sut_id_from_hash( sut_attributes )
69
+
70
+ # usability improvement: threat sut_attribute as SUT id if it is type of Symbol or String
71
+ sut_attributes = { :id => sut_attributes.to_sym } if [ String, Symbol ].include?( sut_attributes.class )
72
+
73
+ # verify that sut_attributes is type of Hash
74
+ sut_attributes.check_type( [ Hash, Symbol, String ], "Wrong argument type $1 for 'sut_attributes' (expected $2)" )
75
+
76
+ # legacy support: support also :Id
77
+ sut_attributes[ :id ] = sut_attributes.delete( :Id ) if sut_attributes.has_key?( :Id )
78
+
79
+ sut_attributes.require_key( :id, "Required SUT identification key $1 not defined in 'sut_attributes'" )
80
+
81
+ sut_attributes[ :id ].to_sym
82
+
83
+ end
84
+
85
+ # Finds the sut definition matching the id, either directly or via a mapping
86
+ #
87
+ # === params
88
+ # sut_id:: Symbol defining the id of the sut to search for
89
+ # === returns
90
+ # Symbol:: Either id if it was found in the parameter file or the id of a sut mapped to this id, or nil if no direct or mapped match was found
91
+ # === raises
92
+ # ArgumentError:: The id argument was not a Symbol
93
+ def find_sut_or_mapping( sut_id )
94
+
95
+ sut_id.check_type Symbol, 'Wrong argument type $1 for SUT id (expected $2)'
96
+
97
+ begin
98
+
99
+ # check if direct match exists
100
+ return sut_id if $parameters[ sut_id ]
101
+
102
+ rescue MobyUtil::ParameterNotFoundError
103
+
104
+ # check if a mapping is defined for the id
105
+ begin
106
+
107
+ # return nil if no mapping exists
108
+ return nil if ( mapped_id = $parameters[ :mappings ][ sut_id ] ).nil?
109
+
110
+ # check if the mapped to sut id exists
111
+ return mapped_id if $parameters[ ( mapped_id = mapped_id.to_sym ) ]
112
+
113
+ rescue MobyUtil::ParameterNotFoundError
114
+
115
+ # no mappings defined in tdriver_parameters.xml or the mapped to sut was not found
116
+ return nil
117
+
118
+ end # check if mapping exists
119
+
120
+ end # check if direct match exists
121
+
122
+ end # find_sut_or_mapping
123
+
124
+ end # self
125
+
126
+ # Create/reset hash to store sut ids for all current suts
127
+ def self.reset
128
+
129
+ @_sut_list = {}
130
+
131
+ end
132
+
133
+ # TODO: document me
134
+ def self.disconnect_sut( sut_attributes )
135
+
136
+ sut_id = retrieve_sut_id_from_hash( sut_attributes )
137
+
138
+ raise RuntimeError, "Unable disconnect SUT due to #{ sut_id.to_s } is not connected" unless sut_exists?( sut_id ) && @_sut_list[ sut_id ][ :is_connected ]
139
+
140
+ @_sut_list[ sut_id ][ :sut ].disconnect
141
+
142
+ @_sut_list[ sut_id ][ :is_connected ] = false
143
+
144
+ end
145
+
146
+ def self.reboot_sut( sut_attributes )
147
+
148
+ sut_id = retrieve_sut_id_from_hash( sut_attributes )
149
+
150
+ raise RuntimeError, "Unable to reboot SUT due to #{ sut_id.to_s } is not connected" unless sut_exists?( sut_id ) && @_sut_list[ sut_id ][ :is_connected ]
151
+
152
+ @_sut_list[ sut_id ][ :sut ].reboot
153
+
154
+ disconnect_sut( sut_id )
155
+
156
+ end
157
+
158
+ # TODO: document me
159
+ def self.connected_suts
160
+
161
+ @_sut_list
162
+
163
+ end
164
+
165
+ # Function to create the actual SUT objects based on the 'sut' attribute.
166
+ # === params
167
+ # sut_type:: sut_type - sut type, supportes all types defined by SUTFactory constants
168
+ # id:: id - unique identifier for identifying particular SUT from each other. Is propagated to proper initializers.
169
+ # === returns
170
+ # return:: SUT object
171
+ # raise::
172
+ # ArgumentError:: <name> not defined in TDriver parameters XML
173
+ def self.make( sut_attributes )
174
+
175
+ sut_id = retrieve_sut_id_from_hash( sut_attributes )
176
+
177
+ sut_id = get_mapped_sut( sut_id ) if mapped_sut?( sut_id )
178
+
179
+ # if sut is already connected, return existing sut
180
+ return get_sut_from_list( sut_id ) if sut_exists?( sut_id )
181
+
182
+ # retrieve sut from parameters
183
+ sut = $parameters[ sut_id, nil ]
184
+
185
+ # raise exception if sut was not found
186
+ raise ArgumentError, "#{ sut_id.to_s } not defined in TDriver parameters XML" if sut.nil?
187
+
188
+ # retrieve sut type from parameters
189
+ sut_type = sut[ :type, nil ]
190
+
191
+ # raise exception if sut type was not found
192
+ raise RuntimeError, "SUT parameter type not defined for #{ sut_id.to_s } in TDriver parameters/templates XML" if sut_type.nil?
193
+
194
+ sut_type_symbol = sut_type.downcase.to_sym
195
+
196
+ # retrieve plugin name that implements given sut
197
+ sut_plugin = sut[ :sut_plugin, nil ]
198
+
199
+ # retrieve enviroment value from sut, use '*' as default
200
+ sut_env = sut[ :env, '*' ]
201
+
202
+ # verify that sut plugin is defined in sut configuration
203
+ raise RuntimeError, "SUT parameter 'sut_plugin' not defined for #{ sut_id.to_s } (#{ sut_type.to_s })" if sut_plugin.nil?
204
+
205
+ # flag to determine that should exception be raised; allow one retry, then set flag to true if error still occures
206
+ raise_exception = false
207
+
208
+ begin
209
+
210
+ # verify that sut plugin is registered
211
+ if TDriver::PluginService.plugin_registered?( sut_plugin, :sut )
212
+
213
+ # create sut object
214
+ created_sut = TDriver::PluginService.call_plugin_method( sut_plugin, :make_sut, sut_id )
215
+
216
+ else
217
+
218
+ # raise error if sut was not registered
219
+ raise NotImplementedError, "No plugin implementation found for SUT type: #{ sut_type }"
220
+
221
+ end
222
+
223
+ rescue Exception => exception
224
+
225
+ # if sut was not registered, try to load it
226
+ TDriver::PluginService.load_plugin( sut_plugin ) if exception.kind_of?( NotImplementedError )
227
+
228
+ if !raise_exception
229
+
230
+ raise_exception = true
231
+
232
+ retry
233
+
234
+ else
235
+
236
+ # still errors, raise original exception
237
+ raise exception
238
+
239
+ end
240
+
241
+ end
242
+
243
+ # store SUT type to sut object
244
+ created_sut.instance_variable_set( :@ui_type, sut_type )
245
+
246
+ # store SUT UI version to sut object
247
+ created_sut.instance_variable_set( :@ui_version, $parameters[ sut_id ][ :version, nil ] )
248
+
249
+ # store SUT input type to sut object
250
+ created_sut.instance_variable_set( :@input, $parameters[ sut_id ][ :input_type, nil ] )
251
+
252
+ # retrieve list of optional extension plugins
253
+ @extension_plugins = $parameters[ sut_id ][ :extension_plugins, "" ].split( ";" )
254
+
255
+ # load optional extension plugins
256
+ if @extension_plugins.count > 0
257
+
258
+ @extension_plugins.each{ | plugin_name |
259
+
260
+ raise_exception = false
261
+
262
+ begin
263
+
264
+ # verify that extension plugin is registered
265
+ unless TDriver::PluginService.plugin_registered?( plugin_name, :extension )
266
+
267
+ # raise error if sut was not registered
268
+ raise NotImplementedError, "Extension plugin not found #{ plugin_name }"
269
+
270
+ end
271
+
272
+ rescue Exception => exception
273
+
274
+ # if sut was not registered, try to load it
275
+ TDriver::PluginService.load_plugin( plugin_name ) if exception.kind_of?( NotImplementedError )
276
+
277
+ if !raise_exception
278
+
279
+ raise_exception = true
280
+
281
+ retry
282
+
283
+ else
284
+
285
+ # still errors, raise original exception
286
+ raise exception
287
+
288
+ end
289
+
290
+ end
291
+
292
+ }
293
+
294
+ end
295
+
296
+ # apply sut generic behaviours
297
+ TDriver::BehaviourFactory.apply_behaviour(
298
+
299
+ :object => created_sut,
300
+ :object_type => [ 'sut' ],
301
+ :sut_type => [ '*', created_sut.ui_type ],
302
+ :input_type => [ '*', created_sut.input.to_s ],
303
+ :env => [ '*', *sut_env.to_s.split(";") ],
304
+ :version => [ '*', created_sut.ui_version.to_s ]
305
+
306
+ )
307
+
308
+ @_sut_list[ sut_id ] = { :sut => created_sut, :is_connected => true }
309
+
310
+ created_sut
311
+
312
+ end
313
+
314
+ # enable hooking for performance measurement & debug logging
315
+ TDriver::Hooking.hook_methods( self ) if defined?( TDriver::Hooking )
316
+
317
+ # initialize plugin service
318
+ initialize_class
319
+
320
+ end # SUTFactory
321
+
322
+ end # TDriver
323
+
324
+ # for backwards compatibility
325
+ module MobyBase
326
+
327
+ class SUTFactory
328
+
329
+ def self.instance
330
+
331
+ warn_caller '$1:$2 deprecated class MobyBase::SUTFactory, please use static class TDriver::SUTFactory instead'
332
+
333
+ TDriver::SUTFactory
334
+
335
+ end
336
+
337
+ end # SUTFactory
338
+
339
+ end # MobyBase