rubygems-update 3.1.6 → 3.2.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (347) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +55 -19
  3. data/CONTRIBUTING.md +1 -2
  4. data/History.txt +122 -14
  5. data/Manifest.txt +13 -25
  6. data/POLICIES.md +2 -9
  7. data/README.md +1 -1
  8. data/Rakefile +31 -33
  9. data/bin/update_rubygems +1 -1
  10. data/bundler/CHANGELOG.md +806 -741
  11. data/bundler/README.md +6 -8
  12. data/bundler/UPGRADING.md +16 -30
  13. data/bundler/bundler.gemspec +3 -3
  14. data/bundler/exe/bundle +3 -0
  15. data/bundler/lib/bundler.rb +15 -4
  16. data/bundler/lib/bundler/build_metadata.rb +2 -2
  17. data/bundler/lib/bundler/cli.rb +32 -11
  18. data/bundler/lib/bundler/cli/console.rb +1 -1
  19. data/bundler/lib/bundler/cli/gem.rb +83 -10
  20. data/bundler/lib/bundler/cli/info.rb +13 -3
  21. data/bundler/lib/bundler/cli/init.rb +1 -1
  22. data/bundler/lib/bundler/cli/install.rb +5 -14
  23. data/bundler/lib/bundler/cli/issue.rb +2 -2
  24. data/bundler/lib/bundler/cli/list.rb +11 -9
  25. data/bundler/lib/bundler/cli/outdated.rb +88 -65
  26. data/bundler/lib/bundler/cli/plugin.rb +10 -0
  27. data/bundler/lib/bundler/cli/pristine.rb +5 -0
  28. data/bundler/lib/bundler/definition.rb +32 -32
  29. data/bundler/lib/bundler/dependency.rb +0 -9
  30. data/bundler/lib/bundler/dsl.rb +1 -5
  31. data/bundler/lib/bundler/environment_preserver.rb +26 -2
  32. data/bundler/lib/bundler/errors.rb +1 -0
  33. data/bundler/lib/bundler/feature_flag.rb +0 -2
  34. data/bundler/lib/bundler/fetcher.rb +1 -0
  35. data/bundler/lib/bundler/friendly_errors.rb +4 -10
  36. data/bundler/lib/bundler/gem_helper.rb +17 -10
  37. data/bundler/lib/bundler/gem_version_promoter.rb +1 -1
  38. data/bundler/lib/bundler/injector.rb +14 -3
  39. data/bundler/lib/bundler/inline.rb +1 -1
  40. data/bundler/lib/bundler/installer.rb +29 -28
  41. data/bundler/lib/bundler/installer/gem_installer.rb +2 -2
  42. data/bundler/lib/bundler/installer/parallel_installer.rb +9 -9
  43. data/bundler/lib/bundler/lazy_specification.rb +16 -3
  44. data/bundler/lib/bundler/plugin.rb +26 -0
  45. data/bundler/lib/bundler/plugin/index.rb +9 -0
  46. data/bundler/lib/bundler/psyched_yaml.rb +0 -15
  47. data/bundler/lib/bundler/remote_specification.rb +4 -1
  48. data/bundler/lib/bundler/resolver.rb +31 -8
  49. data/bundler/lib/bundler/resolver/spec_group.rb +26 -5
  50. data/bundler/lib/bundler/rubygems_ext.rb +7 -8
  51. data/bundler/lib/bundler/rubygems_gem_installer.rb +1 -7
  52. data/bundler/lib/bundler/rubygems_integration.rb +3 -48
  53. data/bundler/lib/bundler/runtime.rb +2 -12
  54. data/bundler/lib/bundler/settings.rb +0 -3
  55. data/bundler/lib/bundler/shared_helpers.rb +1 -1
  56. data/bundler/lib/bundler/source/git.rb +4 -4
  57. data/bundler/lib/bundler/source/git/git_proxy.rb +53 -58
  58. data/bundler/lib/bundler/source/path.rb +5 -1
  59. data/bundler/lib/bundler/source/path/installer.rb +7 -9
  60. data/bundler/lib/bundler/source/rubygems.rb +11 -14
  61. data/bundler/lib/bundler/stub_specification.rb +16 -4
  62. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +57 -47
  63. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +9 -1
  64. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +19 -5
  65. data/bundler/lib/bundler/templates/newgem/bin/console.tt +2 -0
  66. data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +13 -0
  67. data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +2 -0
  68. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +18 -0
  69. data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +9 -0
  70. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +2 -0
  71. data/bundler/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +2 -0
  72. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +6 -4
  73. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +10 -0
  74. data/bundler/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +2 -0
  75. data/bundler/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +2 -0
  76. data/bundler/lib/bundler/templates/newgem/test/{newgem_test.rb.tt → minitest/newgem_test.rb.tt} +2 -0
  77. data/bundler/lib/bundler/templates/newgem/test/{test_helper.rb.tt → minitest/test_helper.rb.tt} +2 -0
  78. data/bundler/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
  79. data/bundler/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
  80. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +75 -189
  81. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +0 -7
  82. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +2 -1
  83. data/bundler/lib/bundler/vendor/thor/lib/thor/base.rb +9 -0
  84. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  85. data/bundler/lib/bundler/version.rb +1 -1
  86. data/bundler/man/bundle-add.1 +1 -1
  87. data/bundler/man/bundle-add.1.txt +15 -15
  88. data/bundler/man/bundle-binstubs.1 +1 -1
  89. data/bundler/man/bundle-binstubs.1.txt +10 -10
  90. data/bundler/man/bundle-cache.1 +1 -1
  91. data/bundler/man/bundle-cache.1.txt +15 -15
  92. data/bundler/man/bundle-check.1 +1 -1
  93. data/bundler/man/bundle-check.1.txt +8 -8
  94. data/bundler/man/bundle-clean.1 +1 -1
  95. data/bundler/man/bundle-clean.1.txt +6 -6
  96. data/bundler/man/bundle-config.1 +3 -9
  97. data/bundler/man/bundle-config.1.txt +271 -272
  98. data/bundler/man/bundle-config.ronn +5 -9
  99. data/bundler/man/bundle-doctor.1 +1 -1
  100. data/bundler/man/bundle-doctor.1.txt +9 -9
  101. data/bundler/man/bundle-exec.1 +1 -1
  102. data/bundler/man/bundle-exec.1.txt +84 -81
  103. data/bundler/man/bundle-gem.1 +25 -3
  104. data/bundler/man/bundle-gem.1.txt +65 -39
  105. data/bundler/man/bundle-gem.ronn +30 -7
  106. data/bundler/man/bundle-info.1 +1 -1
  107. data/bundler/man/bundle-info.1.txt +2 -2
  108. data/bundler/man/bundle-init.1 +1 -1
  109. data/bundler/man/bundle-init.1.txt +9 -9
  110. data/bundler/man/bundle-inject.1 +1 -1
  111. data/bundler/man/bundle-inject.1.txt +4 -4
  112. data/bundler/man/bundle-install.1 +1 -1
  113. data/bundler/man/bundle-install.1.txt +169 -169
  114. data/bundler/man/bundle-list.1 +7 -7
  115. data/bundler/man/bundle-list.1.txt +12 -11
  116. data/bundler/man/bundle-list.ronn +6 -6
  117. data/bundler/man/bundle-lock.1 +1 -1
  118. data/bundler/man/bundle-lock.1.txt +28 -28
  119. data/bundler/man/bundle-open.1 +1 -1
  120. data/bundler/man/bundle-open.1.txt +3 -3
  121. data/bundler/man/bundle-outdated.1 +1 -1
  122. data/bundler/man/bundle-outdated.1.txt +34 -34
  123. data/bundler/man/bundle-platform.1 +1 -1
  124. data/bundler/man/bundle-platform.1.txt +16 -16
  125. data/bundler/man/bundle-pristine.1 +1 -1
  126. data/bundler/man/bundle-pristine.1.txt +8 -8
  127. data/bundler/man/bundle-remove.1 +1 -1
  128. data/bundler/man/bundle-remove.1.txt +9 -9
  129. data/bundler/man/bundle-show.1 +1 -1
  130. data/bundler/man/bundle-show.1.txt +8 -8
  131. data/bundler/man/bundle-update.1 +1 -1
  132. data/bundler/man/bundle-update.1.txt +149 -148
  133. data/bundler/man/bundle-viz.1 +1 -1
  134. data/bundler/man/bundle-viz.1.txt +11 -11
  135. data/bundler/man/bundle.1 +1 -1
  136. data/bundler/man/bundle.1.txt +31 -31
  137. data/bundler/man/gemfile.5 +1 -1
  138. data/bundler/man/gemfile.5.txt +218 -216
  139. data/lib/rubygems.rb +68 -148
  140. data/lib/rubygems/available_set.rb +4 -4
  141. data/lib/rubygems/basic_specification.rb +11 -5
  142. data/lib/rubygems/bundler_version_finder.rb +14 -9
  143. data/lib/rubygems/command.rb +16 -14
  144. data/lib/rubygems/command_manager.rb +4 -3
  145. data/lib/rubygems/commands/cert_command.rb +1 -1
  146. data/lib/rubygems/commands/cleanup_command.rb +3 -3
  147. data/lib/rubygems/commands/contents_command.rb +4 -4
  148. data/lib/rubygems/commands/dependency_command.rb +6 -6
  149. data/lib/rubygems/commands/fetch_command.rb +2 -2
  150. data/lib/rubygems/commands/help_command.rb +1 -1
  151. data/lib/rubygems/commands/info_command.rb +9 -4
  152. data/lib/rubygems/commands/install_command.rb +3 -3
  153. data/lib/rubygems/commands/list_command.rb +9 -6
  154. data/lib/rubygems/commands/lock_command.rb +1 -1
  155. data/lib/rubygems/commands/open_command.rb +0 -2
  156. data/lib/rubygems/commands/pristine_command.rb +10 -2
  157. data/lib/rubygems/commands/push_command.rb +4 -42
  158. data/lib/rubygems/commands/query_command.rb +7 -352
  159. data/lib/rubygems/commands/search_command.rb +8 -6
  160. data/lib/rubygems/commands/setup_command.rb +128 -32
  161. data/lib/rubygems/commands/specification_command.rb +2 -2
  162. data/lib/rubygems/commands/stale_command.rb +1 -1
  163. data/lib/rubygems/commands/uninstall_command.rb +1 -1
  164. data/lib/rubygems/commands/unpack_command.rb +1 -1
  165. data/lib/rubygems/commands/update_command.rb +40 -10
  166. data/lib/rubygems/config_file.rb +11 -2
  167. data/lib/rubygems/core_ext/kernel_require.rb +2 -2
  168. data/lib/rubygems/defaults.rb +99 -5
  169. data/lib/rubygems/dependency.rb +2 -5
  170. data/lib/rubygems/dependency_installer.rb +1 -73
  171. data/lib/rubygems/dependency_list.rb +7 -7
  172. data/lib/rubygems/deprecate.rb +46 -1
  173. data/lib/rubygems/doctor.rb +4 -2
  174. data/lib/rubygems/errors.rb +3 -2
  175. data/lib/rubygems/exceptions.rb +2 -13
  176. data/lib/rubygems/ext.rb +6 -6
  177. data/lib/rubygems/ext/build_error.rb +2 -0
  178. data/lib/rubygems/ext/builder.rb +1 -1
  179. data/lib/rubygems/ext/cmake_builder.rb +1 -1
  180. data/lib/rubygems/ext/ext_conf_builder.rb +6 -7
  181. data/lib/rubygems/gem_runner.rb +3 -8
  182. data/lib/rubygems/gemcutter_utilities.rb +1 -1
  183. data/lib/rubygems/indexer.rb +1 -19
  184. data/lib/rubygems/install_update_options.rb +5 -5
  185. data/lib/rubygems/installer.rb +45 -42
  186. data/lib/rubygems/installer_test_case.rb +19 -2
  187. data/lib/rubygems/installer_uninstaller_utils.rb +24 -0
  188. data/lib/rubygems/local_remote_options.rb +1 -1
  189. data/lib/rubygems/name_tuple.rb +2 -4
  190. data/lib/rubygems/package.rb +8 -13
  191. data/lib/rubygems/package/old.rb +1 -1
  192. data/lib/rubygems/package/tar_header.rb +3 -3
  193. data/lib/rubygems/package/tar_reader.rb +0 -1
  194. data/lib/rubygems/package/tar_reader/entry.rb +0 -1
  195. data/lib/rubygems/package/tar_test_case.rb +1 -1
  196. data/lib/rubygems/package/tar_writer.rb +2 -6
  197. data/lib/rubygems/package_task.rb +1 -5
  198. data/lib/rubygems/path_support.rb +1 -1
  199. data/lib/rubygems/platform.rb +3 -3
  200. data/lib/rubygems/query_utils.rb +362 -0
  201. data/lib/rubygems/rdoc.rb +0 -12
  202. data/lib/rubygems/remote_fetcher.rb +5 -19
  203. data/lib/rubygems/request/connection_pools.rb +1 -1
  204. data/lib/rubygems/request_set.rb +5 -5
  205. data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
  206. data/lib/rubygems/request_set/lockfile.rb +8 -8
  207. data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
  208. data/lib/rubygems/requirement.rb +14 -15
  209. data/lib/rubygems/resolver.rb +7 -8
  210. data/lib/rubygems/resolver/api_set.rb +3 -3
  211. data/lib/rubygems/resolver/composed_set.rb +3 -3
  212. data/lib/rubygems/resolver/conflict.rb +1 -1
  213. data/lib/rubygems/resolver/index_set.rb +1 -1
  214. data/lib/rubygems/resolver/installer_set.rb +3 -3
  215. data/lib/rubygems/resolver/lock_set.rb +1 -1
  216. data/lib/rubygems/safe_yaml.rb +4 -4
  217. data/lib/rubygems/security.rb +25 -25
  218. data/lib/rubygems/security/policy.rb +3 -3
  219. data/lib/rubygems/security/signer.rb +4 -4
  220. data/lib/rubygems/security/trust_dir.rb +1 -1
  221. data/lib/rubygems/server.rb +8 -8
  222. data/lib/rubygems/source/git.rb +7 -6
  223. data/lib/rubygems/source/local.rb +2 -2
  224. data/lib/rubygems/source_list.rb +4 -5
  225. data/lib/rubygems/spec_fetcher.rb +18 -15
  226. data/lib/rubygems/specification.rb +79 -104
  227. data/lib/rubygems/specification_policy.rb +79 -27
  228. data/lib/rubygems/ssl_certs/{rubygems.org → index.rubygems.org}/GlobalSignRootCA.pem +0 -0
  229. data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +23 -0
  230. data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +25 -0
  231. data/lib/rubygems/test_case.rb +63 -83
  232. data/lib/rubygems/test_utilities.rb +6 -6
  233. data/lib/rubygems/uninstaller.rb +35 -14
  234. data/lib/rubygems/user_interaction.rb +1 -10
  235. data/lib/rubygems/util.rb +10 -2
  236. data/lib/rubygems/util/licenses.rb +4 -4
  237. data/lib/rubygems/validator.rb +1 -1
  238. data/lib/rubygems/version.rb +4 -4
  239. data/rubygems-update.gemspec +2 -2
  240. data/setup.rb +2 -7
  241. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -2
  242. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -2
  243. data/test/rubygems/test_bundled_ca.rb +4 -12
  244. data/test/rubygems/test_deprecate.rb +43 -4
  245. data/test/rubygems/test_gem.rb +79 -74
  246. data/test/rubygems/test_gem_available_set.rb +3 -3
  247. data/test/rubygems/test_gem_bundler_version_finder.rb +19 -1
  248. data/test/rubygems/test_gem_command.rb +24 -3
  249. data/test/rubygems/test_gem_command_manager.rb +37 -4
  250. data/test/rubygems/test_gem_commands_build_command.rb +7 -2
  251. data/test/rubygems/test_gem_commands_cert_command.rb +2 -2
  252. data/test/rubygems/test_gem_commands_cleanup_command.rb +1 -1
  253. data/test/rubygems/test_gem_commands_contents_command.rb +48 -15
  254. data/test/rubygems/test_gem_commands_environment_command.rb +21 -21
  255. data/test/rubygems/test_gem_commands_generate_index_command.rb +1 -5
  256. data/test/rubygems/test_gem_commands_info_command.rb +6 -6
  257. data/test/rubygems/test_gem_commands_install_command.rb +31 -31
  258. data/test/rubygems/test_gem_commands_mirror.rb +1 -1
  259. data/test/rubygems/test_gem_commands_open_command.rb +4 -4
  260. data/test/rubygems/test_gem_commands_owner_command.rb +11 -3
  261. data/test/rubygems/test_gem_commands_pristine_command.rb +41 -8
  262. data/test/rubygems/test_gem_commands_push_command.rb +7 -2
  263. data/test/rubygems/test_gem_commands_query_command.rb +9 -5
  264. data/test/rubygems/test_gem_commands_setup_command.rb +160 -108
  265. data/test/rubygems/test_gem_commands_signin_command.rb +6 -4
  266. data/test/rubygems/test_gem_commands_signout_command.rb +0 -5
  267. data/test/rubygems/test_gem_commands_specification_command.rb +18 -18
  268. data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
  269. data/test/rubygems/test_gem_commands_update_command.rb +68 -5
  270. data/test/rubygems/test_gem_commands_which_command.rb +3 -3
  271. data/test/rubygems/test_gem_commands_yank_command.rb +14 -6
  272. data/test/rubygems/test_gem_config_file.rb +7 -10
  273. data/test/rubygems/test_gem_dependency_installer.rb +52 -189
  274. data/test/rubygems/test_gem_dependency_list.rb +8 -8
  275. data/test/rubygems/test_gem_dependency_resolution_error.rb +1 -1
  276. data/test/rubygems/test_gem_doctor.rb +28 -0
  277. data/test/rubygems/test_gem_ext_builder.rb +14 -25
  278. data/test/rubygems/test_gem_ext_cmake_builder.rb +13 -12
  279. data/test/rubygems/test_gem_ext_configure_builder.rb +1 -9
  280. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -1
  281. data/test/rubygems/test_gem_ext_rake_builder.rb +9 -9
  282. data/test/rubygems/test_gem_gem_runner.rb +42 -0
  283. data/test/rubygems/test_gem_gemcutter_utilities.rb +5 -0
  284. data/test/rubygems/test_gem_indexer.rb +9 -13
  285. data/test/rubygems/test_gem_installer.rb +149 -45
  286. data/test/rubygems/test_gem_package.rb +13 -12
  287. data/test/rubygems/test_gem_package_tar_header.rb +19 -0
  288. data/test/rubygems/test_gem_package_tar_writer.rb +3 -3
  289. data/test/rubygems/test_gem_package_task.rb +46 -11
  290. data/test/rubygems/test_gem_remote_fetcher.rb +152 -190
  291. data/test/rubygems/test_gem_request.rb +11 -11
  292. data/test/rubygems/test_gem_request_set.rb +20 -20
  293. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +3 -3
  294. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +9 -9
  295. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +118 -118
  296. data/test/rubygems/test_gem_requirement.rb +2 -2
  297. data/test/rubygems/test_gem_resolver.rb +6 -6
  298. data/test/rubygems/test_gem_resolver_api_set.rb +3 -3
  299. data/test/rubygems/test_gem_resolver_best_set.rb +2 -2
  300. data/test/rubygems/test_gem_resolver_index_set.rb +2 -2
  301. data/test/rubygems/test_gem_resolver_installer_set.rb +7 -7
  302. data/test/rubygems/test_gem_resolver_lock_set.rb +3 -3
  303. data/test/rubygems/test_gem_security.rb +20 -20
  304. data/test/rubygems/test_gem_security_policy.rb +5 -8
  305. data/test/rubygems/test_gem_security_signer.rb +8 -8
  306. data/test/rubygems/test_gem_security_trust_dir.rb +2 -2
  307. data/test/rubygems/test_gem_server.rb +10 -10
  308. data/test/rubygems/test_gem_source.rb +12 -14
  309. data/test/rubygems/test_gem_source_git.rb +12 -11
  310. data/test/rubygems/test_gem_source_installed.rb +7 -7
  311. data/test/rubygems/test_gem_source_local.rb +8 -8
  312. data/test/rubygems/test_gem_source_lock.rb +10 -10
  313. data/test/rubygems/test_gem_source_specific_file.rb +7 -7
  314. data/test/rubygems/test_gem_source_vendor.rb +7 -7
  315. data/test/rubygems/test_gem_spec_fetcher.rb +11 -2
  316. data/test/rubygems/test_gem_specification.rb +143 -113
  317. data/test/rubygems/test_gem_stream_ui.rb +3 -1
  318. data/test/rubygems/test_gem_text.rb +1 -1
  319. data/test/rubygems/test_gem_uninstaller.rb +134 -10
  320. data/test/rubygems/test_gem_util.rb +7 -5
  321. data/test/rubygems/test_gem_version.rb +1 -1
  322. data/test/rubygems/test_kernel.rb +10 -12
  323. data/test/rubygems/test_project_sanity.rb +8 -1
  324. data/test/rubygems/test_require.rb +141 -43
  325. metadata +32 -45
  326. data/.bundle/config +0 -2
  327. data/.rubocop.yml +0 -91
  328. data/Gemfile +0 -8
  329. data/Gemfile.lock +0 -43
  330. data/bundler/CODE_OF_CONDUCT.md +0 -136
  331. data/lib/rubygems/source_local.rb +0 -7
  332. data/lib/rubygems/source_specific_file.rb +0 -6
  333. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +0 -21
  334. data/lib/ubygems.rb +0 -14
  335. data/tmp/.keep +0 -0
  336. data/util/CL2notes +0 -55
  337. data/util/bisect +0 -10
  338. data/util/ci.sh +0 -62
  339. data/util/cops/deprecations.rb +0 -52
  340. data/util/create_certs.rb +0 -171
  341. data/util/create_certs.sh +0 -27
  342. data/util/create_encrypted_key.rb +0 -16
  343. data/util/generate_spdx_license_list.rb +0 -63
  344. data/util/patch_with_prs.rb +0 -77
  345. data/util/rubocop +0 -8
  346. data/util/update_bundled_ca_certificates.rb +0 -137
  347. data/util/update_changelog.rb +0 -64
@@ -205,4 +205,23 @@ tjmather\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
205
205
  assert_equal 6932, tar_header.checksum
206
206
  end
207
207
 
208
+ def test_spaces_in_headers
209
+ stream = StringIO.new(
210
+ <<-EOF.dup.force_encoding('binary').split("\n").join
211
+ Access_Points_09202018.csv
212
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
213
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
214
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
215
+ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
216
+ \x00\x00100777 \x00 0 \x00 0 \x00 4357 13545040367 104501
217
+ \x000
218
+ EOF
219
+ )
220
+
221
+ tar_header = Gem::Package::TarHeader.from stream
222
+
223
+ assert_equal 0, tar_header.uid
224
+ assert_equal 0, tar_header.gid
225
+ end
226
+
208
227
  end
@@ -72,7 +72,7 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
72
72
  end
73
73
 
74
74
  def test_add_file_digest
75
- digest_algorithms = Digest::SHA1, Digest::SHA512
75
+ digest_algorithms = Digest::SHA1.new, Digest::SHA512.new
76
76
 
77
77
  Time.stub :now, Time.at(1458518157) do
78
78
  digests = @tar_writer.add_file_digest 'x', 0644, digest_algorithms do |io|
@@ -95,7 +95,7 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
95
95
  end
96
96
 
97
97
  def test_add_file_digest_multiple
98
- digest_algorithms = [Digest::SHA1, Digest::SHA512]
98
+ digest_algorithms = [Digest::SHA1.new, Digest::SHA512.new]
99
99
 
100
100
  Time.stub :now, Time.at(1458518157) do
101
101
  digests = @tar_writer.add_file_digest 'x', 0644, digest_algorithms do |io|
@@ -202,7 +202,7 @@ class TestGemPackageTarWriter < Gem::Package::TarTestCase
202
202
  end
203
203
 
204
204
  def test_add_file_simple_data
205
- @tar_writer.add_file_simple("lib/foo/bar", 0, 10) { |f| f.write @data }
205
+ @tar_writer.add_file_simple("lib/foo/bar", 0, 10) {|f| f.write @data }
206
206
  @tar_writer.flush
207
207
 
208
208
  assert_equal @data + ("\0" * (512 - @data.size)),
@@ -1,22 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
  require 'rubygems/test_case'
3
3
  require 'rubygems'
4
- require 'bundler/errors'
4
+
5
5
  begin
6
6
  require 'rubygems/package_task'
7
- rescue LoadError, Bundler::GemfileNotFound
7
+ rescue LoadError => e
8
+ raise unless e.path == 'rake/packagetask'
8
9
  end
9
10
 
10
- class TestGemPackageTask < Gem::TestCase
11
+ unless defined?(Rake::PackageTask)
12
+ warn 'Skipping Gem::PackageTask tests. rake not found.'
13
+ end
11
14
 
12
- def setup
13
- super
15
+ class TestGemPackageTask < Gem::TestCase
14
16
 
15
- Rake.application = Rake::Application.new
17
+ def test_gem_package
18
+ original_rake_fileutils_verbosity = RakeFileUtils.verbose_flag
16
19
  RakeFileUtils.verbose_flag = false
17
- end
18
20
 
19
- def test_gem_package
20
21
  gem = Gem::Specification.new do |g|
21
22
  g.name = "pkgr"
22
23
  g.version = "1.2.3"
@@ -26,7 +27,9 @@ class TestGemPackageTask < Gem::TestCase
26
27
  g.summary = 'summary'
27
28
  end
28
29
 
29
- pkg = Gem::PackageTask.new(gem) do |p|
30
+ Rake.application = Rake::Application.new
31
+
32
+ pkg = Gem::PackageTask.new(gem) do |p|
30
33
  p.package_files << "y"
31
34
  end
32
35
 
@@ -40,6 +43,38 @@ class TestGemPackageTask < Gem::TestCase
40
43
 
41
44
  assert_path_exists 'pkg/pkgr-1.2.3.gem'
42
45
  end
46
+ ensure
47
+ RakeFileUtils.verbose_flag = original_rake_fileutils_verbosity
48
+ end
49
+
50
+ def test_gem_package_prints_to_stdout_by_default
51
+ gem = Gem::Specification.new do |g|
52
+ g.name = "pkgr"
53
+ g.version = "1.2.3"
54
+
55
+ g.authors = %w[author]
56
+ g.files = %w[x]
57
+ g.summary = 'summary'
58
+ end
59
+
60
+ _, err = capture_io do
61
+ Rake.application = Rake::Application.new
62
+
63
+ pkg = Gem::PackageTask.new(gem) do |p|
64
+ p.package_files << "y"
65
+ end
66
+
67
+ assert_equal %w[x y], pkg.package_files
68
+
69
+ Dir.chdir @tempdir do
70
+ FileUtils.touch 'x'
71
+ FileUtils.touch 'y'
72
+
73
+ Rake.application['package'].invoke
74
+ end
75
+ end
76
+
77
+ assert_empty err
43
78
  end
44
79
 
45
80
  def test_gem_package_with_current_platform
@@ -49,7 +84,7 @@ class TestGemPackageTask < Gem::TestCase
49
84
  g.files = Rake::FileList["x"].resolve
50
85
  g.platform = Gem::Platform::CURRENT
51
86
  end
52
- pkg = Gem::PackageTask.new(gem) do |p|
87
+ pkg = Gem::PackageTask.new(gem) do |p|
53
88
  p.package_files << "y"
54
89
  end
55
90
  assert_equal ["x", "y"], pkg.package_files
@@ -62,7 +97,7 @@ class TestGemPackageTask < Gem::TestCase
62
97
  g.files = Rake::FileList["x"].resolve
63
98
  g.platform = Gem::Platform::RUBY
64
99
  end
65
- pkg = Gem::PackageTask.new(gem) do |p|
100
+ pkg = Gem::PackageTask.new(gem) do |p|
66
101
  p.package_files << "y"
67
102
  end
68
103
  assert_equal ["x", "y"], pkg.package_files
@@ -5,8 +5,7 @@ require 'webrick'
5
5
  begin
6
6
  require 'webrick/https'
7
7
  rescue LoadError => e
8
- raise unless (e.respond_to?(:path) && e.path == 'openssl') ||
9
- e.message =~ / -- openssl$/
8
+ raise unless e.path == 'openssl'
10
9
  end
11
10
 
12
11
  unless defined?(OpenSSL::SSL)
@@ -78,12 +77,10 @@ gems:
78
77
 
79
78
  PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, '0.4.2')
80
79
 
81
- DIR = File.expand_path(File.dirname(__FILE__))
82
-
83
80
  # Generated via:
84
81
  # x = OpenSSL::PKey::DH.new(2048) # wait a while...
85
82
  # x.to_s => pem
86
- TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_end_of_pem_
83
+ TEST_KEY_DH2048 = OpenSSL::PKey::DH.new <<-_END_OF_PEM_
87
84
  -----BEGIN DH PARAMETERS-----
88
85
  MIIBCAKCAQEA3Ze2EHSfYkZLUn557torAmjBgPsqzbodaRaGZtgK1gEU+9nNJaFV
89
86
  G1JKhmGUiEDyIW7idsBpe4sX/Wqjnp48Lr8IeI/SlEzLdoGpf05iRYXC8Cm9o8aM
@@ -92,7 +89,7 @@ cfmVgoSEAo9YLBpzoji2jHkO7Q5IPt4zxbTdlmmGFLc/GO9q7LGHhC+rcMcNTGsM
92
89
  NP0fuvVAIB158VnQ0liHSwcl6+9vE1mL0Jo/qEXQxl0+UdKDjaGfTsn6HIrwTnmJ
93
90
  PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
94
91
  -----END DH PARAMETERS-----
95
- _end_of_pem_
92
+ _END_OF_PEM_
96
93
 
97
94
  def setup
98
95
  @proxies = %w[https_proxy http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
@@ -100,20 +97,17 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
100
97
  @proxies.each {|k| ENV[k] = nil }
101
98
 
102
99
  super
103
- self.class.start_servers
104
- self.class.enable_yaml = true
105
- self.class.enable_zip = false
100
+ start_servers
101
+ self.enable_yaml = true
102
+ self.enable_zip = false
106
103
 
107
- base_server_uri = "http://localhost:#{self.class.normal_server_port}"
108
- @proxy_uri = "http://localhost:#{self.class.proxy_server_port}"
104
+ base_server_uri = "http://localhost:#{normal_server_port}"
105
+ @proxy_uri = "http://localhost:#{proxy_server_port}"
109
106
 
110
107
  @server_uri = base_server_uri + "/yaml"
111
108
  @server_z_uri = base_server_uri + "/yaml.Z"
112
109
 
113
- # REFACTOR: copied from test_gem_dependency_installer.rb
114
- @gems_dir = File.join @tempdir, 'gems'
115
110
  @cache_dir = File.join @gemhome, "cache"
116
- FileUtils.mkdir @gems_dir
117
111
 
118
112
  # TODO: why does the remote fetcher need it written to disk?
119
113
  @a1, @a1_gem = util_gem 'a', '1' do |s|
@@ -129,7 +123,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
129
123
 
130
124
  def teardown
131
125
  @fetcher.close_all
132
- self.class.stop_servers
126
+ stop_servers
133
127
  super
134
128
  Gem.configuration[:http_proxy] = nil
135
129
  @proxies.each_with_index {|k, i| ENV[k] = @old_proxies[i] }
@@ -153,42 +147,22 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
153
147
  assert_equal proxy_uri, fetcher.instance_variable_get(:@proxy).to_s
154
148
  end
155
149
 
156
- def test_fetch_size_bad_uri
150
+ def test_fetch_path_bad_uri
157
151
  fetcher = Gem::RemoteFetcher.new nil
158
152
  @fetcher = fetcher
159
153
 
160
154
  e = assert_raises ArgumentError do
161
- Gem::Deprecate.skip_during do
162
- fetcher.fetch_size 'gems.example.com/yaml'
163
- end
155
+ @fetcher.fetch_path("gems.example.com/yaml", nil, true)
164
156
  end
165
157
 
166
158
  assert_equal 'uri scheme is invalid: nil', e.message
167
159
  end
168
160
 
169
- def test_fetch_size_socket_error
170
- fetcher = Gem::RemoteFetcher.new nil
171
- @fetcher = fetcher
172
- def fetcher.request(uri, request_class, last_modified = nil)
173
- raise SocketError, "oops"
174
- end
175
-
176
- uri = 'http://gems.example.com/yaml'
177
- e = assert_raises Gem::RemoteFetcher::FetchError do
178
- Gem::Deprecate.skip_during do
179
- fetcher.fetch_size uri
180
- end
181
- end
182
-
183
- assert_equal "SocketError: oops (#{uri})", e.message
184
- end
185
-
186
161
  def test_no_proxy
187
162
  use_ui @stub_ui do
188
163
  assert_data_from_server @fetcher.fetch_path(@server_uri)
189
- Gem::Deprecate.skip_during do
190
- assert_equal SERVER_DATA.size, @fetcher.fetch_size(@server_uri)
191
- end
164
+ response = @fetcher.fetch_path(@server_uri, nil, true)
165
+ assert_equal SERVER_DATA.size, response['content-length'].to_i
192
166
  end
193
167
  end
194
168
 
@@ -519,7 +493,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
519
493
  fetcher.fetch_path url
520
494
  end
521
495
 
522
- assert_match %r|ECONNREFUSED:.*connect\(2\) \(#{Regexp.escape url}\)\z|,
496
+ assert_match %r{ECONNREFUSED:.*connect\(2\) \(#{Regexp.escape url}\)\z},
523
497
  e.message
524
498
  assert_equal url, e.uri
525
499
  end
@@ -737,7 +711,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
737
711
  assert_fetch_s3 url, '20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b'
738
712
  end
739
713
  ensure
740
- ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS')}
714
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS') }
741
715
  Gem.configuration[:s3_source] = nil
742
716
  end
743
717
 
@@ -753,7 +727,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
753
727
  assert_fetch_s3 url, '4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9', nil, 'us-west-2'
754
728
  end
755
729
  ensure
756
- ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS')}
730
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS') }
757
731
  Gem.configuration[:s3_source] = nil
758
732
  end
759
733
 
@@ -769,7 +743,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
769
743
  assert_fetch_s3 url, '935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c', 'testtoken'
770
744
  end
771
745
  ensure
772
- ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS')}
746
+ ENV.each_key {|key| ENV.delete(key) if key.start_with?('AWS') }
773
747
  Gem.configuration[:s3_source] = nil
774
748
  end
775
749
 
@@ -901,7 +875,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
901
875
 
902
876
  def test_yaml_error_on_size
903
877
  use_ui @stub_ui do
904
- self.class.enable_yaml = false
878
+ self.enable_yaml = false
905
879
  fetcher = Gem::RemoteFetcher.new nil
906
880
  @fetcher = fetcher
907
881
  assert_error { fetcher.size }
@@ -909,23 +883,20 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
909
883
  end
910
884
 
911
885
  def test_ssl_connection
912
- ssl_server = self.class.start_ssl_server
913
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
886
+ ssl_server = start_ssl_server
887
+ temp_ca_cert = File.join(__dir__, 'ca_cert.pem')
914
888
  with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
915
889
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
916
890
  end
917
891
  end
918
892
 
919
893
  def test_ssl_client_cert_auth_connection
920
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
921
- skip 'openssl in jruby fails' if java_platform?
922
-
923
- ssl_server = self.class.start_ssl_server({
894
+ ssl_server = start_ssl_server({
924
895
  :SSLVerifyClient =>
925
896
  OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
926
897
 
927
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
928
- temp_client_cert = File.join(DIR, 'client.pem')
898
+ temp_ca_cert = File.join(__dir__, 'ca_cert.pem')
899
+ temp_client_cert = File.join(__dir__, 'client.pem')
929
900
 
930
901
  with_configured_fetcher(
931
902
  ":ssl_ca_cert: #{temp_ca_cert}\n" +
@@ -935,14 +906,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
935
906
  end
936
907
 
937
908
  def test_do_not_allow_invalid_client_cert_auth_connection
938
- skip 'openssl is missing' unless defined?(OpenSSL::SSL)
939
-
940
- ssl_server = self.class.start_ssl_server({
909
+ ssl_server = start_ssl_server({
941
910
  :SSLVerifyClient =>
942
911
  OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT})
943
912
 
944
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
945
- temp_client_cert = File.join(DIR, 'invalid_client.pem')
913
+ temp_ca_cert = File.join(__dir__, 'ca_cert.pem')
914
+ temp_client_cert = File.join(__dir__, 'invalid_client.pem')
946
915
 
947
916
  with_configured_fetcher(
948
917
  ":ssl_ca_cert: #{temp_ca_cert}\n" +
@@ -954,7 +923,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
954
923
  end
955
924
 
956
925
  def test_do_not_allow_insecure_ssl_connection_by_default
957
- ssl_server = self.class.start_ssl_server
926
+ ssl_server = start_ssl_server
958
927
  with_configured_fetcher do |fetcher|
959
928
  assert_raises Gem::RemoteFetcher::FetchError do
960
929
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
@@ -963,15 +932,15 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
963
932
  end
964
933
 
965
934
  def test_ssl_connection_allow_verify_none
966
- ssl_server = self.class.start_ssl_server
935
+ ssl_server = start_ssl_server
967
936
  with_configured_fetcher(":ssl_verify_mode: 0") do |fetcher|
968
937
  fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
969
938
  end
970
939
  end
971
940
 
972
941
  def test_do_not_follow_insecure_redirect
973
- ssl_server = self.class.start_ssl_server
974
- temp_ca_cert = File.join(DIR, 'ca_cert.pem')
942
+ ssl_server = start_ssl_server
943
+ temp_ca_cert = File.join(__dir__, 'ca_cert.pem')
975
944
  expected_error_message =
976
945
  "redirecting to non-https resource: #{@server_uri} (https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri})"
977
946
 
@@ -985,7 +954,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
985
954
  end
986
955
 
987
956
  def test_nil_ca_cert
988
- ssl_server = self.class.start_ssl_server
957
+ ssl_server = start_ssl_server
989
958
  temp_ca_cert = nil
990
959
 
991
960
  with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
@@ -1037,151 +1006,144 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
1037
1006
 
1038
1007
  end
1039
1008
 
1040
- class << self
1009
+ private
1041
1010
 
1042
- attr_reader :normal_server, :proxy_server
1043
- attr_accessor :enable_zip, :enable_yaml
1011
+ attr_reader :normal_server, :proxy_server
1012
+ attr_accessor :enable_zip, :enable_yaml
1044
1013
 
1045
- def start_servers
1046
- @normal_server ||= start_server(SERVER_DATA)
1047
- @proxy_server ||= start_server(PROXY_DATA)
1048
- @enable_yaml = true
1049
- @enable_zip = false
1050
- @ssl_server = nil
1051
- @ssl_server_thread = nil
1052
- end
1014
+ def start_servers
1015
+ @normal_server ||= start_server(SERVER_DATA)
1016
+ @proxy_server ||= start_server(PROXY_DATA)
1017
+ @enable_yaml = true
1018
+ @enable_zip = false
1019
+ @ssl_server = nil
1020
+ @ssl_server_thread = nil
1021
+ end
1053
1022
 
1054
- def stop_servers
1055
- if @normal_server
1056
- @normal_server.kill.join
1057
- @normal_server = nil
1058
- end
1059
- if @proxy_server
1060
- @proxy_server.kill.join
1061
- @proxy_server = nil
1062
- end
1063
- if @ssl_server
1064
- @ssl_server.stop
1065
- @ssl_server = nil
1066
- end
1067
- if @ssl_server_thread
1068
- @ssl_server_thread.kill.join
1069
- @ssl_server_thread = nil
1070
- end
1071
- utils = WEBrick::Utils # TimeoutHandler is since 1.9
1072
- utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
1023
+ def stop_servers
1024
+ if @normal_server
1025
+ @normal_server.kill.join
1026
+ @normal_server = nil
1073
1027
  end
1074
-
1075
- def normal_server_port
1076
- @normal_server[:server].config[:Port]
1028
+ if @proxy_server
1029
+ @proxy_server.kill.join
1030
+ @proxy_server = nil
1077
1031
  end
1078
-
1079
- def proxy_server_port
1080
- @proxy_server[:server].config[:Port]
1032
+ if @ssl_server
1033
+ @ssl_server.stop
1034
+ @ssl_server = nil
1081
1035
  end
1036
+ if @ssl_server_thread
1037
+ @ssl_server_thread.kill.join
1038
+ @ssl_server_thread = nil
1039
+ end
1040
+ utils = WEBrick::Utils # TimeoutHandler is since 1.9
1041
+ utils::TimeoutHandler.terminate if defined?(utils::TimeoutHandler.terminate)
1042
+ end
1082
1043
 
1083
- DIR = File.expand_path(File.dirname(__FILE__))
1044
+ def normal_server_port
1045
+ @normal_server[:server].config[:Port]
1046
+ end
1084
1047
 
1085
- def start_ssl_server(config = {})
1086
- raise MiniTest::Skip, 'openssl not installed' unless
1087
- defined?(OpenSSL::SSL)
1048
+ def proxy_server_port
1049
+ @proxy_server[:server].config[:Port]
1050
+ end
1088
1051
 
1089
- null_logger = NilLog.new
1090
- server = WEBrick::HTTPServer.new({
1091
- :Port => 0,
1092
- :Logger => null_logger,
1093
- :AccessLog => [],
1094
- :SSLEnable => true,
1095
- :SSLCACertificateFile => File.join(DIR, 'ca_cert.pem'),
1096
- :SSLCertificate => cert('ssl_cert.pem'),
1097
- :SSLPrivateKey => key('ssl_key.pem'),
1098
- :SSLVerifyClient => nil,
1099
- :SSLCertName => nil
1100
- }.merge(config))
1101
- server.mount_proc("/yaml") do |req, res|
1102
- res.body = "--- true\n"
1103
- end
1104
- server.mount_proc("/insecure_redirect") do |req, res|
1105
- res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to'])
1106
- end
1107
- server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
1108
- t = Thread.new do
1109
- begin
1110
- server.start
1111
- rescue Exception => ex
1112
- abort ex.message
1113
- puts "ERROR during server thread: #{ex.message}"
1114
- ensure
1115
- server.shutdown
1116
- end
1117
- end
1118
- while server.status != :Running
1119
- sleep 0.1
1120
- unless t.alive?
1121
- t.join
1122
- raise
1123
- end
1052
+ def start_ssl_server(config = {})
1053
+ skip "starting this test server fails randomly on jruby" if Gem.java_platform?
1054
+
1055
+ null_logger = NilLog.new
1056
+ server = WEBrick::HTTPServer.new({
1057
+ :Port => 0,
1058
+ :Logger => null_logger,
1059
+ :AccessLog => [],
1060
+ :SSLEnable => true,
1061
+ :SSLCACertificateFile => File.join(__dir__, 'ca_cert.pem'),
1062
+ :SSLCertificate => cert('ssl_cert.pem'),
1063
+ :SSLPrivateKey => key('ssl_key.pem'),
1064
+ :SSLVerifyClient => nil,
1065
+ :SSLCertName => nil
1066
+ }.merge(config))
1067
+ server.mount_proc("/yaml") do |req, res|
1068
+ res.body = "--- true\n"
1069
+ end
1070
+ server.mount_proc("/insecure_redirect") do |req, res|
1071
+ res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query['to'])
1072
+ end
1073
+ server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
1074
+ t = Thread.new do
1075
+ begin
1076
+ server.start
1077
+ rescue Exception => ex
1078
+ puts "ERROR during server thread: #{ex.message}"
1079
+ raise
1080
+ ensure
1081
+ server.shutdown
1124
1082
  end
1125
- @ssl_server = server
1126
- @ssl_server_thread = t
1127
- server
1128
- end
1129
-
1130
- private
1131
-
1132
- def start_server(data)
1133
- null_logger = NilLog.new
1134
- s = WEBrick::HTTPServer.new(
1135
- :Port => 0,
1136
- :DocumentRoot => nil,
1137
- :Logger => null_logger,
1138
- :AccessLog => null_logger
1139
- )
1140
- s.mount_proc("/kill") { |req, res| s.shutdown }
1141
- s.mount_proc("/yaml") do |req, res|
1142
- if req["X-Captain"]
1143
- res.body = req["X-Captain"]
1144
- elsif @enable_yaml
1145
- res.body = data
1146
- res['Content-Type'] = 'text/plain'
1147
- res['content-length'] = data.size
1148
- else
1149
- res.status = "404"
1150
- res.body = "<h1>NOT FOUND</h1>"
1151
- res['Content-Type'] = 'text/html'
1152
- end
1083
+ end
1084
+ while server.status != :Running
1085
+ sleep 0.1
1086
+ unless t.alive?
1087
+ t.join
1088
+ raise
1153
1089
  end
1154
- s.mount_proc("/yaml.Z") do |req, res|
1155
- if @enable_zip
1156
- res.body = Zlib::Deflate.deflate(data)
1157
- res['Content-Type'] = 'text/plain'
1158
- else
1159
- res.status = "404"
1160
- res.body = "<h1>NOT FOUND</h1>"
1161
- res['Content-Type'] = 'text/html'
1162
- end
1090
+ end
1091
+ @ssl_server = server
1092
+ @ssl_server_thread = t
1093
+ server
1094
+ end
1095
+
1096
+ def start_server(data)
1097
+ null_logger = NilLog.new
1098
+ s = WEBrick::HTTPServer.new(
1099
+ :Port => 0,
1100
+ :DocumentRoot => nil,
1101
+ :Logger => null_logger,
1102
+ :AccessLog => null_logger
1103
+ )
1104
+ s.mount_proc("/kill") {|req, res| s.shutdown }
1105
+ s.mount_proc("/yaml") do |req, res|
1106
+ if req["X-Captain"]
1107
+ res.body = req["X-Captain"]
1108
+ elsif @enable_yaml
1109
+ res.body = data
1110
+ res['Content-Type'] = 'text/plain'
1111
+ res['content-length'] = data.size
1112
+ else
1113
+ res.status = "404"
1114
+ res.body = "<h1>NOT FOUND</h1>"
1115
+ res['Content-Type'] = 'text/html'
1163
1116
  end
1164
- th = Thread.new do
1165
- begin
1166
- s.start
1167
- rescue Exception => ex
1168
- abort "ERROR during server thread: #{ex.message}"
1169
- ensure
1170
- s.shutdown
1171
- end
1117
+ end
1118
+ s.mount_proc("/yaml.Z") do |req, res|
1119
+ if @enable_zip
1120
+ res.body = Zlib::Deflate.deflate(data)
1121
+ res['Content-Type'] = 'text/plain'
1122
+ else
1123
+ res.status = "404"
1124
+ res.body = "<h1>NOT FOUND</h1>"
1125
+ res['Content-Type'] = 'text/html'
1172
1126
  end
1173
- th[:server] = s
1174
- th
1175
1127
  end
1176
-
1177
- def cert(filename)
1178
- OpenSSL::X509::Certificate.new(File.read(File.join(DIR, filename)))
1128
+ th = Thread.new do
1129
+ begin
1130
+ s.start
1131
+ rescue Exception => ex
1132
+ abort "ERROR during server thread: #{ex.message}"
1133
+ ensure
1134
+ s.shutdown
1135
+ end
1179
1136
  end
1137
+ th[:server] = s
1138
+ th
1139
+ end
1180
1140
 
1181
- def key(filename)
1182
- OpenSSL::PKey::RSA.new(File.read(File.join(DIR, filename)))
1183
- end
1141
+ def cert(filename)
1142
+ OpenSSL::X509::Certificate.new(File.read(File.join(__dir__, filename)))
1143
+ end
1184
1144
 
1145
+ def key(filename)
1146
+ OpenSSL::PKey::RSA.new(File.read(File.join(__dir__, filename)))
1185
1147
  end
1186
1148
 
1187
1149
  end if defined?(OpenSSL::SSL)