oats 0.0.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.
- data/.gitignore +6 -0
- data/Gemfile +15 -0
- data/README.txt +165 -0
- data/Rakefile +2 -0
- data/bin/agent +204 -0
- data/bin/oats +10 -0
- data/bin/occ +29 -0
- data/bin/results_cleanup +6 -0
- data/doc/COPYING +55 -0
- data/doc/LICENSE +55 -0
- data/doc/OATS_Framework.doc +0 -0
- data/doc/classes/ApplicationLogs.html +239 -0
- data/doc/classes/Campaign.html +843 -0
- data/doc/classes/CommandlineOptions.html +131 -0
- data/doc/classes/Driver.html +182 -0
- data/doc/classes/Hash.html +137 -0
- data/doc/classes/Ide.html +194 -0
- data/doc/classes/MapSelenium.html +197 -0
- data/doc/classes/Net.html +107 -0
- data/doc/classes/Oats/OatsFilterError.html +119 -0
- data/doc/classes/Oats.html +998 -0
- data/doc/classes/OatsAssertError.html +119 -0
- data/doc/classes/OatsBadInput.html +119 -0
- data/doc/classes/OatsData.html +290 -0
- data/doc/classes/OatsError.html +117 -0
- data/doc/classes/OatsExit.html +117 -0
- data/doc/classes/OatsLock.html +254 -0
- data/doc/classes/OatsMain.html +182 -0
- data/doc/classes/OatsMysqlError.html +113 -0
- data/doc/classes/OatsMysqlMissingInput.html +113 -0
- data/doc/classes/OatsReportError.html +113 -0
- data/doc/classes/OatsSetupError.html +119 -0
- data/doc/classes/OatsTestError.html +119 -0
- data/doc/classes/OatsTestExit.html +119 -0
- data/doc/classes/OatsTestLocateError.html +120 -0
- data/doc/classes/OatsVerifyError.html +119 -0
- data/doc/classes/Ragent.html +397 -0
- data/doc/classes/Rclient.html +236 -0
- data/doc/classes/Report.html +368 -0
- data/doc/classes/Reports.html +244 -0
- data/doc/classes/RestApi.html +333 -0
- data/doc/classes/RhttpClient.html +236 -0
- data/doc/classes/Rimap.html +170 -0
- data/doc/classes/Rmysql.html +176 -0
- data/doc/classes/Roptions.html +131 -0
- data/doc/classes/Rselenium.html +233 -0
- data/doc/classes/Rssh.html +138 -0
- data/doc/classes/Runnable.html +174 -0
- data/doc/classes/SFTriggers.html +206 -0
- data/doc/classes/Selenium/Client/Driver.html +211 -0
- data/doc/classes/Selenium/Client.html +107 -0
- data/doc/classes/Selenium.html +107 -0
- data/doc/classes/SystemCapture.html +304 -0
- data/doc/classes/TestCase.html +418 -0
- data/doc/classes/TestData.html +235 -0
- data/doc/classes/TestList.html +264 -0
- data/doc/classes/Tools.html +244 -0
- data/doc/classes/Util.html +201 -0
- data/doc/classes/Variation.html +206 -0
- data/doc/fr_class_index.html +92 -0
- data/doc/fr_method_index.html +465 -0
- data/doc/index.html +23 -0
- data/doc/oats_httpd.conf +32 -0
- data/doc/oats_user.yml +25 -0
- data/doc/rdoc-style.css +208 -0
- data/lib/deep_merge/.gitignore +2 -0
- data/lib/deep_merge/core.rb +195 -0
- data/lib/deep_merge/deep_merge.rb +1 -0
- data/lib/deep_merge/deep_merge_hash.rb +28 -0
- data/lib/deep_merge/rails_compat.rb +27 -0
- data/lib/oats/application_logs.rb +163 -0
- data/lib/oats/build_id.rb +58 -0
- data/lib/oats/commandline_options.rb +128 -0
- data/lib/oats/diff.rb +278 -0
- data/lib/oats/driver.rb +492 -0
- data/lib/oats/ide.rb +227 -0
- data/lib/oats/keywords.rb +67 -0
- data/lib/oats/log4r_init.rb +14 -0
- data/lib/oats/mysql.rb +97 -0
- data/lib/oats/oats.rb +637 -0
- data/lib/oats/oats_data.rb +400 -0
- data/lib/oats/oats_exceptions.rb +25 -0
- data/lib/oats/oats_lock.rb +261 -0
- data/lib/oats/oats_selenium_api.rb +639 -0
- data/lib/oats/oselenium.rb +189 -0
- data/lib/oats/ossh.rb +36 -0
- data/lib/oats/patches_for_eventmachine_12.10.rb +66 -0
- data/lib/oats/ragent.rb +321 -0
- data/lib/oats/rclient.rb +42 -0
- data/lib/oats/report.rb +207 -0
- data/lib/oats/roptions.rb +88 -0
- data/lib/oats/test_case.rb +510 -0
- data/lib/oats/test_data.rb +98 -0
- data/lib/oats/test_list.rb +141 -0
- data/lib/oats/unixdiff.rb +75 -0
- data/lib/oats/util.rb +125 -0
- data/lib/oats/version.rb +3 -0
- data/lib/oats.rb +36 -0
- data/nbproject/configs/agent.properties +0 -0
- data/nbproject/configs/gr.properties +0 -0
- data/nbproject/project.properties +10 -0
- data/nbproject/project.xml +17 -0
- data/oats.gemspec +42 -0
- data/oats_ini.yml +258 -0
- data/oats_tests/Gemfile +18 -0
- data/oats_tests/aut_ini.yml +30 -0
- data/oats_tests/bin/oats +8 -0
- data/oats_tests/environments/qa.yml +4 -0
- data/oats_tests/environments/qa_chrome.yml +4 -0
- data/oats_tests/examples/core/coreExamples.yml +8 -0
- data/oats_tests/examples/core/expectedException.rb +39 -0
- data/oats_tests/examples/core/ok_verify.rb +2 -0
- data/oats_tests/examples/core/ok_verify.rb_ok/out/myfile.txt +1 -0
- data/oats_tests/examples/core/ok_verify.rb_ok/out/myfile2.txt +1 -0
- data/oats_tests/examples/core/ok_verify.rb_ok/rats_test.log +2 -0
- data/oats_tests/examples/core/unexpectedException.rb +30 -0
- data/oats_tests/examples/examples.yml +13 -0
- data/oats_tests/examples/gui/guiExamples.yml +7 -0
- data/oats_tests/examples/gui/seleniumGoogle.rb +10 -0
- data/oats_tests/examples/gui/webdriverGoogle.rb +9 -0
- data/oats_tests/examples/keywords/SampleXlList-1.xls +0 -0
- data/oats_tests/examples/keywords/SampleXlList-2.xls +0 -0
- data/oats_tests/examples/keywords/SampleXlLists.xls +0 -0
- data/oats_tests/examples/keywords/keywordsDriver.rb +1 -0
- data/oats_tests/examples/keywords/keywordsExamples.yml +8 -0
- data/oats_tests/examples/keywords/keywordsTC1.yml +5 -0
- data/oats_tests/examples/keywords/keywordsTestlist.yml +16 -0
- data/oats_tests/examples/needsWork/addTestDynamically.rb +4 -0
- data/oats_tests/examples/needsWork/emailVerify.rb +34 -0
- data/oats_tests/examples/needsWork/testSql/rtest.sql +6 -0
- data/oats_tests/examples/needsWork/testSql/rtest.yml +11 -0
- data/oats_tests/examples/occTest/occTest.rb +13 -0
- data/oats_tests/examples/occTest/occTest_1.rb +1 -0
- data/oats_tests/examples/occTest/occTest_1_1.rb +1 -0
- data/oats_tests/examples/occTest/occTest_1_2.rb +1 -0
- data/oats_tests/examples/occTest/occTest_1_3.rb +1 -0
- data/oats_tests/examples/occTest/occTest_1_4.rb +1 -0
- data/oats_tests/examples/occTest/occTest_2.rb +1 -0
- data/oats_tests/examples/occTest/occTest_2_1.rb +1 -0
- data/oats_tests/examples/occTest/occTest_2_2.rb +1 -0
- data/oats_tests/examples/occTest/occTest_2_3.rb +1 -0
- data/oats_tests/examples/occTest/occTest_2_4.rb +1 -0
- data/oats_tests/examples/occTest/occTest_3.rb +1 -0
- data/oats_tests/examples/occTest/occTest_3_1.rb +1 -0
- data/oats_tests/examples/occTest/occTest_3_2.rb +1 -0
- data/oats_tests/examples/occTest/occTest_3_3.rb +1 -0
- data/oats_tests/examples/occTest/occTest_3_4.rb +1 -0
- data/oats_tests/examples/occTest/occTest_4.rb +1 -0
- data/oats_tests/examples/occTest/occTestlist.yml +9 -0
- data/oats_tests/examples/occTest/occTestlist_1.yml +9 -0
- data/oats_tests/examples/occTest/occTestlist_2.yml +9 -0
- data/oats_tests/examples/occTest/occTestlist_3.yml +9 -0
- data/oats_tests/examples/occTest/variation1.yml +4 -0
- data/oats_tests/examples/occTest/variation2.yml +4 -0
- data/oats_tests/examples/testFileLocationUnitTests/extn_driver.rb +4 -0
- data/oats_tests/examples/testFileLocationUnitTests/folder/oats.yml +3 -0
- data/oats_tests/examples/testFileLocationUnitTests/folder/t1.rb +2 -0
- data/oats_tests/examples/testFileLocationUnitTests/folder1/t1.yml +2 -0
- data/oats_tests/examples/testFileLocationUnitTests/folder1/t1_1.yml +3 -0
- data/oats_tests/examples/testFileLocationUnitTests/folder2/oats.yml +3 -0
- data/oats_tests/examples/testFileLocationUnitTests/folder2/t1.rb +2 -0
- data/oats_tests/examples/testFileLocationUnitTests/folder2/t1.yml +2 -0
- data/oats_tests/examples/testFileLocationUnitTests/no_yaml.rb +3 -0
- data/oats_tests/examples/testFileLocationUnitTests/post_yaml.rb +1 -0
- data/oats_tests/examples/testFileLocationUnitTests/t1.rb +4 -0
- data/oats_tests/examples/testFileLocationUnitTests/t1.yml +2 -0
- data/oats_tests/examples/testFileLocationUnitTests/t1_1.yml +3 -0
- data/oats_tests/examples/testFileLocationUnitTests/testDir/oats.yml +3 -0
- data/oats_tests/examples/testFileLocationUnitTests/testDir/t1.rb +2 -0
- data/oats_tests/examples/testFileLocationUnitTests/testDir/t1.yml +2 -0
- data/oats_tests/examples/testFileLocationUnitTests/testDir2/t1.rb +2 -0
- data/oats_tests/examples/testFileLocationUnitTests/testDir2/t1.yml +2 -0
- data/oats_tests/examples/testFileLocationUnitTests/unitTestList.yml +36 -0
- data/oats_tests/examples/testFileLocationUnitTests/yml_driver.rb +2 -0
- data/oats_tests/lib/business.rb +28 -0
- data/oats_tests/lib/sample_xl_lists.rb +37 -0
- data/test/common_test_unit_setup.rb +21 -0
- data/test/test_basic.rb +16 -0
- data/test/test_selenium.rb +16 -0
- data/test/test_xl_lists.rb +16 -0
- metadata +291 -0
data/lib/oats/report.rb
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
#require 'oats/oselenium' if $oats_execution
|
|
2
|
+
require 'yaml' # http://www.ruby-doc.org/core/classes/YAML.html http://yaml4r.sourceforge.net/doc
|
|
3
|
+
require 'oats/test_case'
|
|
4
|
+
require 'oats/test_list'
|
|
5
|
+
require 'oats/oats_exceptions'
|
|
6
|
+
|
|
7
|
+
class OatsReportError < OatsError ; end
|
|
8
|
+
|
|
9
|
+
module Oats
|
|
10
|
+
|
|
11
|
+
class Report
|
|
12
|
+
@@pre_test = nil
|
|
13
|
+
@@post_test = nil
|
|
14
|
+
|
|
15
|
+
def Report.failed_file_name(var)
|
|
16
|
+
if var.instance_of?(Variation)
|
|
17
|
+
list_name = var.list_name
|
|
18
|
+
else
|
|
19
|
+
list_name = var
|
|
20
|
+
end
|
|
21
|
+
return unless list_name
|
|
22
|
+
return File.basename(list_name) + '.yml' if list_name =~ /-fail$/
|
|
23
|
+
# File.basename(list_name) + '-ft-' + var.env_name[0,1] + var.env_name[-1,1] + '.yml'
|
|
24
|
+
File.basename(list_name.sub(/\.yml\z/,'')) + '-fail.yml'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def Report.results(list, from_agent = nil) #
|
|
28
|
+
unless list
|
|
29
|
+
$log.error "Report.results are requested for a null list. Ignoring request."
|
|
30
|
+
return nil
|
|
31
|
+
end
|
|
32
|
+
vars = list.variations
|
|
33
|
+
vars.each do |var|
|
|
34
|
+
tests = []
|
|
35
|
+
var.tests.each do |tst|
|
|
36
|
+
if tst.instance_of?(TestList)
|
|
37
|
+
@@pre_test ||= list.pre_test
|
|
38
|
+
@@post_test ||= list.post_test
|
|
39
|
+
Report.results(tst, from_agent)
|
|
40
|
+
else
|
|
41
|
+
tests << tst
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
unless tests.empty?
|
|
45
|
+
if var.parent.id
|
|
46
|
+
list_name = File.basename(var.parent.id,'.*')
|
|
47
|
+
else
|
|
48
|
+
list_name = tests.first.id
|
|
49
|
+
end
|
|
50
|
+
var.list_name = list_name
|
|
51
|
+
dir_results = $oats['execution']['dir_results']
|
|
52
|
+
all_errors = tests.find_all{|i| not i.errors.empty?}
|
|
53
|
+
var.total = tests.length
|
|
54
|
+
var.pass = tests.find_all{|i| i.status == 0}.length
|
|
55
|
+
var.fail = all_errors.length
|
|
56
|
+
var.skip = tests.find_all{|i| i.status == 2}.length
|
|
57
|
+
$log.error "Test counts do not add up. Please report this to the OATS administrator." \
|
|
58
|
+
unless var.total == var.pass + var.fail + var.skip
|
|
59
|
+
pre_post_summary = ''
|
|
60
|
+
unless tests.empty? or from_agent
|
|
61
|
+
if @@pre_test and ! @@pre_test.errors.empty?
|
|
62
|
+
pre_post_summary += ", PRE_FAILURE"
|
|
63
|
+
var.fail += 1
|
|
64
|
+
# var.fail = var.fail ? (var.fail + 1) : 1
|
|
65
|
+
end
|
|
66
|
+
if @@post_test and ! @@post_test.errors.empty?
|
|
67
|
+
pre_post_summary += ", POST_FAILURE"
|
|
68
|
+
var.fail += 1
|
|
69
|
+
end
|
|
70
|
+
$log.info "*** SUMMARY STATISTICS for list:#{list_name} on env:#{var.env_name}" +
|
|
71
|
+
" Total[#{var.total}], " + "Fail[#{var.fail}], Pass[#{var.pass}], " + "Skip[#{var.skip}]" +
|
|
72
|
+
pre_post_summary
|
|
73
|
+
end
|
|
74
|
+
return true if all_errors.empty? or from_agent
|
|
75
|
+
# Generate the failed tests lists only for non-agent mode
|
|
76
|
+
failed_file_name = Report.failed_file_name(var)
|
|
77
|
+
failed_dir = Oats.result_archive_dir + '/failed'
|
|
78
|
+
FileUtils.mkdir_p(failed_dir)
|
|
79
|
+
failed_tests_file = File.join(failed_dir,failed_file_name)
|
|
80
|
+
File.open( failed_tests_file, 'w' ) do |ftf |
|
|
81
|
+
ftf.puts("# Failed OATS tests\n---\nexecution: \n test_files: ")
|
|
82
|
+
tests.each do |test|
|
|
83
|
+
case test.status
|
|
84
|
+
when 0
|
|
85
|
+
$log.error "Unexpected test state for [#{test.id}]. Test status is PASSED but it contains error info. Please report this to the OATS administrator." unless test.errors.empty?
|
|
86
|
+
when 1
|
|
87
|
+
$log.warn "- #{test.id}"
|
|
88
|
+
ftf.puts(" - #{test.id}")
|
|
89
|
+
if test.errors.empty?
|
|
90
|
+
$log.error "Unexpected test state. Test status is error but it contains no error info. Please report this to the OATS administrator."
|
|
91
|
+
else
|
|
92
|
+
test.errors.each do |ex_arr|
|
|
93
|
+
if ex_arr[1] =~ /see result file for details: *(.*)/
|
|
94
|
+
file = $1
|
|
95
|
+
$log.warn " #{file}"
|
|
96
|
+
ftf.puts "# #{file}"
|
|
97
|
+
else
|
|
98
|
+
exc = "[#{ex_arr[0]}] " + ex_arr[1]
|
|
99
|
+
$log.warn " #{exc}"
|
|
100
|
+
ftf.puts "# #{exc}"
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
when 2 then # Just skipped
|
|
105
|
+
$log.warn "- #{test.id}"
|
|
106
|
+
$log.warn " [SKIPPED]"
|
|
107
|
+
else
|
|
108
|
+
$log.error "Unknown test status for [#{test.id}]. Please report this to the OATS administrator."
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
FileUtils.cp(failed_tests_file,dir_results)
|
|
113
|
+
FileUtils.cp(failed_tests_file,File.join(failed_dir,'last-fail.yml'))
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
return true
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Ideally oats_info_store should use locks and be interrupt safe
|
|
120
|
+
# If dir is nil or oats_info is given dump oats_info, otherwise load and return Report:@@oats_info
|
|
121
|
+
# Default dir is dir_results, default oats_info is $oats_info
|
|
122
|
+
def Report.oats_info_store(dir = nil, oats_info = nil)
|
|
123
|
+
results_file = File.join( dir ? dir : $oats['execution']['dir_results'] , 'results.dump')
|
|
124
|
+
unless dir.nil? or oats_info
|
|
125
|
+
@@oats_info = File.exists?(results_file) ? Report.oats_info_retrieve(results_file) : nil
|
|
126
|
+
return @@oats_info
|
|
127
|
+
end
|
|
128
|
+
archive_dir = Oats.result_archive_dir
|
|
129
|
+
if archive_dir and File.directory?(archive_dir)
|
|
130
|
+
results_file_tmp = File.join(archive_dir, 'results.dump') +'.tmp'
|
|
131
|
+
else
|
|
132
|
+
results_file_tmp = results_file +'.tmp'
|
|
133
|
+
end
|
|
134
|
+
oats_info = $oats_info unless oats_info
|
|
135
|
+
File.open( results_file_tmp , 'w' ) { |out| Marshal.dump(oats_info, out, -1) }
|
|
136
|
+
begin # Ensure dump is written completely before being replaced
|
|
137
|
+
rinfo = File.open( results_file_tmp, 'r' ) { |inp| Marshal.load(inp)}
|
|
138
|
+
rescue Exception => exc
|
|
139
|
+
$log.error "Error reading back [#{results_file_tmp}]. Skipping saving the intermediate results."
|
|
140
|
+
$log.error exc
|
|
141
|
+
return oats_info
|
|
142
|
+
end
|
|
143
|
+
begin
|
|
144
|
+
Ragent.snapshot_oats_info(rinfo) if $oats_execution['agent']
|
|
145
|
+
FileUtils.mv(results_file_tmp, results_file)
|
|
146
|
+
rescue
|
|
147
|
+
$log.error "Error moving [#{results_file_tmp}]. Skipping saving the intermediate results."
|
|
148
|
+
$log.error exc
|
|
149
|
+
end
|
|
150
|
+
return oats_info
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def Report.oats_info_retrieve(results_file)
|
|
154
|
+
raise OatsReportError, "Can not locate [#{results_file}]. Skipping report generation for: #{results_file}" \
|
|
155
|
+
unless File.exist?(results_file)
|
|
156
|
+
begin
|
|
157
|
+
return File.open( results_file, 'r' ) { |inp| Marshal.load(inp)}
|
|
158
|
+
rescue
|
|
159
|
+
$log.error "Error reading [#{results_file}]. Skipping report generation for: #{results_file}"
|
|
160
|
+
raise
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def Report.archive_results(post_run = false)
|
|
165
|
+
oats_data = $oats
|
|
166
|
+
dir_res = oats_data['execution']['dir_results']
|
|
167
|
+
rm_dir_res = post_run ? false : true
|
|
168
|
+
if File.directory?(dir_res) # Copy current results to archive
|
|
169
|
+
begin
|
|
170
|
+
oats_info = Report.oats_info_store(dir_res)
|
|
171
|
+
unless post_run
|
|
172
|
+
return unless oats_info
|
|
173
|
+
unless oats_info['end_time']
|
|
174
|
+
regenerated = true
|
|
175
|
+
$log.info "Generating missing results files for the previous run."
|
|
176
|
+
Report.results(oats_info['test_files'])
|
|
177
|
+
Report.oats_info_store(nil,oats_info)
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
rescue Exception => e
|
|
181
|
+
if e.instance_of? OatsReportError
|
|
182
|
+
$log.error 'Encountered: ' + $!.to_s
|
|
183
|
+
else
|
|
184
|
+
$log.error $!
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
# If the stored execution doesn't have context, default to the current execution ids inside incomplete
|
|
188
|
+
archive_id = ((oats_info and oats_info['jobid'])||(Oats.context and Oats.context['jobid']))
|
|
189
|
+
if archive_id
|
|
190
|
+
archive_dir = File.join( Oats.result_archive_dir, archive_id.to_s)
|
|
191
|
+
if post_run
|
|
192
|
+
FileUtils.cp_r(dir_res, archive_dir)
|
|
193
|
+
elsif regenerated or ! File.directory?(archive_dir)
|
|
194
|
+
FileUtils.rm_rf archive_dir
|
|
195
|
+
FileUtils.mv(dir_res, archive_dir)
|
|
196
|
+
rm_dir_res = false
|
|
197
|
+
end
|
|
198
|
+
else
|
|
199
|
+
$log.error "Removing results without archiving because can not find any jobid."
|
|
200
|
+
rm_dir_res = true
|
|
201
|
+
end
|
|
202
|
+
FileUtils.rm_rf dir_res if rm_dir_res # Cleanup prior to next run
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
end
|
|
207
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Override oats data based on commandline options.
|
|
2
|
+
#require 'log4r' # http://log4r.sourceforge.net/rdoc/index.html
|
|
3
|
+
#require 'util'
|
|
4
|
+
require 'deep_merge/deep_merge'
|
|
5
|
+
|
|
6
|
+
module Oats
|
|
7
|
+
|
|
8
|
+
module Roptions
|
|
9
|
+
|
|
10
|
+
def Roptions.overlay(options)
|
|
11
|
+
opts_array = options['_:options']
|
|
12
|
+
if options['_:json']
|
|
13
|
+
$log.info "Overriding Oats.data with: #{options['_:json']}"
|
|
14
|
+
$oats.deep_merge!(JSON.parse(options['_:json']))
|
|
15
|
+
end
|
|
16
|
+
if opts_array
|
|
17
|
+
opts_array.each do |opt_valu|
|
|
18
|
+
|
|
19
|
+
opt, valu = opt_valu.split(/\s*:\s*/)
|
|
20
|
+
data_keys = opt.split('.')
|
|
21
|
+
value = $oats
|
|
22
|
+
until data_keys.size == 1 do
|
|
23
|
+
value = value[key=data_keys.shift]
|
|
24
|
+
Oats.assert value.instance_of?(Hash), "Oats.data #{opt} is not a hash at #{key}"
|
|
25
|
+
end
|
|
26
|
+
$log.info "Option #{opt.inspect} specified as: #{valu.inspect} is overriding #{value[data_keys.first].inspect}"
|
|
27
|
+
value[data_keys.first] = valu
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def Roptions.override(options={})
|
|
33
|
+
oats_data = $oats
|
|
34
|
+
oats_lib = Util.expand_path(File.dirname(__FILE__)+'/..')
|
|
35
|
+
oats_data['_']['oats_lib'] = oats_lib
|
|
36
|
+
options.each do |key,val|
|
|
37
|
+
data_keys = key.split(':')
|
|
38
|
+
v = oats_data
|
|
39
|
+
key_var = nil
|
|
40
|
+
loop do
|
|
41
|
+
key_var = data_keys.shift
|
|
42
|
+
break if data_keys.empty? or key_var == '_'
|
|
43
|
+
v = v[key_var]
|
|
44
|
+
end
|
|
45
|
+
next if key_var == '_'
|
|
46
|
+
if val.instance_of?(Array)
|
|
47
|
+
val_str = val.join(',')
|
|
48
|
+
else
|
|
49
|
+
val_str = val.to_s
|
|
50
|
+
end
|
|
51
|
+
vval = v[key_var]
|
|
52
|
+
if vval.instance_of?(Array)
|
|
53
|
+
vval_str = vval.join(',')
|
|
54
|
+
else
|
|
55
|
+
vval_str = vval.to_s
|
|
56
|
+
end
|
|
57
|
+
$log.info "Option #{key.inspect} specified as: #{val_str.inspect} is overriding #{vval_str.inspect}"\
|
|
58
|
+
unless $oats_execution['agent']
|
|
59
|
+
v[key_var] = val
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# *** Now verify the options ***
|
|
63
|
+
# Ensure log_level valid
|
|
64
|
+
level = Log4r::Log4rConfig::LogLevels.index(oats_data['execution']['log_level'])
|
|
65
|
+
raise(OatsBadInput, "Unrecognized execution:log_level [#{oats_data['execution']['log_level']}]") unless level
|
|
66
|
+
$log.level = level = 1 if $log
|
|
67
|
+
|
|
68
|
+
raise(OatsBadInput,"Must specify execution:dir_results") unless oats_data['execution']['dir_results']
|
|
69
|
+
|
|
70
|
+
# Fix path to vendor, needed to run under java
|
|
71
|
+
oats_data['_']['vendor'] = Util.expand_path('../vendor',oats_lib)
|
|
72
|
+
|
|
73
|
+
# Verify existence of browser to show results
|
|
74
|
+
oats_data['selenium']['ide']['result_browser'] = oats_data['selenium']['ide']['result_browser']
|
|
75
|
+
oats_data['selenium']['ide']['show_result'] = 0 unless oats_data['selenium']['ide']['show_result']
|
|
76
|
+
|
|
77
|
+
unless oats_data['selenium']['pause_on_exit']
|
|
78
|
+
if oats_data['execution']['test_files'] and oats_data['execution']['test_files'].first =~ /\.yml/
|
|
79
|
+
oats_data['selenium']['pause_on_exit'] = 0
|
|
80
|
+
else
|
|
81
|
+
oats_data['selenium']['pause_on_exit'] = 1
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
return options
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
end
|
|
88
|
+
end
|