AU: fix bug in GPIO handler that caused failed discovery to be ignored

This solves two issues:

* The GPIO handler will attempt to use GPIO devices even when discovery
  via udev has failed. Not any more.

* GPIO discovery would return success even when it failed on a previous
  attempt. Now it'll reflect the actual result of the discovery attempt.

* Reporting of file descriptor open errors is obscured due to
  intermittent operations that reset errno, now fixed.

* Added test case to ensure that repeat GPIO discovery is not attempted,
  and that test mode check will automatically fail if a previous
  initialization/discovery had failed.

BUG=None
TEST=Passes unit tests
TEST=All symptoms gone on real update attempt w/ x86-alex

Change-Id: I01a7b1e316dbb5b94487a5aad1560d994feae9ff
Reviewed-on: https://gerrit.chromium.org/gerrit/40946
Commit-Queue: Gilad Arnold <garnold@chromium.org>
Reviewed-by: Gilad Arnold <garnold@chromium.org>
Tested-by: Gilad Arnold <garnold@chromium.org>
7 files changed
tree: 2baf215cb4d72ccc9b56c592df9713c4169f05cb
  1. .gitignore
  2. 99-gpio-dutflag.rules
  3. action.h
  4. action_mock.h
  5. action_pipe.h
  6. action_pipe_unittest.cc
  7. action_processor.cc
  8. action_processor.h
  9. action_processor_mock.h
  10. action_processor_unittest.cc
  11. action_unittest.cc
  12. build
  13. bzip.cc
  14. bzip.h
  15. bzip_extent_writer.cc
  16. bzip_extent_writer.h
  17. bzip_extent_writer_unittest.cc
  18. certificate_checker.cc
  19. certificate_checker.h
  20. certificate_checker_mock.h
  21. certificate_checker_unittest.cc
  22. chrome_browser_proxy_resolver.cc
  23. chrome_browser_proxy_resolver.h
  24. chrome_browser_proxy_resolver_unittest.cc
  25. chrome_proxy_resolver.cc
  26. chrome_proxy_resolver.h
  27. chrome_proxy_resolver_unittest.cc
  28. connection_manager.cc
  29. connection_manager.h
  30. connection_manager_unittest.cc
  31. cycle_breaker.cc
  32. cycle_breaker.h
  33. cycle_breaker_unittest.cc
  34. dbus_constants.h
  35. dbus_interface.h
  36. dbus_service.cc
  37. dbus_service.h
  38. delta_diff_generator.cc
  39. delta_diff_generator.h
  40. delta_diff_generator_unittest.cc
  41. delta_performer.cc
  42. delta_performer.h
  43. delta_performer_unittest.cc
  44. download_action.cc
  45. download_action.h
  46. download_action_unittest.cc
  47. extent_mapper.cc
  48. extent_mapper.h
  49. extent_mapper_unittest.cc
  50. extent_ranges.cc
  51. extent_ranges.h
  52. extent_ranges_unittest.cc
  53. extent_writer.cc
  54. extent_writer.h
  55. extent_writer_unittest.cc
  56. file_descriptor.cc
  57. file_descriptor.h
  58. file_writer.cc
  59. file_writer.h
  60. file_writer_mock.h
  61. file_writer_unittest.cc
  62. filesystem_copier_action.cc
  63. filesystem_copier_action.h
  64. filesystem_copier_action_unittest.cc
  65. filesystem_iterator.cc
  66. filesystem_iterator.h
  67. filesystem_iterator_unittest.cc
  68. full_update_generator.cc
  69. full_update_generator.h
  70. full_update_generator_unittest.cc
  71. gen_coverage_html
  72. generate_delta_main.cc
  73. gpio_handler.cc
  74. gpio_handler.h
  75. gpio_handler_unittest.cc
  76. gpio_handler_unittest.h
  77. gpio_mock_file_descriptor.cc
  78. gpio_mock_file_descriptor.h
  79. gpio_mock_udev_interface.cc
  80. gpio_mock_udev_interface.h
  81. graph_types.h
  82. graph_utils.cc
  83. graph_utils.h
  84. graph_utils_unittest.cc
  85. http_common.cc
  86. http_common.h
  87. http_fetcher.cc
  88. http_fetcher.h
  89. http_fetcher_unittest.cc
  90. http_fetcher_unittest.h
  91. inherit-review-settings-ok
  92. install_plan.h
  93. integration_unittest.cc
  94. libcurl_http_fetcher.cc
  95. libcurl_http_fetcher.h
  96. LICENSE
  97. local_coverage_rate
  98. main.cc
  99. marshal.list
  100. metadata.cc
  101. metadata.h
  102. metadata_unittest.cc
  103. mock_connection_manager.h
  104. mock_dbus_interface.h
  105. mock_file_writer.h
  106. mock_gpio_handler.h
  107. mock_http_fetcher.cc
  108. mock_http_fetcher.h
  109. mock_payload_state.h
  110. mock_system_state.h
  111. multi_range_http_fetcher.cc
  112. multi_range_http_fetcher.h
  113. omaha_hash_calculator.cc
  114. omaha_hash_calculator.h
  115. omaha_hash_calculator_unittest.cc
  116. omaha_request_action.cc
  117. omaha_request_action.h
  118. omaha_request_action_unittest.cc
  119. omaha_request_params.cc
  120. omaha_request_params.h
  121. omaha_request_params_unittest.cc
  122. omaha_response.h
  123. omaha_response_handler_action.cc
  124. omaha_response_handler_action.h
  125. omaha_response_handler_action_unittest.cc
  126. org.chromium.UpdateEngine.service
  127. payload_signer.cc
  128. payload_signer.h
  129. payload_signer_unittest.cc
  130. payload_state.cc
  131. payload_state.h
  132. payload_state_interface.h
  133. payload_state_unittest.cc
  134. postinstall_runner_action.cc
  135. postinstall_runner_action.h
  136. postinstall_runner_action_unittest.cc
  137. prefs.cc
  138. prefs.h
  139. prefs_interface.h
  140. prefs_mock.h
  141. prefs_unittest.cc
  142. proxy_resolver.cc
  143. proxy_resolver.h
  144. run_unittests
  145. sample_omaha_v3_response.xml
  146. SConstruct
  147. setup_dev_packages
  148. simple_key_value_store.cc
  149. simple_key_value_store.h
  150. simple_key_value_store_unittest.cc
  151. subprocess.cc
  152. subprocess.h
  153. subprocess_unittest.cc
  154. system_state.cc
  155. system_state.h
  156. tarjan.cc
  157. tarjan.h
  158. tarjan_unittest.cc
  159. terminator.cc
  160. terminator.h
  161. terminator_unittest.cc
  162. test_http_server.cc
  163. test_utils.cc
  164. test_utils.h
  165. testrunner.cc
  166. topological_sort.cc
  167. topological_sort.h
  168. topological_sort_unittest.cc
  169. udev_interface.h
  170. unittest_key.pem
  171. unittest_key2.pem
  172. update_attempter.cc
  173. update_attempter.h
  174. update_attempter_mock.h
  175. update_attempter_unittest.cc
  176. update_check_scheduler.cc
  177. update_check_scheduler.h
  178. update_check_scheduler_unittest.cc
  179. update_engine.xml
  180. update_engine_client.cc
  181. update_metadata.proto
  182. UpdateEngine.conf
  183. utils.cc
  184. utils.h
  185. utils_unittest.cc
  186. WATCHLISTS
  187. zip_unittest.cc