rubygems-update 3.3.18 → 3.4.19
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1429 -1064
- data/CONTRIBUTING.md +31 -8
- data/Manifest.txt +61 -36
- data/POLICIES.md +55 -20
- data/README.md +19 -6
- data/bundler/CHANGELOG.md +457 -1
- data/bundler/README.md +3 -6
- data/bundler/UPGRADING.md +11 -4
- data/bundler/bundler.gemspec +8 -10
- data/bundler/exe/bundle +5 -16
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/add.rb +1 -1
- data/bundler/lib/bundler/cli/binstubs.rb +6 -2
- data/bundler/lib/bundler/cli/check.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +2 -0
- data/bundler/lib/bundler/cli/console.rb +2 -2
- data/bundler/lib/bundler/cli/doctor.rb +4 -6
- data/bundler/lib/bundler/cli/gem.rb +62 -40
- data/bundler/lib/bundler/cli/info.rb +1 -1
- data/bundler/lib/bundler/cli/init.rb +6 -2
- data/bundler/lib/bundler/cli/install.rb +8 -6
- data/bundler/lib/bundler/cli/lock.rb +8 -5
- data/bundler/lib/bundler/cli/open.rb +6 -4
- data/bundler/lib/bundler/cli/outdated.rb +14 -7
- data/bundler/lib/bundler/cli/platform.rb +7 -5
- data/bundler/lib/bundler/cli/viz.rb +1 -1
- data/bundler/lib/bundler/cli.rb +53 -7
- data/bundler/lib/bundler/compact_index_client/cache.rb +1 -1
- data/bundler/lib/bundler/compact_index_client/updater.rb +40 -39
- data/bundler/lib/bundler/constants.rb +1 -1
- data/bundler/lib/bundler/current_ruby.rb +16 -5
- data/bundler/lib/bundler/definition.rb +262 -133
- data/bundler/lib/bundler/dependency.rb +20 -86
- data/bundler/lib/bundler/digest.rb +1 -1
- data/bundler/lib/bundler/dsl.rb +6 -7
- data/bundler/lib/bundler/endpoint_specification.rb +2 -13
- data/bundler/lib/bundler/env.rb +2 -2
- data/bundler/lib/bundler/environment_preserver.rb +3 -2
- data/bundler/lib/bundler/errors.rb +1 -11
- data/bundler/lib/bundler/feature_flag.rb +0 -2
- data/bundler/lib/bundler/fetcher/compact_index.rb +11 -13
- data/bundler/lib/bundler/fetcher/dependency.rb +2 -6
- data/bundler/lib/bundler/fetcher/downloader.rb +4 -5
- data/bundler/lib/bundler/fetcher/index.rb +1 -2
- data/bundler/lib/bundler/fetcher.rb +21 -15
- data/bundler/lib/bundler/force_platform.rb +18 -0
- data/bundler/lib/bundler/friendly_errors.rb +1 -4
- data/bundler/lib/bundler/gem_helper.rb +3 -4
- data/bundler/lib/bundler/gem_helpers.rb +7 -2
- data/bundler/lib/bundler/gem_version_promoter.rb +53 -98
- data/bundler/lib/bundler/graph.rb +3 -3
- data/bundler/lib/bundler/index.rb +13 -47
- data/bundler/lib/bundler/injector.rb +5 -4
- data/bundler/lib/bundler/inline.rb +9 -11
- data/bundler/lib/bundler/installer/parallel_installer.rb +4 -34
- data/bundler/lib/bundler/installer/standalone.rb +13 -9
- data/bundler/lib/bundler/installer.rb +17 -29
- data/bundler/lib/bundler/lazy_specification.rb +54 -53
- data/bundler/lib/bundler/lockfile_generator.rb +3 -3
- data/bundler/lib/bundler/lockfile_parser.rb +17 -16
- data/bundler/lib/bundler/man/bundle-add.1 +6 -2
- data/bundler/lib/bundler/man/bundle-add.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/bundler/lib/bundler/man/bundle-cache.1 +9 -3
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +9 -2
- data/bundler/lib/bundler/man/bundle-check.1 +1 -1
- data/bundler/lib/bundler/man/bundle-clean.1 +2 -2
- data/bundler/lib/bundler/man/bundle-clean.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +26 -10
- data/bundler/lib/bundler/man/bundle-config.1.ronn +17 -10
- data/bundler/lib/bundler/man/bundle-console.1 +53 -0
- data/bundler/lib/bundler/man/bundle-console.1.ronn +44 -0
- data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/lib/bundler/man/bundle-exec.1 +6 -6
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -6
- data/bundler/lib/bundler/man/bundle-gem.1 +27 -37
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +5 -5
- data/bundler/lib/bundler/man/bundle-help.1 +13 -0
- data/bundler/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/bundler/lib/bundler/man/bundle-info.1 +3 -3
- data/bundler/lib/bundler/man/bundle-info.1.ronn +3 -3
- data/bundler/lib/bundler/man/bundle-init.1 +5 -1
- data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
- data/bundler/lib/bundler/man/bundle-inject.1 +5 -2
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +3 -1
- data/bundler/lib/bundler/man/bundle-install.1 +5 -30
- data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -29
- data/bundler/lib/bundler/man/bundle-list.1 +1 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
- data/bundler/lib/bundler/man/bundle-open.1 +22 -2
- data/bundler/lib/bundler/man/bundle-open.1.ronn +9 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +13 -9
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +12 -9
- data/bundler/lib/bundler/man/bundle-platform.1 +16 -6
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/bundler/lib/bundler/man/bundle-plugin.1 +81 -0
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +59 -0
- data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +1 -1
- data/bundler/lib/bundler/man/bundle-update.1 +1 -1
- data/bundler/lib/bundler/man/bundle-version.1 +35 -0
- data/bundler/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/bundler/lib/bundler/man/bundle-viz.1 +4 -1
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +2 -0
- data/bundler/lib/bundler/man/bundle.1 +15 -10
- data/bundler/lib/bundler/man/bundle.1.ronn +12 -7
- data/bundler/lib/bundler/man/gemfile.5 +55 -55
- data/bundler/lib/bundler/man/gemfile.5.ronn +57 -53
- data/bundler/lib/bundler/man/index.txt +4 -0
- data/bundler/lib/bundler/match_metadata.rb +13 -0
- data/bundler/lib/bundler/match_remote_metadata.rb +29 -0
- data/bundler/lib/bundler/mirror.rb +5 -7
- data/bundler/lib/bundler/plugin/index.rb +5 -5
- data/bundler/lib/bundler/plugin/installer/rubygems.rb +0 -4
- data/bundler/lib/bundler/plugin/installer.rb +5 -2
- data/bundler/lib/bundler/plugin.rb +3 -1
- data/bundler/lib/bundler/remote_specification.rb +7 -12
- data/bundler/lib/bundler/resolver/base.rb +107 -0
- data/bundler/lib/bundler/resolver/candidate.rb +94 -0
- data/bundler/lib/bundler/resolver/incompatibility.rb +15 -0
- data/bundler/lib/bundler/resolver/package.rb +72 -0
- data/bundler/lib/bundler/resolver/root.rb +25 -0
- data/bundler/lib/bundler/resolver/spec_group.rb +42 -71
- data/bundler/lib/bundler/resolver.rb +335 -328
- data/bundler/lib/bundler/ruby_dsl.rb +7 -1
- data/bundler/lib/bundler/ruby_version.rb +8 -8
- data/bundler/lib/bundler/rubygems_ext.rb +100 -9
- data/bundler/lib/bundler/rubygems_gem_installer.rb +23 -14
- data/bundler/lib/bundler/rubygems_integration.rb +11 -15
- data/bundler/lib/bundler/runtime.rb +2 -6
- data/bundler/lib/bundler/safe_marshal.rb +31 -0
- data/bundler/lib/bundler/settings.rb +5 -11
- data/bundler/lib/bundler/setup.rb +4 -1
- data/bundler/lib/bundler/shared_helpers.rb +3 -3
- data/bundler/lib/bundler/source/git/git_proxy.rb +237 -74
- data/bundler/lib/bundler/source/git.rb +55 -30
- data/bundler/lib/bundler/source/metadata.rb +1 -2
- data/bundler/lib/bundler/source/path/installer.rb +1 -22
- data/bundler/lib/bundler/source/path.rb +6 -6
- data/bundler/lib/bundler/source/rubygems.rb +26 -81
- data/bundler/lib/bundler/source.rb +1 -1
- data/bundler/lib/bundler/source_list.rb +8 -2
- data/bundler/lib/bundler/spec_set.rb +60 -37
- data/bundler/lib/bundler/templates/Executable +1 -1
- data/bundler/lib/bundler/templates/Executable.bundler +5 -10
- data/bundler/lib/bundler/templates/Executable.standalone +2 -0
- data/bundler/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/README.md.tt +6 -4
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +12 -1
- data/bundler/lib/bundler/templates/newgem/bin/console.tt +0 -4
- data/bundler/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/bundler/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
- data/bundler/lib/bundler/templates/newgem/gitignore.tt +3 -0
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +13 -4
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +9 -2
- data/bundler/lib/bundler/ui/rg_proxy.rb +1 -1
- data/bundler/lib/bundler/ui/shell.rb +35 -12
- data/bundler/lib/bundler/ui/silent.rb +21 -5
- data/bundler/lib/bundler/uri_normalizer.rb +23 -0
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +1351 -409
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
- data/bundler/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +60 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +411 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +248 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +15 -9
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +11 -6
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +3 -2
- data/bundler/lib/bundler/vendored_persistent.rb +1 -33
- data/bundler/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
- data/bundler/lib/bundler/version.rb +5 -1
- data/bundler/lib/bundler/worker.rb +5 -7
- data/bundler/lib/bundler.rb +25 -77
- data/{bin → exe}/gem +4 -5
- data/{bin → exe}/update_rubygems +12 -10
- data/lib/rubygems/available_set.rb +4 -3
- data/lib/rubygems/basic_specification.rb +5 -4
- data/lib/rubygems/bundler_version_finder.rb +2 -2
- data/lib/rubygems/command.rb +41 -32
- data/lib/rubygems/command_manager.rb +30 -15
- data/lib/rubygems/commands/build_command.rb +12 -8
- data/lib/rubygems/commands/cert_command.rb +34 -33
- data/lib/rubygems/commands/check_command.rb +21 -20
- data/lib/rubygems/commands/cleanup_command.rb +18 -17
- data/lib/rubygems/commands/contents_command.rb +14 -13
- data/lib/rubygems/commands/dependency_command.rb +17 -16
- data/lib/rubygems/commands/environment_command.rb +6 -5
- data/lib/rubygems/commands/exec_command.rb +249 -0
- data/lib/rubygems/commands/fetch_command.rb +10 -9
- data/lib/rubygems/commands/generate_index_command.rb +18 -17
- data/lib/rubygems/commands/help_command.rb +7 -6
- data/lib/rubygems/commands/info_command.rb +3 -3
- data/lib/rubygems/commands/install_command.rb +28 -23
- data/lib/rubygems/commands/list_command.rb +4 -3
- data/lib/rubygems/commands/lock_command.rb +5 -4
- data/lib/rubygems/commands/mirror_command.rb +4 -3
- data/lib/rubygems/commands/open_command.rb +10 -9
- data/lib/rubygems/commands/outdated_command.rb +6 -5
- data/lib/rubygems/commands/owner_command.rb +17 -14
- data/lib/rubygems/commands/pristine_command.rb +46 -36
- data/lib/rubygems/commands/push_command.rb +9 -8
- data/lib/rubygems/commands/query_command.rb +9 -8
- data/lib/rubygems/commands/rdoc_command.rb +21 -19
- data/lib/rubygems/commands/search_command.rb +4 -3
- data/lib/rubygems/commands/server_command.rb +4 -3
- data/lib/rubygems/commands/setup_command.rb +97 -106
- data/lib/rubygems/commands/signin_command.rb +10 -9
- data/lib/rubygems/commands/signout_command.rb +8 -7
- data/lib/rubygems/commands/sources_command.rb +22 -21
- data/lib/rubygems/commands/specification_command.rb +14 -13
- data/lib/rubygems/commands/stale_command.rb +3 -2
- data/lib/rubygems/commands/uninstall_command.rb +44 -40
- data/lib/rubygems/commands/unpack_command.rb +14 -13
- data/lib/rubygems/commands/update_command.rb +42 -63
- data/lib/rubygems/commands/which_command.rb +8 -7
- data/lib/rubygems/commands/yank_command.rb +12 -11
- data/lib/rubygems/config_file.rb +55 -21
- data/lib/rubygems/core_ext/kernel_gem.rb +1 -6
- data/lib/rubygems/core_ext/kernel_require.rb +109 -115
- data/lib/rubygems/core_ext/kernel_warn.rb +33 -37
- data/lib/rubygems/core_ext/tcpsocket_init.rb +3 -1
- data/lib/rubygems/defaults.rb +33 -18
- data/lib/rubygems/dependency.rb +15 -11
- data/lib/rubygems/dependency_installer.rb +38 -37
- data/lib/rubygems/dependency_list.rb +7 -6
- data/lib/rubygems/deprecate.rb +3 -2
- data/lib/rubygems/doctor.rb +19 -18
- data/lib/rubygems/errors.rb +3 -2
- data/lib/rubygems/exceptions.rb +16 -8
- data/lib/rubygems/ext/build_error.rb +2 -1
- data/lib/rubygems/ext/builder.rb +37 -21
- data/lib/rubygems/ext/cargo_builder/link_flag_converter.rb +9 -5
- data/lib/rubygems/ext/cargo_builder.rb +150 -111
- data/lib/rubygems/ext/cmake_builder.rb +2 -2
- data/lib/rubygems/ext/configure_builder.rb +2 -1
- data/lib/rubygems/ext/ext_conf_builder.rb +11 -9
- data/lib/rubygems/ext/rake_builder.rb +7 -5
- data/lib/rubygems/ext.rb +8 -7
- data/lib/rubygems/gem_runner.rb +6 -5
- data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +163 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +105 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +78 -0
- data/lib/rubygems/gemcutter_utilities.rb +90 -34
- data/lib/rubygems/indexer.rb +29 -28
- data/lib/rubygems/install_default_message.rb +3 -2
- data/lib/rubygems/install_message.rb +3 -2
- data/lib/rubygems/install_update_options.rb +56 -55
- data/lib/rubygems/installer.rb +54 -46
- data/lib/rubygems/installer_uninstaller_utils.rb +2 -2
- data/lib/rubygems/local_remote_options.rb +19 -20
- data/lib/rubygems/mock_gem_ui.rb +3 -2
- data/lib/rubygems/name_tuple.rb +5 -4
- data/lib/rubygems/optparse/lib/optparse.rb +20 -15
- data/lib/rubygems/optparse.rb +1 -1
- data/lib/rubygems/package/digest_io.rb +1 -0
- data/lib/rubygems/package/file_source.rb +3 -2
- data/lib/rubygems/package/io_source.rb +1 -0
- data/lib/rubygems/package/old.rb +9 -8
- data/lib/rubygems/package/source.rb +1 -0
- data/lib/rubygems/package/tar_header.rb +63 -62
- data/lib/rubygems/package/tar_reader/entry.rb +91 -9
- data/lib/rubygems/package/tar_reader.rb +2 -29
- data/lib/rubygems/package/tar_writer.rb +8 -7
- data/lib/rubygems/package.rb +64 -48
- data/lib/rubygems/package_task.rb +5 -4
- data/lib/rubygems/path_support.rb +1 -0
- data/lib/rubygems/platform.rb +79 -53
- data/lib/rubygems/psych_tree.rb +2 -1
- data/lib/rubygems/query_utils.rb +35 -35
- data/lib/rubygems/rdoc.rb +3 -2
- data/lib/rubygems/remote_fetcher.rb +23 -22
- data/lib/rubygems/request/connection_pools.rb +4 -4
- data/lib/rubygems/request/http_pool.rb +2 -1
- data/lib/rubygems/request/https_pool.rb +1 -0
- data/lib/rubygems/request.rb +23 -22
- data/lib/rubygems/request_set/gem_dependency_api.rb +123 -123
- data/lib/rubygems/request_set/lockfile/parser.rb +28 -27
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +5 -3
- data/lib/rubygems/request_set/lockfile.rb +6 -5
- data/lib/rubygems/request_set.rb +20 -19
- data/lib/rubygems/requirement.rb +15 -14
- data/lib/rubygems/resolver/activation_request.rb +4 -3
- data/lib/rubygems/resolver/api_set.rb +5 -4
- data/lib/rubygems/resolver/api_specification.rb +7 -6
- data/lib/rubygems/resolver/best_set.rb +6 -5
- data/lib/rubygems/resolver/composed_set.rb +1 -0
- data/lib/rubygems/resolver/conflict.rb +11 -10
- data/lib/rubygems/resolver/current_set.rb +1 -0
- data/lib/rubygems/resolver/dependency_request.rb +3 -2
- data/lib/rubygems/resolver/git_set.rb +3 -2
- data/lib/rubygems/resolver/git_specification.rb +7 -6
- data/lib/rubygems/resolver/index_set.rb +4 -3
- data/lib/rubygems/resolver/index_specification.rb +7 -5
- data/lib/rubygems/resolver/installed_specification.rb +5 -4
- data/lib/rubygems/resolver/installer_set.rb +15 -17
- data/lib/rubygems/resolver/local_specification.rb +3 -2
- data/lib/rubygems/resolver/lock_set.rb +5 -4
- data/lib/rubygems/resolver/lock_specification.rb +5 -4
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +1 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +32 -26
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/rubygems/resolver/molinillo.rb +2 -1
- data/lib/rubygems/resolver/requirement_list.rb +1 -0
- data/lib/rubygems/resolver/set.rb +1 -0
- data/lib/rubygems/resolver/source_set.rb +2 -0
- data/lib/rubygems/resolver/spec_specification.rb +1 -0
- data/lib/rubygems/resolver/specification.rb +2 -1
- data/lib/rubygems/resolver/stats.rb +2 -1
- data/lib/rubygems/resolver/vendor_set.rb +2 -1
- data/lib/rubygems/resolver/vendor_specification.rb +4 -3
- data/lib/rubygems/resolver.rb +41 -40
- data/lib/rubygems/s3_uri_signer.rb +10 -8
- data/lib/rubygems/safe_yaml.rb +4 -2
- data/lib/rubygems/security/policies.rb +48 -47
- data/lib/rubygems/security/policy.rb +19 -18
- data/lib/rubygems/security/signer.rb +6 -5
- data/lib/rubygems/security/trust_dir.rb +5 -4
- data/lib/rubygems/security.rb +30 -42
- data/lib/rubygems/security_option.rb +6 -5
- data/lib/rubygems/shellwords.rb +3 -0
- data/lib/rubygems/source/git.rb +22 -22
- data/lib/rubygems/source/installed.rb +2 -1
- data/lib/rubygems/source/local.rb +3 -2
- data/lib/rubygems/source/lock.rb +1 -0
- data/lib/rubygems/source/specific_file.rb +2 -1
- data/lib/rubygems/source/vendor.rb +1 -0
- data/lib/rubygems/source.rb +16 -16
- data/lib/rubygems/spec_fetcher.rb +10 -9
- data/lib/rubygems/specification.rb +121 -114
- data/lib/rubygems/specification_policy.rb +36 -15
- data/lib/rubygems/stub_specification.rb +11 -9
- data/lib/rubygems/text.rb +2 -2
- data/lib/rubygems/tsort/lib/tsort.rb +308 -310
- data/lib/rubygems/tsort.rb +1 -1
- data/lib/rubygems/uninstaller.rb +19 -18
- data/lib/rubygems/update_suggestion.rb +69 -0
- data/lib/rubygems/uri.rb +4 -4
- data/lib/rubygems/uri_formatter.rb +1 -1
- data/lib/rubygems/user_interaction.rb +37 -21
- data/lib/rubygems/util/licenses.rb +4 -3
- data/lib/rubygems/util/list.rb +1 -0
- data/lib/rubygems/util.rb +12 -15
- data/lib/rubygems/validator.rb +7 -6
- data/lib/rubygems/version.rb +17 -11
- data/lib/rubygems/version_option.rb +4 -3
- data/lib/rubygems.rb +89 -68
- data/rubygems-update.gemspec +10 -8
- data/setup.rb +10 -9
- data/test/rubygems/alternate_cert.pem +14 -14
- data/test/rubygems/alternate_cert_32.pem +15 -15
- data/test/rubygems/alternate_key.pem +25 -25
- data/test/rubygems/bad_rake.rb +1 -0
- data/test/rubygems/bundler_test_gem.rb +421 -0
- data/test/rubygems/child_cert.pem +15 -16
- data/test/rubygems/child_cert_32.pem +15 -16
- data/test/rubygems/child_key.pem +25 -25
- data/test/rubygems/encrypted_private_key.pem +26 -26
- data/test/rubygems/expired_cert.pem +15 -15
- data/test/rubygems/fake_certlib/openssl.rb +1 -0
- data/test/rubygems/future_cert.pem +15 -15
- data/test/rubygems/future_cert_32.pem +15 -15
- data/test/rubygems/good_rake.rb +1 -0
- data/test/rubygems/grandchild_cert.pem +15 -16
- data/test/rubygems/grandchild_cert_32.pem +15 -16
- data/test/rubygems/grandchild_key.pem +25 -25
- data/test/rubygems/helper.rb +172 -151
- data/test/rubygems/installer_test_case.rb +14 -13
- data/test/rubygems/invalid_issuer_cert.pem +16 -16
- data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
- data/test/rubygems/invalid_key.pem +25 -25
- data/test/rubygems/invalid_signer_cert.pem +15 -15
- data/test/rubygems/invalid_signer_cert_32.pem +15 -15
- data/test/rubygems/invalidchild_cert.pem +15 -16
- data/test/rubygems/invalidchild_cert_32.pem +15 -16
- data/test/rubygems/invalidchild_key.pem +25 -25
- data/test/rubygems/multifactor_auth_utilities.rb +111 -0
- data/test/rubygems/package/tar_test_case.rb +53 -17
- data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +2 -1
- data/test/rubygems/plugin/load/rubygems_plugin.rb +1 -0
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +2 -1
- data/test/rubygems/private_key.pem +25 -25
- data/test/rubygems/public_cert.pem +16 -16
- data/test/rubygems/public_cert_32.pem +15 -15
- data/test/rubygems/public_key.pem +7 -7
- data/test/rubygems/rubygems/commands/crash_command.rb +1 -0
- data/test/rubygems/rubygems_plugin.rb +3 -2
- data/test/rubygems/simple_gem.rb +2 -1
- data/test/rubygems/specifications/bar-0.0.2.gemspec +2 -0
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +6 -4
- data/test/rubygems/test_bundled_ca.rb +13 -12
- data/test/rubygems/test_config.rb +5 -4
- data/test/rubygems/test_deprecate.rb +5 -4
- data/test/rubygems/test_exit.rb +9 -3
- data/test/rubygems/test_gem.rb +339 -677
- data/test/rubygems/test_gem_available_set.rb +22 -21
- data/test/rubygems/test_gem_bundler_version_finder.rb +6 -4
- data/test/rubygems/test_gem_command.rb +45 -44
- data/test/rubygems/test_gem_command_manager.rb +96 -30
- data/test/rubygems/test_gem_commands_build_command.rb +74 -63
- data/test/rubygems/test_gem_commands_cert_command.rb +98 -99
- data/test/rubygems/test_gem_commands_check_command.rb +5 -4
- data/test/rubygems/test_gem_commands_cleanup_command.rb +41 -40
- data/test/rubygems/test_gem_commands_contents_command.rb +28 -27
- data/test/rubygems/test_gem_commands_dependency_command.rb +37 -36
- data/test/rubygems/test_gem_commands_environment_command.rb +17 -16
- data/test/rubygems/test_gem_commands_exec_command.rb +853 -0
- data/test/rubygems/test_gem_commands_fetch_command.rb +38 -37
- data/test/rubygems/test_gem_commands_generate_index_command.rb +8 -7
- data/test/rubygems/test_gem_commands_help_command.rb +14 -13
- data/test/rubygems/test_gem_commands_info_command.rb +29 -2
- data/test/rubygems/test_gem_commands_install_command.rb +152 -132
- data/test/rubygems/test_gem_commands_list_command.rb +5 -4
- data/test/rubygems/test_gem_commands_lock_command.rb +11 -10
- data/test/rubygems/test_gem_commands_mirror.rb +3 -2
- data/test/rubygems/test_gem_commands_open_command.rb +5 -4
- data/test/rubygems/test_gem_commands_outdated_command.rb +10 -9
- data/test/rubygems/test_gem_commands_owner_command.rb +227 -50
- data/test/rubygems/test_gem_commands_pristine_command.rb +142 -93
- data/test/rubygems/test_gem_commands_push_command.rb +189 -64
- data/test/rubygems/test_gem_commands_query_command.rb +74 -73
- data/test/rubygems/test_gem_commands_search_command.rb +3 -2
- data/test/rubygems/test_gem_commands_server_command.rb +3 -2
- data/test/rubygems/test_gem_commands_setup_command.rb +123 -96
- data/test/rubygems/test_gem_commands_signin_command.rb +71 -31
- data/test/rubygems/test_gem_commands_signout_command.rb +3 -3
- data/test/rubygems/test_gem_commands_sources_command.rb +29 -29
- data/test/rubygems/test_gem_commands_specification_command.rb +33 -32
- data/test/rubygems/test_gem_commands_stale_command.rb +5 -4
- data/test/rubygems/test_gem_commands_uninstall_command.rb +99 -81
- data/test/rubygems/test_gem_commands_unpack_command.rb +32 -31
- data/test/rubygems/test_gem_commands_update_command.rb +96 -95
- data/test/rubygems/test_gem_commands_which_command.rb +7 -6
- data/test/rubygems/test_gem_commands_yank_command.rb +162 -43
- data/test/rubygems/test_gem_config_file.rb +94 -81
- data/test/rubygems/test_gem_dependency.rb +76 -73
- data/test/rubygems/test_gem_dependency_installer.rb +200 -165
- data/test/rubygems/test_gem_dependency_list.rb +48 -47
- data/test/rubygems/test_gem_dependency_resolution_error.rb +5 -4
- data/test/rubygems/test_gem_doctor.rb +27 -26
- data/test/rubygems/test_gem_ext_builder.rb +60 -61
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +4 -4
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.lock → ext/custom_name_lib/Cargo.lock} +23 -33
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{Cargo.toml → ext/custom_name_lib/Cargo.toml} +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/{src → ext/custom_name_lib/src}/lib.rs +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +3 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +37 -33
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +2 -0
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +12 -0
- data/test/rubygems/test_gem_ext_cargo_builder.rb +48 -59
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +20 -19
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +21 -36
- data/test/rubygems/test_gem_ext_cmake_builder.rb +16 -15
- data/test/rubygems/test_gem_ext_configure_builder.rb +14 -13
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +51 -52
- data/test/rubygems/test_gem_ext_rake_builder.rb +16 -15
- data/test/rubygems/test_gem_gem_runner.rb +15 -9
- data/test/rubygems/test_gem_gemcutter_utilities.rb +170 -84
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +5 -4
- data/test/rubygems/test_gem_indexer.rb +87 -67
- data/test/rubygems/test_gem_install_update_options.rb +17 -16
- data/test/rubygems/test_gem_installer.rb +422 -304
- data/test/rubygems/test_gem_local_remote_options.rb +11 -10
- data/test/rubygems/test_gem_name_tuple.rb +5 -4
- data/test/rubygems/test_gem_package.rb +243 -231
- data/test/rubygems/test_gem_package_old.rb +14 -13
- data/test/rubygems/test_gem_package_tar_header.rb +48 -47
- data/test/rubygems/test_gem_package_tar_reader.rb +56 -8
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +162 -16
- data/test/rubygems/test_gem_package_tar_writer.rb +77 -76
- data/test/rubygems/test_gem_package_task.rb +19 -18
- data/test/rubygems/test_gem_path_support.rb +15 -14
- data/test/rubygems/test_gem_platform.rb +333 -227
- data/test/rubygems/test_gem_rdoc.rb +15 -14
- data/test/rubygems/test_gem_remote_fetcher.rb +155 -154
- data/test/rubygems/test_gem_request.rb +64 -58
- data/test/rubygems/test_gem_request_connection_pools.rb +30 -29
- data/test/rubygems/test_gem_request_set.rb +101 -100
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +210 -211
- data/test/rubygems/test_gem_request_set_lockfile.rb +87 -86
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +58 -57
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +63 -62
- data/test/rubygems/test_gem_requirement.rb +48 -41
- data/test/rubygems/test_gem_resolver.rb +167 -99
- data/test/rubygems/test_gem_resolver_activation_request.rb +7 -6
- data/test/rubygems/test_gem_resolver_api_set.rb +34 -33
- data/test/rubygems/test_gem_resolver_api_specification.rb +48 -47
- data/test/rubygems/test_gem_resolver_best_set.rb +23 -22
- data/test/rubygems/test_gem_resolver_composed_set.rb +2 -1
- data/test/rubygems/test_gem_resolver_conflict.rb +13 -12
- data/test/rubygems/test_gem_resolver_dependency_request.rb +16 -15
- data/test/rubygems/test_gem_resolver_git_set.rb +22 -21
- data/test/rubygems/test_gem_resolver_git_specification.rb +22 -21
- data/test/rubygems/test_gem_resolver_index_set.rb +13 -12
- data/test/rubygems/test_gem_resolver_index_specification.rb +17 -16
- data/test/rubygems/test_gem_resolver_installed_specification.rb +6 -5
- data/test/rubygems/test_gem_resolver_installer_set.rb +79 -34
- data/test/rubygems/test_gem_resolver_local_specification.rb +8 -7
- data/test/rubygems/test_gem_resolver_lock_set.rb +13 -12
- data/test/rubygems/test_gem_resolver_lock_specification.rb +18 -17
- data/test/rubygems/test_gem_resolver_requirement_list.rb +2 -1
- data/test/rubygems/test_gem_resolver_specification.rb +9 -8
- data/test/rubygems/test_gem_resolver_vendor_set.rb +7 -6
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +11 -10
- data/test/rubygems/test_gem_security.rb +69 -68
- data/test/rubygems/test_gem_security_policy.rb +72 -72
- data/test/rubygems/test_gem_security_signer.rb +35 -34
- data/test/rubygems/test_gem_security_trust_dir.rb +7 -6
- data/test/rubygems/test_gem_silent_ui.rb +39 -32
- data/test/rubygems/test_gem_source.rb +45 -44
- data/test/rubygems/test_gem_source_fetch_problem.rb +10 -9
- data/test/rubygems/test_gem_source_git.rb +69 -62
- data/test/rubygems/test_gem_source_installed.rb +17 -16
- data/test/rubygems/test_gem_source_list.rb +6 -5
- data/test/rubygems/test_gem_source_local.rb +15 -14
- data/test/rubygems/test_gem_source_lock.rb +32 -31
- data/test/rubygems/test_gem_source_specific_file.rb +18 -17
- data/test/rubygems/test_gem_source_subpath_problem.rb +8 -7
- data/test/rubygems/test_gem_source_vendor.rb +14 -13
- data/test/rubygems/test_gem_spec_fetcher.rb +73 -72
- data/test/rubygems/test_gem_specification.rb +533 -469
- data/test/rubygems/test_gem_stream_ui.rb +53 -22
- data/test/rubygems/test_gem_stub_specification.rb +33 -32
- data/test/rubygems/test_gem_text.rb +2 -1
- data/test/rubygems/test_gem_uninstaller.rb +118 -117
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +4 -3
- data/test/rubygems/test_gem_update_suggestion.rb +209 -0
- data/test/rubygems/test_gem_uri.rb +6 -4
- data/test/rubygems/test_gem_uri_formatter.rb +15 -14
- data/test/rubygems/test_gem_util.rb +24 -23
- data/test/rubygems/test_gem_validator.rb +8 -8
- data/test/rubygems/test_gem_version.rb +24 -16
- data/test/rubygems/test_gem_version_option.rb +16 -15
- data/test/rubygems/test_kernel.rb +43 -48
- data/test/rubygems/test_project_sanity.rb +32 -3
- data/test/rubygems/test_remote_fetch_error.rb +8 -7
- data/test/rubygems/test_require.rb +118 -103
- data/test/rubygems/test_rubygems.rb +10 -8
- data/test/rubygems/test_webauthn_listener.rb +143 -0
- data/test/rubygems/test_webauthn_listener_response.rb +93 -0
- data/test/rubygems/test_webauthn_poller.rb +124 -0
- data/test/rubygems/utilities.rb +98 -34
- data/test/rubygems/wrong_key_cert.pem +15 -15
- data/test/rubygems/wrong_key_cert_32.pem +15 -15
- data/test/test_changelog_generator.rb +1 -1
- metadata +99 -46
- data/bundler/lib/bundler/dep_proxy.rb +0 -55
- data/bundler/lib/bundler/templates/gems.rb +0 -5
- data/bundler/lib/bundler/templates/newgem/ext/newgem/extconf.rb.tt +0 -5
- data/bundler/lib/bundler/templates/newgem/travis.yml.tt +0 -6
- data/bundler/lib/bundler/vendor/molinillo/LICENSE +0 -9
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
- data/bundler/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
- data/bundler/lib/bundler/vendored_molinillo.rb +0 -4
- data/bundler/lib/bundler/version_ranges.rb +0 -122
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +0 -21
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +0 -21
@@ -1,15 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative 'helper'
|
3
2
|
|
4
|
-
|
5
|
-
|
3
|
+
require_relative "helper"
|
4
|
+
|
5
|
+
require "webrick"
|
6
|
+
require "webrick/https" if Gem::HAVE_OPENSSL
|
6
7
|
|
7
8
|
unless Gem::HAVE_OPENSSL
|
8
|
-
warn
|
9
|
+
warn "Skipping Gem::RemoteFetcher tests. openssl not found."
|
9
10
|
end
|
10
11
|
|
11
|
-
require
|
12
|
-
require
|
12
|
+
require "rubygems/remote_fetcher"
|
13
|
+
require "rubygems/package"
|
13
14
|
|
14
15
|
# = Testing Proxy Settings
|
15
16
|
#
|
@@ -28,7 +29,7 @@ require 'rubygems/package'
|
|
28
29
|
class TestGemRemoteFetcher < Gem::TestCase
|
29
30
|
include Gem::DefaultUserInteraction
|
30
31
|
|
31
|
-
SERVER_DATA = <<-EOY
|
32
|
+
SERVER_DATA = <<-EOY
|
32
33
|
--- !ruby/object:Gem::Cache
|
33
34
|
gems:
|
34
35
|
rake-0.4.11: !ruby/object:Gem::Specification
|
@@ -69,7 +70,7 @@ gems:
|
|
69
70
|
dependencies: []
|
70
71
|
EOY
|
71
72
|
|
72
|
-
PROXY_DATA = SERVER_DATA.gsub(/0.4.11/,
|
73
|
+
PROXY_DATA = SERVER_DATA.gsub(/0.4.11/, "0.4.2")
|
73
74
|
|
74
75
|
# Generated via:
|
75
76
|
# x = OpenSSL::PKey::DH.new(2048) # wait a while...
|
@@ -104,11 +105,11 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
104
105
|
@cache_dir = File.join @gemhome, "cache"
|
105
106
|
|
106
107
|
# TODO: why does the remote fetcher need it written to disk?
|
107
|
-
@a1, @a1_gem = util_gem
|
108
|
-
s.executables <<
|
108
|
+
@a1, @a1_gem = util_gem "a", "1" do |s|
|
109
|
+
s.executables << "a_bin"
|
109
110
|
end
|
110
111
|
|
111
|
-
@a1.loaded_from = File.join(@gemhome,
|
112
|
+
@a1.loaded_from = File.join(@gemhome, "specifications", @a1.full_name)
|
112
113
|
|
113
114
|
Gem::RemoteFetcher.fetcher = nil
|
114
115
|
@stub_ui = Gem::MockGemUi.new
|
@@ -130,7 +131,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
130
131
|
end
|
131
132
|
|
132
133
|
def test_self_fetcher_with_proxy
|
133
|
-
proxy_uri =
|
134
|
+
proxy_uri = "http://proxy.example.com"
|
134
135
|
Gem.configuration[:http_proxy] = proxy_uri
|
135
136
|
Gem::RemoteFetcher.fetcher = nil
|
136
137
|
|
@@ -149,34 +150,34 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
149
150
|
@fetcher.fetch_path("gems.example.com/yaml", nil, true)
|
150
151
|
end
|
151
152
|
|
152
|
-
assert_equal
|
153
|
+
assert_equal "uri scheme is invalid: nil", e.message
|
153
154
|
end
|
154
155
|
|
155
156
|
def test_no_proxy
|
156
157
|
use_ui @stub_ui do
|
157
158
|
assert_data_from_server @fetcher.fetch_path(@server_uri)
|
158
159
|
response = @fetcher.fetch_path(@server_uri, nil, true)
|
159
|
-
assert_equal SERVER_DATA.size, response[
|
160
|
+
assert_equal SERVER_DATA.size, response["content-length"].to_i
|
160
161
|
end
|
161
162
|
end
|
162
163
|
|
163
164
|
def test_cache_update_path
|
164
|
-
uri = URI
|
165
|
-
path = File.join @tempdir,
|
165
|
+
uri = URI "http://example/file"
|
166
|
+
path = File.join @tempdir, "file"
|
166
167
|
|
167
|
-
fetcher = util_fuck_with_fetcher
|
168
|
+
fetcher = util_fuck_with_fetcher "hello"
|
168
169
|
|
169
170
|
data = fetcher.cache_update_path uri, path
|
170
171
|
|
171
|
-
assert_equal
|
172
|
+
assert_equal "hello", data
|
172
173
|
|
173
|
-
assert_equal
|
174
|
+
assert_equal "hello", File.read(path)
|
174
175
|
end
|
175
176
|
|
176
177
|
def test_cache_update_path_with_utf8_internal_encoding
|
177
|
-
with_internal_encoding(
|
178
|
-
uri = URI
|
179
|
-
path = File.join @tempdir,
|
178
|
+
with_internal_encoding("UTF-8") do
|
179
|
+
uri = URI "http://example/file"
|
180
|
+
path = File.join @tempdir, "file"
|
180
181
|
data = String.new("\xC8").force_encoding(Encoding::BINARY)
|
181
182
|
|
182
183
|
fetcher = util_fuck_with_fetcher data
|
@@ -189,14 +190,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
189
190
|
end
|
190
191
|
|
191
192
|
def test_cache_update_path_no_update
|
192
|
-
uri = URI
|
193
|
-
path = File.join @tempdir,
|
193
|
+
uri = URI "http://example/file"
|
194
|
+
path = File.join @tempdir, "file"
|
194
195
|
|
195
|
-
fetcher = util_fuck_with_fetcher
|
196
|
+
fetcher = util_fuck_with_fetcher "hello"
|
196
197
|
|
197
198
|
data = fetcher.cache_update_path uri, path, false
|
198
199
|
|
199
|
-
assert_equal
|
200
|
+
assert_equal "hello", data
|
200
201
|
|
201
202
|
assert_path_not_exist path
|
202
203
|
end
|
@@ -219,7 +220,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
219
220
|
@test_data
|
220
221
|
end
|
221
222
|
|
222
|
-
raise Gem::RemoteFetcher::FetchError.new("haha!",
|
223
|
+
raise Gem::RemoteFetcher::FetchError.new("haha!", "")
|
223
224
|
end
|
224
225
|
end
|
225
226
|
|
@@ -228,14 +229,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
228
229
|
|
229
230
|
def test_download
|
230
231
|
a1_data = nil
|
231
|
-
File.open @a1_gem,
|
232
|
+
File.open @a1_gem, "rb" do |fp|
|
232
233
|
a1_data = fp.read
|
233
234
|
end
|
234
235
|
|
235
236
|
fetcher = util_fuck_with_fetcher a1_data
|
236
237
|
|
237
238
|
a1_cache_gem = @a1.cache_file
|
238
|
-
assert_equal a1_cache_gem, fetcher.download(@a1,
|
239
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://gems.example.com")
|
239
240
|
assert_equal("http://gems.example.com/gems/a-1.gem",
|
240
241
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
241
242
|
assert File.exist?(a1_cache_gem)
|
@@ -243,14 +244,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
243
244
|
|
244
245
|
def test_download_with_auth
|
245
246
|
a1_data = nil
|
246
|
-
File.open @a1_gem,
|
247
|
+
File.open @a1_gem, "rb" do |fp|
|
247
248
|
a1_data = fp.read
|
248
249
|
end
|
249
250
|
|
250
251
|
fetcher = util_fuck_with_fetcher a1_data
|
251
252
|
|
252
253
|
a1_cache_gem = @a1.cache_file
|
253
|
-
assert_equal a1_cache_gem, fetcher.download(@a1,
|
254
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://user:password@gems.example.com")
|
254
255
|
assert_equal("http://user:password@gems.example.com/gems/a-1.gem",
|
255
256
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
256
257
|
assert File.exist?(a1_cache_gem)
|
@@ -258,14 +259,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
258
259
|
|
259
260
|
def test_download_with_token
|
260
261
|
a1_data = nil
|
261
|
-
File.open @a1_gem,
|
262
|
+
File.open @a1_gem, "rb" do |fp|
|
262
263
|
a1_data = fp.read
|
263
264
|
end
|
264
265
|
|
265
266
|
fetcher = util_fuck_with_fetcher a1_data
|
266
267
|
|
267
268
|
a1_cache_gem = @a1.cache_file
|
268
|
-
assert_equal a1_cache_gem, fetcher.download(@a1,
|
269
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://token@gems.example.com")
|
269
270
|
assert_equal("http://token@gems.example.com/gems/a-1.gem",
|
270
271
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
271
272
|
assert File.exist?(a1_cache_gem)
|
@@ -273,14 +274,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
273
274
|
|
274
275
|
def test_download_with_x_oauth_basic
|
275
276
|
a1_data = nil
|
276
|
-
File.open @a1_gem,
|
277
|
+
File.open @a1_gem, "rb" do |fp|
|
277
278
|
a1_data = fp.read
|
278
279
|
end
|
279
280
|
|
280
281
|
fetcher = util_fuck_with_fetcher a1_data
|
281
282
|
|
282
283
|
a1_cache_gem = @a1.cache_file
|
283
|
-
assert_equal a1_cache_gem, fetcher.download(@a1,
|
284
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://token:x-oauth-basic@gems.example.com")
|
284
285
|
assert_equal("http://token:x-oauth-basic@gems.example.com/gems/a-1.gem",
|
285
286
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
286
287
|
assert File.exist?(a1_cache_gem)
|
@@ -288,14 +289,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
288
289
|
|
289
290
|
def test_download_with_encoded_auth
|
290
291
|
a1_data = nil
|
291
|
-
File.open @a1_gem,
|
292
|
+
File.open @a1_gem, "rb" do |fp|
|
292
293
|
a1_data = fp.read
|
293
294
|
end
|
294
295
|
|
295
296
|
fetcher = util_fuck_with_fetcher a1_data
|
296
297
|
|
297
298
|
a1_cache_gem = @a1.cache_file
|
298
|
-
assert_equal a1_cache_gem, fetcher.download(@a1,
|
299
|
+
assert_equal a1_cache_gem, fetcher.download(@a1, "http://user:%25pas%25sword@gems.example.com")
|
299
300
|
assert_equal("http://user:%25pas%25sword@gems.example.com/gems/a-1.gem",
|
300
301
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
301
302
|
assert File.exist?(a1_cache_gem)
|
@@ -306,7 +307,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
306
307
|
|
307
308
|
inst = Gem::RemoteFetcher.fetcher
|
308
309
|
|
309
|
-
assert_equal @a1.cache_file, inst.download(@a1,
|
310
|
+
assert_equal @a1.cache_file, inst.download(@a1, "http://gems.example.com")
|
310
311
|
end
|
311
312
|
|
312
313
|
def test_download_local
|
@@ -322,7 +323,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
322
323
|
end
|
323
324
|
|
324
325
|
def test_download_local_space
|
325
|
-
space_path = File.join @tempdir,
|
326
|
+
space_path = File.join @tempdir, "space path"
|
326
327
|
FileUtils.mkdir space_path
|
327
328
|
FileUtils.mv @a1_gem, space_path
|
328
329
|
local_path = File.join space_path, @a1.file_name
|
@@ -336,17 +337,17 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
336
337
|
end
|
337
338
|
|
338
339
|
def test_download_install_dir
|
339
|
-
a1_data = File.open @a1_gem,
|
340
|
+
a1_data = File.open @a1_gem, "rb" do |fp|
|
340
341
|
fp.read
|
341
342
|
end
|
342
343
|
|
343
344
|
fetcher = util_fuck_with_fetcher a1_data
|
344
345
|
|
345
|
-
install_dir = File.join @tempdir,
|
346
|
+
install_dir = File.join @tempdir, "more_gems"
|
346
347
|
|
347
348
|
a1_cache_gem = File.join install_dir, "cache", @a1.file_name
|
348
349
|
FileUtils.mkdir_p(File.dirname(a1_cache_gem))
|
349
|
-
actual = fetcher.download(@a1,
|
350
|
+
actual = fetcher.download(@a1, "http://gems.example.com", install_dir)
|
350
351
|
|
351
352
|
assert_equal a1_cache_gem, actual
|
352
353
|
assert_equal("http://gems.example.com/gems/a-1.gem",
|
@@ -380,7 +381,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
380
381
|
FileUtils.chmod 0555, @gemhome
|
381
382
|
|
382
383
|
fetcher = util_fuck_with_fetcher File.read(@a1_gem)
|
383
|
-
fetcher.download(@a1,
|
384
|
+
fetcher.download(@a1, "http://gems.example.com")
|
384
385
|
a1_cache_gem = File.join Gem.user_dir, "cache", @a1.file_name
|
385
386
|
assert File.exist? a1_cache_gem
|
386
387
|
ensure
|
@@ -390,16 +391,16 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
390
391
|
end
|
391
392
|
|
392
393
|
def test_download_platform_legacy
|
393
|
-
original_platform =
|
394
|
+
original_platform = "old-platform"
|
394
395
|
|
395
|
-
e1, e1_gem = util_gem
|
396
|
+
e1, e1_gem = util_gem "e", "1" do |s|
|
396
397
|
s.platform = Gem::Platform::CURRENT
|
397
398
|
s.instance_variable_set :@original_platform, original_platform
|
398
399
|
end
|
399
|
-
e1.loaded_from = File.join(@gemhome,
|
400
|
+
e1.loaded_from = File.join(@gemhome, "specifications", e1.full_name)
|
400
401
|
|
401
402
|
e1_data = nil
|
402
|
-
File.open e1_gem,
|
403
|
+
File.open e1_gem, "rb" do |fp|
|
403
404
|
e1_data = fp.read
|
404
405
|
end
|
405
406
|
|
@@ -407,7 +408,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
407
408
|
|
408
409
|
e1_cache_gem = e1.cache_file
|
409
410
|
|
410
|
-
assert_equal e1_cache_gem, fetcher.download(e1,
|
411
|
+
assert_equal e1_cache_gem, fetcher.download(e1, "http://gems.example.com")
|
411
412
|
|
412
413
|
assert_equal("http://gems.example.com/gems/#{e1.original_name}.gem",
|
413
414
|
fetcher.instance_variable_get(:@test_arg).to_s)
|
@@ -435,14 +436,14 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
435
436
|
inst = Gem::RemoteFetcher.fetcher
|
436
437
|
|
437
438
|
e = assert_raise ArgumentError do
|
438
|
-
inst.download @a1,
|
439
|
+
inst.download @a1, "ftp://gems.rubyforge.org"
|
439
440
|
end
|
440
441
|
|
441
|
-
assert_equal
|
442
|
+
assert_equal "unsupported URI scheme ftp", e.message
|
442
443
|
end
|
443
444
|
|
444
445
|
def test_download_to_cache
|
445
|
-
@a2, @a2_gem = util_gem
|
446
|
+
@a2, @a2_gem = util_gem "a", "2"
|
446
447
|
|
447
448
|
util_setup_spec_fetcher @a1, @a2
|
448
449
|
@fetcher.instance_variable_set :@a1, @a1
|
@@ -458,7 +459,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
458
459
|
end
|
459
460
|
end
|
460
461
|
|
461
|
-
gem = Gem::RemoteFetcher.fetcher.download_to_cache dep
|
462
|
+
gem = Gem::RemoteFetcher.fetcher.download_to_cache dep "a"
|
462
463
|
|
463
464
|
assert_equal @a2.file_name, File.basename(gem)
|
464
465
|
end
|
@@ -468,10 +469,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
468
469
|
@fetcher = fetcher
|
469
470
|
|
470
471
|
def fetcher.fetch_http(uri, mtime, head = nil)
|
471
|
-
Gem::Util.gzip
|
472
|
+
Gem::Util.gzip "foo"
|
472
473
|
end
|
473
474
|
|
474
|
-
assert_equal
|
475
|
+
assert_equal "foo", fetcher.fetch_path(@uri + "foo.gz")
|
475
476
|
end
|
476
477
|
|
477
478
|
def test_fetch_path_gzip_unmodified
|
@@ -482,7 +483,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
482
483
|
nil
|
483
484
|
end
|
484
485
|
|
485
|
-
assert_nil fetcher.fetch_path(@uri +
|
486
|
+
assert_nil fetcher.fetch_path(@uri + "foo.gz", Time.at(0))
|
486
487
|
end
|
487
488
|
|
488
489
|
def test_fetch_path_io_error
|
@@ -493,7 +494,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
493
494
|
raise EOFError
|
494
495
|
end
|
495
496
|
|
496
|
-
url =
|
497
|
+
url = "http://example.com/uri"
|
497
498
|
|
498
499
|
e = assert_raise Gem::RemoteFetcher::FetchError do
|
499
500
|
fetcher.fetch_path url
|
@@ -511,7 +512,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
511
512
|
raise SocketError
|
512
513
|
end
|
513
514
|
|
514
|
-
url =
|
515
|
+
url = "http://example.com/uri"
|
515
516
|
|
516
517
|
e = assert_raise Gem::RemoteFetcher::FetchError do
|
517
518
|
fetcher.fetch_path url
|
@@ -526,10 +527,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
526
527
|
@fetcher = fetcher
|
527
528
|
|
528
529
|
def fetcher.fetch_http(uri, mtime = nil, head = nil)
|
529
|
-
raise Errno::ECONNREFUSED,
|
530
|
+
raise Errno::ECONNREFUSED, "connect(2)"
|
530
531
|
end
|
531
532
|
|
532
|
-
url =
|
533
|
+
url = "http://example.com/uri"
|
533
534
|
|
534
535
|
e = assert_raise Gem::RemoteFetcher::FetchError do
|
535
536
|
fetcher.fetch_path url
|
@@ -545,10 +546,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
545
546
|
@fetcher = fetcher
|
546
547
|
|
547
548
|
def fetcher.fetch_http(uri, mtime = nil, head = nil)
|
548
|
-
raise Timeout::Error,
|
549
|
+
raise Timeout::Error, "timed out"
|
549
550
|
end
|
550
551
|
|
551
|
-
url =
|
552
|
+
url = "http://example.com/uri"
|
552
553
|
|
553
554
|
e = assert_raise Gem::RemoteFetcher::FetchError do
|
554
555
|
fetcher.fetch_path url
|
@@ -564,10 +565,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
564
565
|
@fetcher = fetcher
|
565
566
|
|
566
567
|
def fetcher.fetch_http(uri, mtime = nil, head = nil)
|
567
|
-
raise SocketError,
|
568
|
+
raise SocketError, "getaddrinfo: nodename nor servname provided"
|
568
569
|
end
|
569
570
|
|
570
|
-
url =
|
571
|
+
url = "http://example.com/uri"
|
571
572
|
|
572
573
|
e = assert_raise Gem::RemoteFetcher::FetchError do
|
573
574
|
fetcher.fetch_path url
|
@@ -586,7 +587,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
586
587
|
raise OpenSSL::SSL::SSLError
|
587
588
|
end
|
588
589
|
|
589
|
-
url =
|
590
|
+
url = "http://example.com/uri"
|
590
591
|
|
591
592
|
e = assert_raise Gem::RemoteFetcher::FetchError do
|
592
593
|
fetcher.fetch_path url
|
@@ -609,7 +610,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
609
610
|
|
610
611
|
def test_implicit_no_proxy
|
611
612
|
use_ui @stub_ui do
|
612
|
-
ENV[
|
613
|
+
ENV["http_proxy"] = "http://fakeurl:12345"
|
613
614
|
fetcher = Gem::RemoteFetcher.new :no_proxy
|
614
615
|
@fetcher = fetcher
|
615
616
|
assert_data_from_server fetcher.fetch_path(@server_uri)
|
@@ -618,7 +619,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
618
619
|
|
619
620
|
def test_implicit_proxy
|
620
621
|
use_ui @stub_ui do
|
621
|
-
ENV[
|
622
|
+
ENV["http_proxy"] = @proxy_uri
|
622
623
|
fetcher = Gem::RemoteFetcher.new nil
|
623
624
|
@fetcher = fetcher
|
624
625
|
assert_data_from_proxy fetcher.fetch_path(@server_uri)
|
@@ -627,7 +628,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
627
628
|
|
628
629
|
def test_implicit_upper_case_proxy
|
629
630
|
use_ui @stub_ui do
|
630
|
-
ENV[
|
631
|
+
ENV["HTTP_PROXY"] = @proxy_uri
|
631
632
|
fetcher = Gem::RemoteFetcher.new nil
|
632
633
|
@fetcher = fetcher
|
633
634
|
assert_data_from_proxy fetcher.fetch_path(@server_uri)
|
@@ -645,36 +646,36 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
645
646
|
def test_fetch_http
|
646
647
|
fetcher = Gem::RemoteFetcher.new nil
|
647
648
|
@fetcher = fetcher
|
648
|
-
url =
|
649
|
+
url = "http://gems.example.com/redirect"
|
649
650
|
|
650
651
|
def fetcher.request(uri, request_class, last_modified = nil)
|
651
|
-
url =
|
652
|
+
url = "http://gems.example.com/redirect"
|
652
653
|
unless defined? @requested
|
653
654
|
@requested = true
|
654
655
|
res = Net::HTTPMovedPermanently.new nil, 301, nil
|
655
|
-
res.add_field
|
656
|
+
res.add_field "Location", url
|
656
657
|
res
|
657
658
|
else
|
658
659
|
res = Net::HTTPOK.new nil, 200, nil
|
659
|
-
def res.body()
|
660
|
+
def res.body() "real_path" end
|
660
661
|
res
|
661
662
|
end
|
662
663
|
end
|
663
664
|
|
664
665
|
data = fetcher.fetch_http URI.parse(url)
|
665
666
|
|
666
|
-
assert_equal
|
667
|
+
assert_equal "real_path", data
|
667
668
|
end
|
668
669
|
|
669
670
|
def test_fetch_http_redirects
|
670
671
|
fetcher = Gem::RemoteFetcher.new nil
|
671
672
|
@fetcher = fetcher
|
672
|
-
url =
|
673
|
+
url = "http://gems.example.com/redirect"
|
673
674
|
|
674
675
|
def fetcher.request(uri, request_class, last_modified = nil)
|
675
|
-
url =
|
676
|
+
url = "http://gems.example.com/redirect"
|
676
677
|
res = Net::HTTPMovedPermanently.new nil, 301, nil
|
677
|
-
res.add_field
|
678
|
+
res.add_field "Location", url
|
678
679
|
res
|
679
680
|
end
|
680
681
|
|
@@ -688,7 +689,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
688
689
|
def test_fetch_http_redirects_without_location
|
689
690
|
fetcher = Gem::RemoteFetcher.new nil
|
690
691
|
@fetcher = fetcher
|
691
|
-
url =
|
692
|
+
url = "http://gems.example.com/redirect"
|
692
693
|
|
693
694
|
def fetcher.request(uri, request_class, last_modified = nil)
|
694
695
|
res = Net::HTTPMovedPermanently.new nil, 301, nil
|
@@ -710,7 +711,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
710
711
|
assert_equal "murphy", fetcher.fetch_path(@server_uri)
|
711
712
|
end
|
712
713
|
|
713
|
-
def assert_fetch_s3(url, signature, token=nil, region=
|
714
|
+
def assert_fetch_s3(url, signature, token=nil, region="us-east-1", instance_profile_json=nil)
|
714
715
|
fetcher = Gem::RemoteFetcher.new nil
|
715
716
|
@fetcher = fetcher
|
716
717
|
$fetched_uri = nil
|
@@ -719,12 +720,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
719
720
|
def fetcher.request(uri, request_class, last_modified = nil)
|
720
721
|
$fetched_uri = uri
|
721
722
|
res = Net::HTTPOK.new nil, 200, nil
|
722
|
-
def res.body()
|
723
|
+
def res.body() "success" end
|
723
724
|
res
|
724
725
|
end
|
725
726
|
|
726
727
|
def fetcher.s3_uri_signer(uri)
|
727
|
-
require
|
728
|
+
require "json"
|
728
729
|
s3_uri_signer = Gem::S3URISigner.new(uri)
|
729
730
|
def s3_uri_signer.ec2_metadata_credentials_json
|
730
731
|
JSON.parse($instance_profile)
|
@@ -738,18 +739,18 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
738
739
|
data = fetcher.fetch_s3 URI.parse(url)
|
739
740
|
|
740
741
|
assert_equal "https://my-bucket.s3.#{region}.amazonaws.com/gems/specs.4.8.gz?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=testuser%2F20190624%2F#{region}%2Fs3%2Faws4_request&X-Amz-Date=20190624T050641Z&X-Amz-Expires=86400#{token ? "&X-Amz-Security-Token=" + token : ""}&X-Amz-SignedHeaders=host&X-Amz-Signature=#{signature}", $fetched_uri.to_s
|
741
|
-
assert_equal
|
742
|
+
assert_equal "success", data
|
742
743
|
ensure
|
743
744
|
$fetched_uri = nil
|
744
745
|
end
|
745
746
|
|
746
747
|
def test_fetch_s3_config_creds
|
747
748
|
Gem.configuration[:s3_source] = {
|
748
|
-
|
749
|
+
"my-bucket" => { :id => "testuser", :secret => "testpass" },
|
749
750
|
}
|
750
|
-
url =
|
751
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
751
752
|
Time.stub :now, Time.at(1561353581) do
|
752
|
-
assert_fetch_s3 url,
|
753
|
+
assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
|
753
754
|
end
|
754
755
|
ensure
|
755
756
|
Gem.configuration[:s3_source] = nil
|
@@ -757,11 +758,11 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
757
758
|
|
758
759
|
def test_fetch_s3_config_creds_with_region
|
759
760
|
Gem.configuration[:s3_source] = {
|
760
|
-
|
761
|
+
"my-bucket" => { :id => "testuser", :secret => "testpass", :region => "us-west-2" },
|
761
762
|
}
|
762
|
-
url =
|
763
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
763
764
|
Time.stub :now, Time.at(1561353581) do
|
764
|
-
assert_fetch_s3 url,
|
765
|
+
assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2"
|
765
766
|
end
|
766
767
|
ensure
|
767
768
|
Gem.configuration[:s3_source] = nil
|
@@ -769,79 +770,79 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
769
770
|
|
770
771
|
def test_fetch_s3_config_creds_with_token
|
771
772
|
Gem.configuration[:s3_source] = {
|
772
|
-
|
773
|
+
"my-bucket" => { :id => "testuser", :secret => "testpass", :security_token => "testtoken" },
|
773
774
|
}
|
774
|
-
url =
|
775
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
775
776
|
Time.stub :now, Time.at(1561353581) do
|
776
|
-
assert_fetch_s3 url,
|
777
|
+
assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken"
|
777
778
|
end
|
778
779
|
ensure
|
779
780
|
Gem.configuration[:s3_source] = nil
|
780
781
|
end
|
781
782
|
|
782
783
|
def test_fetch_s3_env_creds
|
783
|
-
ENV[
|
784
|
-
ENV[
|
785
|
-
ENV[
|
784
|
+
ENV["AWS_ACCESS_KEY_ID"] = "testuser"
|
785
|
+
ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
|
786
|
+
ENV["AWS_SESSION_TOKEN"] = nil
|
786
787
|
Gem.configuration[:s3_source] = {
|
787
|
-
|
788
|
+
"my-bucket" => { :provider => "env" },
|
788
789
|
}
|
789
|
-
url =
|
790
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
790
791
|
Time.stub :now, Time.at(1561353581) do
|
791
|
-
assert_fetch_s3 url,
|
792
|
+
assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
|
792
793
|
end
|
793
794
|
ensure
|
794
|
-
ENV.each_key {|key| ENV.delete(key) if key.start_with?(
|
795
|
+
ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
|
795
796
|
Gem.configuration[:s3_source] = nil
|
796
797
|
end
|
797
798
|
|
798
799
|
def test_fetch_s3_env_creds_with_region
|
799
|
-
ENV[
|
800
|
-
ENV[
|
801
|
-
ENV[
|
800
|
+
ENV["AWS_ACCESS_KEY_ID"] = "testuser"
|
801
|
+
ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
|
802
|
+
ENV["AWS_SESSION_TOKEN"] = nil
|
802
803
|
Gem.configuration[:s3_source] = {
|
803
|
-
|
804
|
+
"my-bucket" => { :provider => "env", :region => "us-west-2" },
|
804
805
|
}
|
805
|
-
url =
|
806
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
806
807
|
Time.stub :now, Time.at(1561353581) do
|
807
|
-
assert_fetch_s3 url,
|
808
|
+
assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2"
|
808
809
|
end
|
809
810
|
ensure
|
810
|
-
ENV.each_key {|key| ENV.delete(key) if key.start_with?(
|
811
|
+
ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
|
811
812
|
Gem.configuration[:s3_source] = nil
|
812
813
|
end
|
813
814
|
|
814
815
|
def test_fetch_s3_env_creds_with_token
|
815
|
-
ENV[
|
816
|
-
ENV[
|
817
|
-
ENV[
|
816
|
+
ENV["AWS_ACCESS_KEY_ID"] = "testuser"
|
817
|
+
ENV["AWS_SECRET_ACCESS_KEY"] = "testpass"
|
818
|
+
ENV["AWS_SESSION_TOKEN"] = "testtoken"
|
818
819
|
Gem.configuration[:s3_source] = {
|
819
|
-
|
820
|
+
"my-bucket" => { :provider => "env" },
|
820
821
|
}
|
821
|
-
url =
|
822
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
822
823
|
Time.stub :now, Time.at(1561353581) do
|
823
|
-
assert_fetch_s3 url,
|
824
|
+
assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken"
|
824
825
|
end
|
825
826
|
ensure
|
826
|
-
ENV.each_key {|key| ENV.delete(key) if key.start_with?(
|
827
|
+
ENV.each_key {|key| ENV.delete(key) if key.start_with?("AWS") }
|
827
828
|
Gem.configuration[:s3_source] = nil
|
828
829
|
end
|
829
830
|
|
830
831
|
def test_fetch_s3_url_creds
|
831
|
-
url =
|
832
|
+
url = "s3://testuser:testpass@my-bucket/gems/specs.4.8.gz"
|
832
833
|
Time.stub :now, Time.at(1561353581) do
|
833
|
-
assert_fetch_s3 url,
|
834
|
+
assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b"
|
834
835
|
end
|
835
836
|
end
|
836
837
|
|
837
838
|
def test_fetch_s3_instance_profile_creds
|
838
839
|
Gem.configuration[:s3_source] = {
|
839
|
-
|
840
|
+
"my-bucket" => { :provider => "instance_profile" },
|
840
841
|
}
|
841
842
|
|
842
|
-
url =
|
843
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
843
844
|
Time.stub :now, Time.at(1561353581) do
|
844
|
-
assert_fetch_s3 url,
|
845
|
+
assert_fetch_s3 url, "20f974027db2f3cd6193565327a7c73457a138efb1a63ea248d185ce6827d41b", nil, "us-east-1",
|
845
846
|
'{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
|
846
847
|
end
|
847
848
|
ensure
|
@@ -850,12 +851,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
850
851
|
|
851
852
|
def test_fetch_s3_instance_profile_creds_with_region
|
852
853
|
Gem.configuration[:s3_source] = {
|
853
|
-
|
854
|
+
"my-bucket" => { :provider => "instance_profile", :region => "us-west-2" },
|
854
855
|
}
|
855
856
|
|
856
|
-
url =
|
857
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
857
858
|
Time.stub :now, Time.at(1561353581) do
|
858
|
-
assert_fetch_s3 url,
|
859
|
+
assert_fetch_s3 url, "4afc3010757f1fd143e769f1d1dabd406476a4fc7c120e9884fd02acbb8f26c9", nil, "us-west-2",
|
859
860
|
'{"AccessKeyId": "testuser", "SecretAccessKey": "testpass"}'
|
860
861
|
end
|
861
862
|
ensure
|
@@ -864,12 +865,12 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
864
865
|
|
865
866
|
def test_fetch_s3_instance_profile_creds_with_token
|
866
867
|
Gem.configuration[:s3_source] = {
|
867
|
-
|
868
|
+
"my-bucket" => { :provider => "instance_profile" },
|
868
869
|
}
|
869
870
|
|
870
|
-
url =
|
871
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
871
872
|
Time.stub :now, Time.at(1561353581) do
|
872
|
-
assert_fetch_s3 url,
|
873
|
+
assert_fetch_s3 url, "935160a427ef97e7630f799232b8f208c4a4e49aad07d0540572a2ad5fe9f93c", "testtoken", "us-east-1",
|
873
874
|
'{"AccessKeyId": "testuser", "SecretAccessKey": "testpass", "Token": "testtoken"}'
|
874
875
|
end
|
875
876
|
ensure
|
@@ -888,35 +889,35 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
888
889
|
end
|
889
890
|
|
890
891
|
def test_fetch_s3_no_source_key
|
891
|
-
url =
|
892
|
-
refute_fetch_s3 url,
|
892
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
893
|
+
refute_fetch_s3 url, "no s3_source key exists in .gemrc"
|
893
894
|
end
|
894
895
|
|
895
896
|
def test_fetch_s3_no_host
|
896
897
|
Gem.configuration[:s3_source] = {
|
897
|
-
|
898
|
+
"my-bucket" => { :id => "testuser", :secret => "testpass" },
|
898
899
|
}
|
899
900
|
|
900
|
-
url =
|
901
|
-
refute_fetch_s3 url,
|
901
|
+
url = "s3://other-bucket/gems/specs.4.8.gz"
|
902
|
+
refute_fetch_s3 url, "no key for host other-bucket in s3_source in .gemrc"
|
902
903
|
ensure
|
903
904
|
Gem.configuration[:s3_source] = nil
|
904
905
|
end
|
905
906
|
|
906
907
|
def test_fetch_s3_no_id
|
907
|
-
Gem.configuration[:s3_source] = {
|
908
|
+
Gem.configuration[:s3_source] = { "my-bucket" => { :secret => "testpass" } }
|
908
909
|
|
909
|
-
url =
|
910
|
-
refute_fetch_s3 url,
|
910
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
911
|
+
refute_fetch_s3 url, "s3_source for my-bucket missing id or secret"
|
911
912
|
ensure
|
912
913
|
Gem.configuration[:s3_source] = nil
|
913
914
|
end
|
914
915
|
|
915
916
|
def test_fetch_s3_no_secret
|
916
|
-
Gem.configuration[:s3_source] = {
|
917
|
+
Gem.configuration[:s3_source] = { "my-bucket" => { :id => "testuser" } }
|
917
918
|
|
918
|
-
url =
|
919
|
-
refute_fetch_s3 url,
|
919
|
+
url = "s3://my-bucket/gems/specs.4.8.gz"
|
920
|
+
refute_fetch_s3 url, "s3_source for my-bucket missing id or secret"
|
920
921
|
ensure
|
921
922
|
Gem.configuration[:s3_source] = nil
|
922
923
|
end
|
@@ -946,7 +947,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
946
947
|
@fetcher = fetcher
|
947
948
|
|
948
949
|
assert_throws :block_called do
|
949
|
-
fetcher.request URI(
|
950
|
+
fetcher.request URI("http://example"), Net::HTTP::Get do |req|
|
950
951
|
assert_kind_of Net::HTTPGenericRequest, req
|
951
952
|
throw :block_called
|
952
953
|
end
|
@@ -964,7 +965,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
964
965
|
|
965
966
|
def test_ssl_connection
|
966
967
|
ssl_server = start_ssl_server
|
967
|
-
temp_ca_cert = File.join(__dir__,
|
968
|
+
temp_ca_cert = File.join(__dir__, "ca_cert.pem")
|
968
969
|
with_configured_fetcher(":ssl_ca_cert: #{temp_ca_cert}") do |fetcher|
|
969
970
|
fetcher.fetch_path("https://localhost:#{ssl_server.config[:Port]}/yaml")
|
970
971
|
end
|
@@ -975,8 +976,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
975
976
|
:SSLVerifyClient =>
|
976
977
|
OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT })
|
977
978
|
|
978
|
-
temp_ca_cert = File.join(__dir__,
|
979
|
-
temp_client_cert = File.join(__dir__,
|
979
|
+
temp_ca_cert = File.join(__dir__, "ca_cert.pem")
|
980
|
+
temp_client_cert = File.join(__dir__, "client.pem")
|
980
981
|
|
981
982
|
with_configured_fetcher(
|
982
983
|
":ssl_ca_cert: #{temp_ca_cert}\n" +
|
@@ -990,8 +991,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
990
991
|
:SSLVerifyClient =>
|
991
992
|
OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT })
|
992
993
|
|
993
|
-
temp_ca_cert = File.join(__dir__,
|
994
|
-
temp_client_cert = File.join(__dir__,
|
994
|
+
temp_ca_cert = File.join(__dir__, "ca_cert.pem")
|
995
|
+
temp_client_cert = File.join(__dir__, "invalid_client.pem")
|
995
996
|
|
996
997
|
with_configured_fetcher(
|
997
998
|
":ssl_ca_cert: #{temp_ca_cert}\n" +
|
@@ -1020,7 +1021,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
1020
1021
|
|
1021
1022
|
def test_do_not_follow_insecure_redirect
|
1022
1023
|
ssl_server = start_ssl_server
|
1023
|
-
temp_ca_cert = File.join(__dir__,
|
1024
|
+
temp_ca_cert = File.join(__dir__, "ca_cert.pem")
|
1024
1025
|
expected_error_message =
|
1025
1026
|
"redirecting to non-https resource: #{@server_uri} (https://localhost:#{ssl_server.config[:Port]}/insecure_redirect?to=#{@server_uri})"
|
1026
1027
|
|
@@ -1046,8 +1047,8 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
1046
1047
|
|
1047
1048
|
def with_configured_fetcher(config_str = nil, &block)
|
1048
1049
|
if config_str
|
1049
|
-
temp_conf = File.join @tempdir,
|
1050
|
-
File.open temp_conf,
|
1050
|
+
temp_conf = File.join @tempdir, ".gemrc"
|
1051
|
+
File.open temp_conf, "w" do |fp|
|
1051
1052
|
fp.puts config_str
|
1052
1053
|
end
|
1053
1054
|
Gem.configuration = Gem::ConfigFile.new %W[--config-file #{temp_conf}]
|
@@ -1136,9 +1137,9 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
1136
1137
|
:Logger => null_logger,
|
1137
1138
|
:AccessLog => [],
|
1138
1139
|
:SSLEnable => true,
|
1139
|
-
:SSLCACertificateFile => File.join(__dir__,
|
1140
|
-
:SSLCertificate => cert(
|
1141
|
-
:SSLPrivateKey => key(
|
1140
|
+
:SSLCACertificateFile => File.join(__dir__, "ca_cert.pem"),
|
1141
|
+
:SSLCertificate => cert("ssl_cert.pem"),
|
1142
|
+
:SSLPrivateKey => key("ssl_key.pem"),
|
1142
1143
|
:SSLVerifyClient => nil,
|
1143
1144
|
:SSLCertName => nil,
|
1144
1145
|
}.merge(config))
|
@@ -1146,7 +1147,7 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
1146
1147
|
res.body = "--- true\n"
|
1147
1148
|
end
|
1148
1149
|
server.mount_proc("/insecure_redirect") do |req, res|
|
1149
|
-
res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query[
|
1150
|
+
res.set_redirect(WEBrick::HTTPStatus::MovedPermanently, req.query["to"])
|
1150
1151
|
end
|
1151
1152
|
server.ssl_context.tmp_dh_callback = proc { TEST_KEY_DH2048 }
|
1152
1153
|
t = Thread.new do
|
@@ -1174,10 +1175,10 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
1174
1175
|
def start_server(data)
|
1175
1176
|
null_logger = NilLog.new
|
1176
1177
|
s = WEBrick::HTTPServer.new(
|
1177
|
-
:Port
|
1178
|
-
:DocumentRoot
|
1179
|
-
:Logger
|
1180
|
-
:AccessLog
|
1178
|
+
:Port => 0,
|
1179
|
+
:DocumentRoot => nil,
|
1180
|
+
:Logger => null_logger,
|
1181
|
+
:AccessLog => null_logger
|
1181
1182
|
)
|
1182
1183
|
s.mount_proc("/kill") {|req, res| s.shutdown }
|
1183
1184
|
s.mount_proc("/yaml") do |req, res|
|
@@ -1185,22 +1186,22 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg==
|
|
1185
1186
|
res.body = req["X-Captain"]
|
1186
1187
|
elsif @enable_yaml
|
1187
1188
|
res.body = data
|
1188
|
-
res[
|
1189
|
-
res[
|
1189
|
+
res["Content-Type"] = "text/plain"
|
1190
|
+
res["content-length"] = data.size
|
1190
1191
|
else
|
1191
1192
|
res.status = "404"
|
1192
1193
|
res.body = "<h1>NOT FOUND</h1>"
|
1193
|
-
res[
|
1194
|
+
res["Content-Type"] = "text/html"
|
1194
1195
|
end
|
1195
1196
|
end
|
1196
1197
|
s.mount_proc("/yaml.Z") do |req, res|
|
1197
1198
|
if @enable_zip
|
1198
1199
|
res.body = Zlib::Deflate.deflate(data)
|
1199
|
-
res[
|
1200
|
+
res["Content-Type"] = "text/plain"
|
1200
1201
|
else
|
1201
1202
|
res.status = "404"
|
1202
1203
|
res.body = "<h1>NOT FOUND</h1>"
|
1203
|
-
res[
|
1204
|
+
res["Content-Type"] = "text/html"
|
1204
1205
|
end
|
1205
1206
|
end
|
1206
1207
|
th = Thread.new do
|