HtmlTestReport::TestSuite::remove_duplicate_testcases can throw exception in some cases
Closed this issue · 5 comments
New Issue Checklist
- Updated
fastlane-plugin-test_center
to the latest version (I verified the code though) - I read the README.md
- I reviewed the example(s) for the action(s) I am using
- I have removed any sensitive data such as passwords, authentication tokens, or anything else I do not want to world to see
Issue Description
We have an intermittent error when running tests and it looks like it's caused by a bug in the code that collates html reports. In particular, TestCenter::Helper::HtmlTestReport::TestSuite::remove_duplicate_testcases
has code that looks like
(nonuniq_testcases - uniq_testcases).each do |tc|
failure_details = tc.failure_details
tc.root.parent.delete_element(failure_details)
tc.root.parent.delete_element(tc.root)
end
The problem is failure_details
may be nil
, which means it's calling tc.root.parent.delete_element(nil)
. The REXML
documentation doesn't state what happens when passing nil
, but experimentally, it deletes the first element. As such, if tc.root
happens to be the first element of tc.root.parent
, then this rips tc.root
out of the tree, and the following line throws an error
NoMethodError: [!] undefined method `delete_element' for nil:NilClass
This is occurring with us for version 3.10.1 but the code is unchanged in master
.
I don't know precisely why this issue is happening now; we did just upgrade our fastlane
to the latest version though.
Complete output when running fastlane, including the stack trace and command used
Full stack trace
NoMethodError: [!] undefined method `delete_element' for nil:NilClass
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/html_test_report.rb:189:in `block in remove_duplicate_testcases'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/html_test_report.rb:186:in `each'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/html_test_report.rb:186:in `remove_duplicate_testcases'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/html_test_report.rb:26:in `each'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/html_test_report.rb:26:in `collate_report'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/actions/collate_html_reports.rb:14:in `block in run'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/actions/collate_html_reports.rb:13:in `each'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/actions/collate_html_reports.rb:13:in `run'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/multi_scan_manager/report_collator.rb:89:in `collate_html_reports'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/multi_scan_manager/report_collator.rb:29:in `collate'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/multi_scan_manager/runner.rb:250:in `collate_batched_reports_for_testable'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/multi_scan_manager/runner.rb:198:in `block in collate_batched_reports'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/multi_scan_manager/runner.rb:197:in `each'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/multi_scan_manager/runner.rb:197:in `collate_batched_reports'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/multi_scan_manager/runner.rb:179:in `run_test_batches'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/helper/multi_scan_manager/runner.rb:70:in `run'
/Users/jenkins/.bundle/jenkins/gems/fastlane-plugin-test_center-3.10.1/lib/fastlane/plugin/test_center/actions/multi_scan.rb:34:in `run'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/runner.rb:261:in `block (2 levels) in execute_action'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/actions/actions_helper.rb:50:in `execute_action'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/runner.rb:253:in `block in execute_action'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/runner.rb:227:in `chdir'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/runner.rb:227:in `execute_action'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/runner.rb:157:in `trigger_action_by_name'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/fast_file.rb:159:in `method_missing'
Fastfile:478:in `block (2 levels) in parsing_binding'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/lane.rb:33:in `call'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/runner.rb:49:in `block in execute'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/runner.rb:45:in `chdir'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/runner.rb:45:in `execute'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/lane_manager.rb:47:in `cruise_lane'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/command_line_handler.rb:36:in `handle'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/commands_generator.rb:108:in `block (2 levels) in run'
/Users/jenkins/.bundle/jenkins/gems/commander-fastlane-4.4.6/lib/commander/command.rb:178:in `call'
/Users/jenkins/.bundle/jenkins/gems/commander-fastlane-4.4.6/lib/commander/command.rb:153:in `run'
/Users/jenkins/.bundle/jenkins/gems/commander-fastlane-4.4.6/lib/commander/runner.rb:476:in `run_active_command'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:76:in `run!'
/Users/jenkins/.bundle/jenkins/gems/commander-fastlane-4.4.6/lib/commander/delegates.rb:15:in `run!'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/commands_generator.rb:352:in `run'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/commands_generator.rb:41:in `start'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/fastlane/lib/fastlane/cli_tools_distributor.rb:119:in `take_off'
/Users/jenkins/.bundle/jenkins/gems/fastlane-2.150.0.rc4/bin/fastlane:23:in `<top (required)>'
/Users/jenkins/.bundle/jenkins/bin/fastlane:23:in `load'
/Users/jenkins/.bundle/jenkins/bin/fastlane:23:in `<top (required)>'
Looks like this may actually be a "nearly 100% issue" for us rather than an intermittent issue, when running our full UI test suite.
Hello, @lilyball. This is my top priority for multi_scan
at the moment as it is a crash that is disrupting any use of the tool.
While I work on this, can you look at this Issue? Someone with a similar error was able to provide the logs and it seems that some outside process was actually interfering with the production of the HTML files -- they were malformed.
I don't have the branch that Zardazare used to test, but you could disable collation of html files and examine the files for validity by providing false
for the collate_reports
option in multi_scan
.
@lilyball, can you modify your Pluginfile
per my instructions below, run bundle install
, and then run your fastlane again (with the --verbose
flag)?
Pluginfile:
gem 'fastlane-plugin-test_center', :git => "https://github.com/lyndsey-ferguson/fastlane-plugin-test_center.git", :branch => "issue-250-html-collation-crash"
If there are still problems, please let me know and attach the console output as a text file to this issue (makes it easier for me to review). If it works, please let me know.
I ran a full build of the test suite with your modified plugin, no failure. I then ran a build with collate_reports: false
so I could inspect the individual html files. There's a lot so I couldn't look at everything, but every test failure I looked at had associated failure details.
So this doesn't actually tell me what was failing. However, PR #251 should fix the actual crash, with the unless failure_details.nil?
check.
Fixed in v3.11.6