rubygems-update 3.4.22 → 3.5.0
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 +99 -2
- data/Manifest.txt +34 -221
- data/README.md +1 -3
- data/bundler/CHANGELOG.md +53 -0
- data/bundler/bundler.gemspec +4 -2
- data/bundler/exe/bundle +1 -10
- data/bundler/lib/bundler/build_metadata.rb +3 -3
- data/bundler/lib/bundler/capistrano.rb +1 -1
- data/bundler/lib/bundler/checksum.rb +245 -0
- data/bundler/lib/bundler/ci_detector.rb +75 -0
- data/bundler/lib/bundler/cli/add.rb +3 -3
- data/bundler/lib/bundler/cli/binstubs.rb +4 -4
- data/bundler/lib/bundler/cli/cache.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +1 -1
- data/bundler/lib/bundler/cli/common.rb +9 -1
- data/bundler/lib/bundler/cli/config.rb +8 -7
- data/bundler/lib/bundler/cli/console.rb +3 -2
- data/bundler/lib/bundler/cli/doctor.rb +2 -2
- data/bundler/lib/bundler/cli/exec.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +28 -23
- data/bundler/lib/bundler/cli/info.rb +2 -13
- data/bundler/lib/bundler/cli/install.rb +5 -4
- data/bundler/lib/bundler/cli/issue.rb +1 -1
- data/bundler/lib/bundler/cli/lock.rb +4 -4
- data/bundler/lib/bundler/cli/open.rb +1 -1
- data/bundler/lib/bundler/cli/outdated.rb +6 -6
- data/bundler/lib/bundler/cli/plugin.rb +7 -14
- data/bundler/lib/bundler/cli/pristine.rb +38 -30
- data/bundler/lib/bundler/cli/show.rb +2 -2
- data/bundler/lib/bundler/cli/update.rb +5 -5
- data/bundler/lib/bundler/cli.rb +215 -263
- data/bundler/lib/bundler/compact_index_client/cache.rb +29 -9
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
- data/bundler/lib/bundler/compact_index_client/updater.rb +79 -81
- data/bundler/lib/bundler/compact_index_client.rb +14 -7
- data/bundler/lib/bundler/constants.rb +1 -1
- data/bundler/lib/bundler/current_ruby.rb +5 -21
- data/bundler/lib/bundler/definition.rb +42 -15
- data/bundler/lib/bundler/dependency.rb +16 -12
- data/bundler/lib/bundler/digest.rb +2 -2
- data/bundler/lib/bundler/dsl.rb +43 -25
- data/bundler/lib/bundler/endpoint_specification.rb +5 -1
- data/bundler/lib/bundler/env.rb +1 -3
- data/bundler/lib/bundler/errors.rb +43 -0
- data/bundler/lib/bundler/fetcher/base.rb +3 -1
- data/bundler/lib/bundler/fetcher/compact_index.rb +4 -4
- data/bundler/lib/bundler/fetcher/downloader.rb +13 -11
- data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
- data/bundler/lib/bundler/fetcher/index.rb +1 -1
- data/bundler/lib/bundler/fetcher.rb +28 -25
- data/bundler/lib/bundler/friendly_errors.rb +5 -5
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_helpers.rb +5 -2
- data/bundler/lib/bundler/graph.rb +9 -9
- data/bundler/lib/bundler/index.rb +1 -2
- data/bundler/lib/bundler/injector.rb +1 -1
- data/bundler/lib/bundler/inline.rb +3 -3
- data/bundler/lib/bundler/installer/gem_installer.rb +5 -5
- data/bundler/lib/bundler/installer/parallel_installer.rb +16 -8
- data/bundler/lib/bundler/installer/standalone.rb +2 -3
- data/bundler/lib/bundler/installer.rb +9 -9
- data/bundler/lib/bundler/lazy_specification.rb +24 -17
- data/bundler/lib/bundler/lockfile_generator.rb +9 -0
- data/bundler/lib/bundler/lockfile_parser.rb +81 -10
- data/bundler/lib/bundler/man/bundle-add.1 +3 -26
- data/bundler/lib/bundler/man/bundle-binstubs.1 +4 -16
- data/bundler/lib/bundler/man/bundle-cache.1 +3 -24
- data/bundler/lib/bundler/man/bundle-check.1 +3 -12
- data/bundler/lib/bundler/man/bundle-clean.1 +3 -10
- data/bundler/lib/bundler/man/bundle-config.1 +20 -211
- data/bundler/lib/bundler/man/bundle-config.1.ronn +6 -0
- data/bundler/lib/bundler/man/bundle-console.1 +4 -22
- data/bundler/lib/bundler/man/bundle-doctor.1 +4 -18
- data/bundler/lib/bundler/man/bundle-exec.1 +12 -73
- data/bundler/lib/bundler/man/bundle-gem.1 +13 -49
- data/bundler/lib/bundler/man/bundle-help.1 +3 -7
- data/bundler/lib/bundler/man/bundle-info.1 +3 -9
- data/bundler/lib/bundler/man/bundle-init.1 +3 -12
- data/bundler/lib/bundler/man/bundle-inject.1 +6 -19
- data/bundler/lib/bundler/man/bundle-install.1 +27 -125
- data/bundler/lib/bundler/man/bundle-install.1.ronn +1 -0
- data/bundler/lib/bundler/man/bundle-list.1 +4 -19
- data/bundler/lib/bundler/man/bundle-lock.1 +5 -29
- data/bundler/lib/bundler/man/bundle-open.1 +7 -27
- data/bundler/lib/bundler/man/bundle-outdated.1 +3 -55
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -0
- data/bundler/lib/bundler/man/bundle-platform.1 +5 -27
- data/bundler/lib/bundler/man/bundle-plugin.1 +3 -29
- data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
- data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
- data/bundler/lib/bundler/man/bundle-show.1 +3 -10
- data/bundler/lib/bundler/man/bundle-update.1 +18 -137
- data/bundler/lib/bundler/man/bundle-version.1 +3 -16
- data/bundler/lib/bundler/man/bundle-viz.1 +4 -16
- data/bundler/lib/bundler/man/bundle.1 +5 -44
- data/bundler/lib/bundler/man/gemfile.5 +24 -301
- data/bundler/lib/bundler/man/gemfile.5.ronn +4 -0
- data/bundler/lib/bundler/match_metadata.rb +4 -0
- data/bundler/lib/bundler/match_platform.rb +1 -1
- data/bundler/lib/bundler/plugin/api/source.rb +3 -2
- data/bundler/lib/bundler/plugin/installer.rb +1 -1
- data/bundler/lib/bundler/plugin.rb +3 -3
- data/bundler/lib/bundler/resolver/base.rb +1 -1
- data/bundler/lib/bundler/resolver/incompatibility.rb +1 -1
- data/bundler/lib/bundler/resolver/spec_group.rb +1 -4
- data/bundler/lib/bundler/resolver.rb +16 -16
- data/bundler/lib/bundler/ruby_dsl.rb +20 -12
- data/bundler/lib/bundler/ruby_version.rb +1 -1
- data/bundler/lib/bundler/rubygems_ext.rb +24 -50
- data/bundler/lib/bundler/rubygems_gem_installer.rb +6 -56
- data/bundler/lib/bundler/rubygems_integration.rb +25 -94
- data/bundler/lib/bundler/runtime.rb +2 -2
- data/bundler/lib/bundler/self_manager.rb +23 -7
- data/bundler/lib/bundler/settings.rb +27 -7
- data/bundler/lib/bundler/setup.rb +4 -1
- data/bundler/lib/bundler/shared_helpers.rb +35 -13
- data/bundler/lib/bundler/source/git/git_proxy.rb +15 -15
- data/bundler/lib/bundler/source/git.rb +4 -3
- data/bundler/lib/bundler/source/metadata.rb +15 -15
- data/bundler/lib/bundler/source/path.rb +7 -6
- data/bundler/lib/bundler/source/rubygems.rb +21 -14
- data/bundler/lib/bundler/source.rb +2 -0
- data/bundler/lib/bundler/spec_set.rb +38 -10
- data/bundler/lib/bundler/stub_specification.rb +1 -0
- data/bundler/lib/bundler/templates/Executable.bundler +1 -1
- data/bundler/lib/bundler/templates/newgem/README.md.tt +3 -3
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -6
- data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
- data/bundler/lib/bundler/ui/shell.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +3 -3
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +2 -2
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +35 -35
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendored_net_http.rb +8 -0
- data/bundler/lib/bundler/vendored_persistent.rb +0 -4
- data/bundler/lib/bundler/vendored_timeout.rb +8 -0
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/vlad.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +3 -3
- data/bundler/lib/bundler.rb +38 -27
- data/lib/rubygems/available_set.rb +4 -4
- data/lib/rubygems/basic_specification.rb +35 -37
- data/lib/rubygems/bundler_version_finder.rb +4 -4
- data/lib/rubygems/ci_detector.rb +75 -0
- data/lib/rubygems/command.rb +13 -15
- data/lib/rubygems/command_manager.rb +5 -4
- data/lib/rubygems/commands/build_command.rb +2 -2
- data/lib/rubygems/commands/cert_command.rb +1 -2
- data/lib/rubygems/commands/check_command.rb +4 -4
- data/lib/rubygems/commands/cleanup_command.rb +12 -14
- data/lib/rubygems/commands/contents_command.rb +4 -4
- data/lib/rubygems/commands/dependency_command.rb +4 -5
- data/lib/rubygems/commands/environment_command.rb +1 -3
- data/lib/rubygems/commands/exec_command.rb +1 -1
- data/lib/rubygems/commands/fetch_command.rb +2 -2
- data/lib/rubygems/commands/generate_index_command.rb +39 -74
- data/lib/rubygems/commands/help_command.rb +3 -3
- data/lib/rubygems/commands/info_command.rb +2 -2
- data/lib/rubygems/commands/install_command.rb +8 -16
- data/lib/rubygems/commands/list_command.rb +2 -2
- data/lib/rubygems/commands/lock_command.rb +1 -1
- data/lib/rubygems/commands/open_command.rb +1 -1
- data/lib/rubygems/commands/owner_command.rb +1 -1
- data/lib/rubygems/commands/pristine_command.rb +13 -15
- data/lib/rubygems/commands/push_command.rb +2 -2
- data/lib/rubygems/commands/query_command.rb +4 -5
- data/lib/rubygems/commands/rdoc_command.rb +2 -2
- data/lib/rubygems/commands/search_command.rb +2 -2
- data/lib/rubygems/commands/setup_command.rb +31 -34
- data/lib/rubygems/commands/sources_command.rb +12 -12
- data/lib/rubygems/commands/specification_command.rb +10 -10
- data/lib/rubygems/commands/stale_command.rb +1 -1
- data/lib/rubygems/commands/uninstall_command.rb +9 -10
- data/lib/rubygems/commands/unpack_command.rb +4 -4
- data/lib/rubygems/commands/update_command.rb +10 -12
- data/lib/rubygems/commands/which_command.rb +1 -1
- data/lib/rubygems/commands/yank_command.rb +1 -1
- data/lib/rubygems/compatibility.rb +5 -6
- data/lib/rubygems/config_file.rb +4 -4
- data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
- data/lib/rubygems/core_ext/kernel_require.rb +19 -48
- data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
- data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
- data/lib/rubygems/defaults.rb +15 -3
- data/lib/rubygems/dependency.rb +12 -14
- data/lib/rubygems/dependency_installer.rb +29 -30
- data/lib/rubygems/dependency_list.rb +1 -1
- data/lib/rubygems/deprecate.rb +16 -15
- data/lib/rubygems/doctor.rb +5 -5
- data/lib/rubygems/errors.rb +2 -6
- data/lib/rubygems/exceptions.rb +2 -1
- data/lib/rubygems/ext/builder.rb +15 -10
- data/lib/rubygems/ext/cargo_builder.rb +5 -5
- data/lib/rubygems/ext/ext_conf_builder.rb +1 -3
- data/lib/rubygems/gem_runner.rb +4 -4
- data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
- data/lib/rubygems/gemcutter_utilities.rb +18 -19
- data/lib/rubygems/install_update_options.rb +18 -19
- data/lib/rubygems/installer.rb +59 -33
- data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
- data/lib/rubygems/local_remote_options.rb +7 -10
- data/lib/rubygems/name_tuple.rb +7 -9
- data/lib/rubygems/net/http.rb +3 -0
- data/lib/rubygems/net-http/LICENSE.txt +22 -0
- data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
- data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
- data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
- data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
- data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
- data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
- data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
- data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
- data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
- data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
- data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
- data/lib/rubygems/net-http/lib/net/https.rb +23 -0
- data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
- data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
- data/lib/rubygems/optparse/lib/optparse.rb +39 -17
- data/lib/rubygems/package/old.rb +2 -2
- data/lib/rubygems/package/tar_header.rb +45 -39
- data/lib/rubygems/package/tar_reader/entry.rb +5 -4
- data/lib/rubygems/package/tar_reader.rb +5 -3
- data/lib/rubygems/package/tar_writer.rb +19 -17
- data/lib/rubygems/package.rb +27 -26
- data/lib/rubygems/package_task.rb +2 -2
- data/lib/rubygems/path_support.rb +9 -10
- data/lib/rubygems/platform.rb +60 -45
- data/lib/rubygems/query_utils.rb +7 -9
- data/lib/rubygems/remote_fetcher.rb +15 -15
- data/lib/rubygems/request/connection_pools.rb +3 -3
- data/lib/rubygems/request.rb +20 -17
- data/lib/rubygems/request_set/gem_dependency_api.rb +119 -122
- data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
- data/lib/rubygems/request_set/lockfile.rb +6 -11
- data/lib/rubygems/request_set.rb +5 -5
- data/lib/rubygems/requirement.rb +7 -7
- data/lib/rubygems/resolv/LICENSE.txt +22 -0
- data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
- data/lib/rubygems/resolver/activation_request.rb +1 -3
- data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
- data/lib/rubygems/resolver/best_set.rb +1 -1
- data/lib/rubygems/resolver/composed_set.rb +1 -1
- data/lib/rubygems/resolver/conflict.rb +4 -12
- data/lib/rubygems/resolver/index_set.rb +4 -4
- data/lib/rubygems/resolver/index_specification.rb +2 -2
- data/lib/rubygems/resolver/installer_set.rb +5 -6
- data/lib/rubygems/resolver/lock_set.rb +1 -1
- data/lib/rubygems/resolver.rb +3 -10
- data/lib/rubygems/s3_uri_signer.rb +6 -6
- data/lib/rubygems/safe_marshal/elements.rb +138 -0
- data/lib/rubygems/safe_marshal/reader.rb +306 -0
- data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
- data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
- data/lib/rubygems/safe_marshal.rb +74 -0
- data/lib/rubygems/safe_yaml.rb +5 -28
- data/lib/rubygems/security/policies.rb +36 -38
- data/lib/rubygems/security/policy.rb +7 -11
- data/lib/rubygems/security/signer.rb +1 -1
- data/lib/rubygems/security/trust_dir.rb +3 -3
- data/lib/rubygems/security.rb +8 -22
- data/lib/rubygems/source/git.rb +1 -3
- data/lib/rubygems/source/installed.rb +0 -2
- data/lib/rubygems/source/local.rb +5 -8
- data/lib/rubygems/source/lock.rb +1 -3
- data/lib/rubygems/source/specific_file.rb +0 -1
- data/lib/rubygems/source/vendor.rb +0 -2
- data/lib/rubygems/source.rb +12 -12
- data/lib/rubygems/source_list.rb +4 -4
- data/lib/rubygems/spec_fetcher.rb +29 -29
- data/lib/rubygems/specification.rb +125 -138
- data/lib/rubygems/specification_policy.rb +55 -25
- data/lib/rubygems/stub_specification.rb +4 -5
- data/lib/rubygems/text.rb +1 -2
- data/lib/rubygems/timeout/LICENSE.txt +22 -0
- data/lib/rubygems/timeout/lib/timeout.rb +199 -0
- data/lib/rubygems/timeout.rb +3 -0
- data/lib/rubygems/tsort/lib/tsort.rb +3 -0
- data/lib/rubygems/uninstaller.rb +7 -9
- data/lib/rubygems/update_suggestion.rb +5 -18
- data/lib/rubygems/uri_formatter.rb +1 -1
- data/lib/rubygems/user_interaction.rb +15 -21
- data/lib/rubygems/util/licenses.rb +65 -35
- data/lib/rubygems/util/list.rb +3 -1
- data/lib/rubygems/util.rb +2 -4
- data/lib/rubygems/validator.rb +5 -3
- data/lib/rubygems/version.rb +34 -28
- data/lib/rubygems/version_option.rb +2 -5
- data/lib/rubygems/yaml_serializer.rb +3 -3
- data/lib/rubygems.rb +37 -37
- data/rubygems-update.gemspec +4 -4
- data/setup.rb +2 -2
- metadata +38 -225
- data/lib/rubygems/indexer.rb +0 -428
- data/lib/rubygems/mock_gem_ui.rb +0 -86
- data/test/rubygems/alternate_cert.pem +0 -19
- data/test/rubygems/alternate_cert_32.pem +0 -19
- data/test/rubygems/alternate_key.pem +0 -27
- data/test/rubygems/bad_rake.rb +0 -3
- data/test/rubygems/bundler_test_gem.rb +0 -424
- data/test/rubygems/ca_cert.pem +0 -77
- data/test/rubygems/child_cert.pem +0 -19
- data/test/rubygems/child_cert_32.pem +0 -19
- data/test/rubygems/child_key.pem +0 -27
- data/test/rubygems/client.pem +0 -107
- data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
- data/test/rubygems/data/gem-private_key.pem +0 -27
- data/test/rubygems/data/gem-public_cert.pem +0 -20
- data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
- data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
- data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
- data/test/rubygems/encrypted_private_key.pem +0 -30
- data/test/rubygems/expired_cert.pem +0 -19
- data/test/rubygems/fake_certlib/openssl.rb +0 -9
- data/test/rubygems/foo/discover.rb +0 -1
- data/test/rubygems/future_cert.pem +0 -19
- data/test/rubygems/future_cert_32.pem +0 -19
- data/test/rubygems/good_rake.rb +0 -3
- data/test/rubygems/grandchild_cert.pem +0 -19
- data/test/rubygems/grandchild_cert_32.pem +0 -19
- data/test/rubygems/grandchild_key.pem +0 -27
- data/test/rubygems/helper.rb +0 -1649
- data/test/rubygems/installer_test_case.rb +0 -248
- data/test/rubygems/invalid_client.pem +0 -49
- data/test/rubygems/invalid_issuer_cert.pem +0 -20
- data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
- data/test/rubygems/invalid_key.pem +0 -27
- data/test/rubygems/invalid_signer_cert.pem +0 -19
- data/test/rubygems/invalid_signer_cert_32.pem +0 -19
- data/test/rubygems/invalidchild_cert.pem +0 -19
- data/test/rubygems/invalidchild_cert_32.pem +0 -19
- data/test/rubygems/invalidchild_key.pem +0 -27
- data/test/rubygems/multifactor_auth_utilities.rb +0 -111
- data/test/rubygems/package/tar_test_case.rb +0 -175
- data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
- data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
- data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
- data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
- data/test/rubygems/private3072_key.pem +0 -40
- data/test/rubygems/private_ec_key.pem +0 -9
- data/test/rubygems/private_key.pem +0 -27
- data/test/rubygems/public3072_cert.pem +0 -25
- data/test/rubygems/public_cert.pem +0 -20
- data/test/rubygems/public_cert_32.pem +0 -19
- data/test/rubygems/public_key.pem +0 -9
- data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
- data/test/rubygems/rubygems_plugin.rb +0 -24
- data/test/rubygems/sff/discover.rb +0 -1
- data/test/rubygems/simple_gem.rb +0 -68
- data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
- data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
- data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
- data/test/rubygems/ssl_cert.pem +0 -80
- data/test/rubygems/ssl_key.pem +0 -27
- data/test/rubygems/test_bundled_ca.rb +0 -61
- data/test/rubygems/test_config.rb +0 -28
- data/test/rubygems/test_deprecate.rb +0 -158
- data/test/rubygems/test_exit.rb +0 -17
- data/test/rubygems/test_gem.rb +0 -1799
- data/test/rubygems/test_gem_available_set.rb +0 -130
- data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
- data/test/rubygems/test_gem_command.rb +0 -403
- data/test/rubygems/test_gem_command_manager.rb +0 -400
- data/test/rubygems/test_gem_commands_build_command.rb +0 -739
- data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
- data/test/rubygems/test_gem_commands_check_command.rb +0 -68
- data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
- data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
- data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
- data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
- data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
- data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
- data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
- data/test/rubygems/test_gem_commands_help_command.rb +0 -94
- data/test/rubygems/test_gem_commands_info_command.rb +0 -70
- data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
- data/test/rubygems/test_gem_commands_list_command.rb +0 -33
- data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
- data/test/rubygems/test_gem_commands_mirror.rb +0 -20
- data/test/rubygems/test_gem_commands_open_command.rb +0 -101
- data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
- data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
- data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
- data/test/rubygems/test_gem_commands_push_command.rb +0 -603
- data/test/rubygems/test_gem_commands_query_command.rb +0 -858
- data/test/rubygems/test_gem_commands_search_command.rb +0 -16
- data/test/rubygems/test_gem_commands_server_command.rb +0 -20
- data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
- data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
- data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
- data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
- data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
- data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
- data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -542
- data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
- data/test/rubygems/test_gem_commands_update_command.rb +0 -836
- data/test/rubygems/test_gem_commands_which_command.rb +0 -85
- data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
- data/test/rubygems/test_gem_config_file.rb +0 -551
- data/test/rubygems/test_gem_dependency.rb +0 -398
- data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
- data/test/rubygems/test_gem_dependency_list.rb +0 -265
- data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
- data/test/rubygems/test_gem_doctor.rb +0 -195
- data/test/rubygems/test_gem_ext_builder.rb +0 -337
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
- data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
- data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
- data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
- data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
- data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
- data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
- data/test/rubygems/test_gem_gem_runner.rb +0 -119
- data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
- data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
- data/test/rubygems/test_gem_indexer.rb +0 -381
- data/test/rubygems/test_gem_install_update_options.rb +0 -208
- data/test/rubygems/test_gem_installer.rb +0 -2512
- data/test/rubygems/test_gem_local_remote_options.rb +0 -133
- data/test/rubygems/test_gem_name_tuple.rb +0 -43
- data/test/rubygems/test_gem_package.rb +0 -1306
- data/test/rubygems/test_gem_package_old.rb +0 -91
- data/test/rubygems/test_gem_package_tar_header.rb +0 -226
- data/test/rubygems/test_gem_package_tar_reader.rb +0 -150
- data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
- data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
- data/test/rubygems/test_gem_package_task.rb +0 -118
- data/test/rubygems/test_gem_path_support.rb +0 -139
- data/test/rubygems/test_gem_platform.rb +0 -497
- data/test/rubygems/test_gem_rdoc.rb +0 -137
- data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
- data/test/rubygems/test_gem_request.rb +0 -547
- data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
- data/test/rubygems/test_gem_request_set.rb +0 -672
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
- data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
- data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
- data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
- data/test/rubygems/test_gem_requirement.rb +0 -505
- data/test/rubygems/test_gem_resolver.rb +0 -859
- data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
- data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
- data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
- data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
- data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
- data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
- data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
- data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
- data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
- data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
- data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
- data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
- data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
- data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
- data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
- data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
- data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
- data/test/rubygems/test_gem_resolver_specification.rb +0 -63
- data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
- data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
- data/test/rubygems/test_gem_security.rb +0 -341
- data/test/rubygems/test_gem_security_policy.rb +0 -535
- data/test/rubygems/test_gem_security_signer.rb +0 -218
- data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
- data/test/rubygems/test_gem_silent_ui.rb +0 -123
- data/test/rubygems/test_gem_source.rb +0 -254
- data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
- data/test/rubygems/test_gem_source_git.rb +0 -310
- data/test/rubygems/test_gem_source_installed.rb +0 -35
- data/test/rubygems/test_gem_source_list.rb +0 -119
- data/test/rubygems/test_gem_source_local.rb +0 -107
- data/test/rubygems/test_gem_source_lock.rb +0 -113
- data/test/rubygems/test_gem_source_specific_file.rb +0 -76
- data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
- data/test/rubygems/test_gem_source_vendor.rb +0 -30
- data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
- data/test/rubygems/test_gem_specification.rb +0 -3856
- data/test/rubygems/test_gem_stream_ui.rb +0 -255
- data/test/rubygems/test_gem_stub_specification.rb +0 -278
- data/test/rubygems/test_gem_text.rb +0 -103
- data/test/rubygems/test_gem_uninstaller.rb +0 -675
- data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
- data/test/rubygems/test_gem_update_suggestion.rb +0 -209
- data/test/rubygems/test_gem_uri.rb +0 -41
- data/test/rubygems/test_gem_uri_formatter.rb +0 -27
- data/test/rubygems/test_gem_util.rb +0 -91
- data/test/rubygems/test_gem_validator.rb +0 -42
- data/test/rubygems/test_gem_version.rb +0 -305
- data/test/rubygems/test_gem_version_option.rb +0 -165
- data/test/rubygems/test_kernel.rb +0 -124
- data/test/rubygems/test_project_sanity.rb +0 -49
- data/test/rubygems/test_remote_fetch_error.rb +0 -20
- data/test/rubygems/test_require.rb +0 -732
- data/test/rubygems/test_rubygems.rb +0 -76
- data/test/rubygems/test_webauthn_listener.rb +0 -143
- data/test/rubygems/test_webauthn_listener_response.rb +0 -93
- data/test/rubygems/test_webauthn_poller.rb +0 -124
- data/test/rubygems/utilities.rb +0 -436
- data/test/rubygems/wrong_key_cert.pem +0 -19
- data/test/rubygems/wrong_key_cert_32.pem +0 -19
- data/test/test_changelog_generator.rb +0 -17
@@ -1,218 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "helper"
|
4
|
-
|
5
|
-
unless Gem::HAVE_OPENSSL
|
6
|
-
warn "Skipping Gem::Security::Signer tests. openssl not found."
|
7
|
-
end
|
8
|
-
|
9
|
-
class TestGemSecuritySigner < Gem::TestCase
|
10
|
-
ALTERNATE_KEY = load_key "alternate"
|
11
|
-
CHILD_KEY = load_key "child"
|
12
|
-
GRANDCHILD_KEY = load_key "grandchild"
|
13
|
-
|
14
|
-
CHILD_CERT = load_cert "child"
|
15
|
-
GRANDCHILD_CERT = load_cert "grandchild"
|
16
|
-
EXPIRED_CERT = load_cert "expired"
|
17
|
-
|
18
|
-
def setup
|
19
|
-
super
|
20
|
-
|
21
|
-
@cert_file = PUBLIC_CERT
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_initialize
|
25
|
-
signer = Gem::Security::Signer.new nil, nil
|
26
|
-
|
27
|
-
assert_nil signer.key
|
28
|
-
assert_nil signer.cert_chain
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_initialize_cert_chain_empty
|
32
|
-
signer = Gem::Security::Signer.new PUBLIC_KEY, []
|
33
|
-
|
34
|
-
assert_empty signer.cert_chain
|
35
|
-
end
|
36
|
-
|
37
|
-
def test_initialize_cert_chain_mixed
|
38
|
-
signer = Gem::Security::Signer.new nil, [@cert_file, CHILD_CERT]
|
39
|
-
|
40
|
-
assert_equal [PUBLIC_CERT, CHILD_CERT].map {|c| c.to_pem },
|
41
|
-
signer.cert_chain.map {|c| c.to_pem }
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_initialize_cert_chain_invalid
|
45
|
-
assert_raise OpenSSL::X509::CertificateError do
|
46
|
-
Gem::Security::Signer.new nil, ["garbage"]
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_initialize_cert_chain_path
|
51
|
-
signer = Gem::Security::Signer.new nil, [@cert_file]
|
52
|
-
|
53
|
-
assert_equal [PUBLIC_CERT].map {|c| c.to_pem },
|
54
|
-
signer.cert_chain.map {|c| c.to_pem }
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_initialize_default
|
58
|
-
FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
|
59
|
-
|
60
|
-
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
|
61
|
-
Gem::Security.write PRIVATE_KEY, private_key_path
|
62
|
-
|
63
|
-
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
|
64
|
-
Gem::Security.write PUBLIC_CERT, public_cert_path
|
65
|
-
|
66
|
-
signer = Gem::Security::Signer.new nil, nil
|
67
|
-
|
68
|
-
assert_equal PRIVATE_KEY.to_pem, signer.key.to_pem
|
69
|
-
assert_equal [PUBLIC_CERT.to_pem], signer.cert_chain.map {|c| c.to_pem }
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_initialize_key_path
|
73
|
-
key_file = PRIVATE_KEY_PATH
|
74
|
-
|
75
|
-
signer = Gem::Security::Signer.new key_file, nil
|
76
|
-
|
77
|
-
assert_equal PRIVATE_KEY.to_s, signer.key.to_s
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_initialize_encrypted_key_path
|
81
|
-
key_file = ENCRYPTED_PRIVATE_KEY_PATH
|
82
|
-
|
83
|
-
signer = Gem::Security::Signer.new key_file, nil, PRIVATE_KEY_PASSPHRASE
|
84
|
-
|
85
|
-
assert_equal ENCRYPTED_PRIVATE_KEY.to_s, signer.key.to_s
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_extract_name
|
89
|
-
signer = Gem::Security::Signer.new nil, nil
|
90
|
-
|
91
|
-
assert_equal "child@example", signer.extract_name(CHILD_CERT)
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_load_cert_chain
|
95
|
-
Gem::Security.trust_dir.trust_cert PUBLIC_CERT
|
96
|
-
|
97
|
-
signer = Gem::Security::Signer.new nil, []
|
98
|
-
signer.cert_chain.replace [CHILD_CERT]
|
99
|
-
|
100
|
-
signer.load_cert_chain
|
101
|
-
|
102
|
-
assert_equal [PUBLIC_CERT.to_pem, CHILD_CERT.to_pem],
|
103
|
-
signer.cert_chain.map {|c| c.to_pem }
|
104
|
-
end
|
105
|
-
|
106
|
-
def test_load_cert_chain_broken
|
107
|
-
Gem::Security.trust_dir.trust_cert CHILD_CERT
|
108
|
-
|
109
|
-
signer = Gem::Security::Signer.new nil, []
|
110
|
-
signer.cert_chain.replace [GRANDCHILD_CERT]
|
111
|
-
|
112
|
-
signer.load_cert_chain
|
113
|
-
|
114
|
-
assert_equal [CHILD_CERT.to_pem, GRANDCHILD_CERT.to_pem],
|
115
|
-
signer.cert_chain.map {|c| c.to_pem }
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_sign
|
119
|
-
signer = Gem::Security::Signer.new PRIVATE_KEY, [PUBLIC_CERT]
|
120
|
-
|
121
|
-
signature = signer.sign "hello"
|
122
|
-
|
123
|
-
expected = <<-EXPECTED
|
124
|
-
FmrCYxEXW3dgYYNMxPdS16VrdXT+d5nyXTVlRm64ZHSgMxMAaPtQJsVYv73m
|
125
|
-
DWHTzNnLhhINSpgBMLh5a4atM52yxVdkPUTgqIH+LeIPBXn8xaP5JLmfDcmI
|
126
|
-
tBpc/9DhS3v9iKCX40igAArFu7Gg3swbgQ61SP+U22LvG5nDQZQz3sudtsw3
|
127
|
-
qKPykFVaYjrRwzvBdSdJ1PwlAsanSwcwS/GKPtmE/ykZ6X5XOx7wvCDL/zGy
|
128
|
-
B8khkB8hDKC6moCzebmUxCBmTmXD0Wjzon+bf4MOriVE3a0ySGRvpr1mKR2+
|
129
|
-
9EaVo7pDJLEM487+xg1CAZHRhwshd6II00XEzG/jBQ==
|
130
|
-
EXPECTED
|
131
|
-
|
132
|
-
assert_equal expected, [signature].pack("m")
|
133
|
-
end
|
134
|
-
|
135
|
-
def test_sign_expired
|
136
|
-
signer = Gem::Security::Signer.new PRIVATE_KEY, [EXPIRED_CERT]
|
137
|
-
|
138
|
-
e = assert_raise Gem::Security::Exception do
|
139
|
-
signer.sign "hello"
|
140
|
-
end
|
141
|
-
|
142
|
-
assert_match "certificate /CN=nobody/DC=example not valid after 1970-01-01 00:00:00 UTC", e.message
|
143
|
-
end
|
144
|
-
|
145
|
-
def test_sign_expired_auto_update
|
146
|
-
pend if Gem.java_platform?
|
147
|
-
FileUtils.mkdir_p File.join(Gem.user_home, ".gem"), :mode => 0o700
|
148
|
-
|
149
|
-
private_key_path = File.join(Gem.user_home, ".gem", "gem-private_key.pem")
|
150
|
-
Gem::Security.write PRIVATE_KEY, private_key_path
|
151
|
-
|
152
|
-
cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
|
153
|
-
Gem::Security.write EXPIRED_CERT, cert_path
|
154
|
-
|
155
|
-
signer = Gem::Security::Signer.new PRIVATE_KEY, [EXPIRED_CERT]
|
156
|
-
|
157
|
-
signer.sign "hello"
|
158
|
-
|
159
|
-
cert = OpenSSL::X509::Certificate.new File.read cert_path
|
160
|
-
|
161
|
-
refute_equal EXPIRED_CERT.to_pem, cert.to_pem
|
162
|
-
assert_in_delta Time.now, cert.not_before, 10
|
163
|
-
|
164
|
-
expiry = EXPIRED_CERT.not_after.strftime "%Y%m%d%H%M%S"
|
165
|
-
|
166
|
-
expired_path =
|
167
|
-
File.join Gem.user_home, ".gem", "gem-public_cert.pem.expired.#{expiry}"
|
168
|
-
|
169
|
-
assert_path_exist expired_path
|
170
|
-
assert_equal EXPIRED_CERT.to_pem, File.read(expired_path)
|
171
|
-
end
|
172
|
-
|
173
|
-
def test_sign_expired_auto_update_exists
|
174
|
-
FileUtils.mkdir_p File.join(Gem.user_home, ".gem"), :mode => 0o700
|
175
|
-
|
176
|
-
expiry = EXPIRED_CERT.not_after.strftime "%Y%m%d%H%M%S"
|
177
|
-
expired_path =
|
178
|
-
File.join Gem.user_home, "gem-public_cert.pem.expired.#{expiry}"
|
179
|
-
|
180
|
-
Gem::Security.write EXPIRED_CERT, expired_path
|
181
|
-
|
182
|
-
private_key_path = File.join(Gem.user_home, "gem-private_key.pem")
|
183
|
-
Gem::Security.write PRIVATE_KEY, private_key_path
|
184
|
-
|
185
|
-
cert_path = File.join Gem.user_home, "gem-public_cert.pem"
|
186
|
-
Gem::Security.write EXPIRED_CERT, cert_path
|
187
|
-
|
188
|
-
signer = Gem::Security::Signer.new PRIVATE_KEY, [EXPIRED_CERT]
|
189
|
-
|
190
|
-
e = assert_raise Gem::Security::Exception do
|
191
|
-
signer.sign "hello"
|
192
|
-
end
|
193
|
-
|
194
|
-
assert_match %r{certificate /CN=nobody/DC=example not valid}, e.message
|
195
|
-
end
|
196
|
-
|
197
|
-
def test_sign_no_key
|
198
|
-
signer = Gem::Security::Signer.new nil, nil
|
199
|
-
|
200
|
-
assert_nil signer.sign "stuff"
|
201
|
-
end
|
202
|
-
|
203
|
-
def test_sign_wrong_key
|
204
|
-
signer = Gem::Security::Signer.new ALTERNATE_KEY, [PUBLIC_CERT]
|
205
|
-
|
206
|
-
assert_raise Gem::Security::Exception do
|
207
|
-
signer.sign "hello"
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
def test_sign_no_certs
|
212
|
-
signer = Gem::Security::Signer.new ALTERNATE_KEY, []
|
213
|
-
|
214
|
-
assert_raise Gem::Security::Exception do
|
215
|
-
signer.sign "hello"
|
216
|
-
end
|
217
|
-
end
|
218
|
-
end if Gem::HAVE_OPENSSL
|
@@ -1,99 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "helper"
|
4
|
-
|
5
|
-
unless Gem::HAVE_OPENSSL
|
6
|
-
warn "Skipping Gem::Security::TrustDir tests. openssl not found."
|
7
|
-
end
|
8
|
-
|
9
|
-
class TestGemSecurityTrustDir < Gem::TestCase
|
10
|
-
CHILD_CERT = load_cert "child"
|
11
|
-
|
12
|
-
def setup
|
13
|
-
super
|
14
|
-
|
15
|
-
@dest_dir = File.join @tempdir, "trust"
|
16
|
-
|
17
|
-
@trust_dir = Gem::Security::TrustDir.new @dest_dir
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_cert_path
|
21
|
-
digest = OpenSSL::Digest.hexdigest Gem::Security::DIGEST_NAME, PUBLIC_CERT.subject.to_s
|
22
|
-
|
23
|
-
expected = File.join @dest_dir, "cert-#{digest}.pem"
|
24
|
-
|
25
|
-
assert_equal expected, @trust_dir.cert_path(PUBLIC_CERT)
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_issuer_of
|
29
|
-
assert_nil @trust_dir.issuer_of(CHILD_CERT)
|
30
|
-
|
31
|
-
@trust_dir.trust_cert PUBLIC_CERT
|
32
|
-
|
33
|
-
assert_equal PUBLIC_CERT.to_pem, @trust_dir.issuer_of(CHILD_CERT).to_pem
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_load_certificate
|
37
|
-
@trust_dir.trust_cert PUBLIC_CERT
|
38
|
-
|
39
|
-
path = @trust_dir.cert_path PUBLIC_CERT
|
40
|
-
|
41
|
-
assert_equal PUBLIC_CERT.to_pem, @trust_dir.load_certificate(path).to_pem
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_name_path
|
45
|
-
digest = OpenSSL::Digest.hexdigest Gem::Security::DIGEST_NAME, PUBLIC_CERT.subject.to_s
|
46
|
-
|
47
|
-
expected = File.join @dest_dir, "cert-#{digest}.pem"
|
48
|
-
|
49
|
-
assert_equal expected, @trust_dir.name_path(PUBLIC_CERT.subject)
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_trust_cert
|
53
|
-
@trust_dir.trust_cert PUBLIC_CERT
|
54
|
-
|
55
|
-
trusted = @trust_dir.cert_path PUBLIC_CERT
|
56
|
-
|
57
|
-
assert_path_exist trusted
|
58
|
-
|
59
|
-
mask = 0o100600 & (~File.umask)
|
60
|
-
|
61
|
-
assert_equal mask, File.stat(trusted).mode unless win_platform?
|
62
|
-
|
63
|
-
assert_equal PUBLIC_CERT.to_pem, File.read(trusted)
|
64
|
-
end
|
65
|
-
|
66
|
-
def test_verify
|
67
|
-
assert_path_not_exist @dest_dir
|
68
|
-
|
69
|
-
@trust_dir.verify
|
70
|
-
|
71
|
-
assert_path_exist @dest_dir
|
72
|
-
|
73
|
-
mask = 0o40700 & (~File.umask)
|
74
|
-
mask |= 0o200000 if RUBY_PLATFORM.include?("aix")
|
75
|
-
|
76
|
-
assert_equal mask, File.stat(@dest_dir).mode unless win_platform?
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_verify_file
|
80
|
-
FileUtils.touch @dest_dir
|
81
|
-
|
82
|
-
e = assert_raise Gem::Security::Exception do
|
83
|
-
@trust_dir.verify
|
84
|
-
end
|
85
|
-
|
86
|
-
assert_equal "trust directory #{@dest_dir} is not a directory", e.message
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_verify_wrong_permissions
|
90
|
-
FileUtils.mkdir_p @dest_dir, :mode => 0o777
|
91
|
-
|
92
|
-
@trust_dir.verify
|
93
|
-
|
94
|
-
mask = 0o40700 & (~File.umask)
|
95
|
-
mask |= 0o200000 if RUBY_PLATFORM.include?("aix")
|
96
|
-
|
97
|
-
assert_equal mask, File.stat(@dest_dir).mode unless win_platform?
|
98
|
-
end
|
99
|
-
end if Gem::HAVE_OPENSSL
|
@@ -1,123 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "helper"
|
4
|
-
require "rubygems/user_interaction"
|
5
|
-
require "timeout"
|
6
|
-
|
7
|
-
class TestGemSilentUI < Gem::TestCase
|
8
|
-
def setup
|
9
|
-
super
|
10
|
-
@sui = Gem::SilentUI.new
|
11
|
-
end
|
12
|
-
|
13
|
-
def teardown
|
14
|
-
@sui.close
|
15
|
-
super
|
16
|
-
end
|
17
|
-
|
18
|
-
def test_ask
|
19
|
-
value = nil
|
20
|
-
out, err = capture_output do
|
21
|
-
use_ui @sui do
|
22
|
-
value = @sui.ask "Problem?"
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
assert_empty out, "No output"
|
27
|
-
assert_empty err, "No output"
|
28
|
-
|
29
|
-
assert_nil value, "No value"
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_ask_for_password
|
33
|
-
value = nil
|
34
|
-
out, err = capture_output do
|
35
|
-
use_ui @sui do
|
36
|
-
value = @sui.ask_for_password "Problem?"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
assert_empty out, "No output"
|
41
|
-
assert_empty err, "No output"
|
42
|
-
|
43
|
-
assert_nil value, "No value"
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_ask_yes_no
|
47
|
-
value = nil
|
48
|
-
out, err = capture_output do
|
49
|
-
use_ui @sui do
|
50
|
-
assert_raise(Gem::OperationNotSupportedError) do
|
51
|
-
@sui.ask_yes_no "Problem?"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
assert_empty out, "No output"
|
57
|
-
assert_empty err, "No output"
|
58
|
-
|
59
|
-
out, err = capture_output do
|
60
|
-
use_ui @sui do
|
61
|
-
value = @sui.ask_yes_no "Problem?", true
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
assert_empty out, "No output"
|
66
|
-
assert_empty err, "No output"
|
67
|
-
|
68
|
-
assert value, "Value is true"
|
69
|
-
|
70
|
-
out, err = capture_output do
|
71
|
-
use_ui @sui do
|
72
|
-
value = @sui.ask_yes_no "Problem?", false
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
assert_empty out, "No output"
|
77
|
-
assert_empty err, "No output"
|
78
|
-
|
79
|
-
assert_equal value, false, "Value is false"
|
80
|
-
end
|
81
|
-
|
82
|
-
def test_choose_from_list
|
83
|
-
value = nil
|
84
|
-
out, err = capture_output do
|
85
|
-
use_ui @sui do
|
86
|
-
value = @sui.choose_from_list "Problem?", %w[yes no]
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
assert_empty out, "No output"
|
91
|
-
assert_empty err, "No output"
|
92
|
-
|
93
|
-
assert_equal [nil, nil], value, "Value is nil!"
|
94
|
-
end
|
95
|
-
|
96
|
-
def test_progress_reporter
|
97
|
-
out, err = capture_output do
|
98
|
-
use_ui @sui do
|
99
|
-
@sui.progress_reporter 10, "hi"
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
assert_empty out, "No output"
|
104
|
-
assert_empty err, "No output"
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_download_reporter
|
108
|
-
out, err = capture_output do
|
109
|
-
use_ui @sui do
|
110
|
-
@sui.download_reporter.fetch "a.gem", 1024
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
assert_empty out, "No output"
|
115
|
-
assert_empty err, "No output"
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_new_without_dev_null
|
119
|
-
File.stub(:open, ->(path, mode) { raise Errno::ENOTCAPABLE if path == IO::NULL }) do
|
120
|
-
Gem::SilentUI.new
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
@@ -1,254 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "helper"
|
4
|
-
require "rubygems/source"
|
5
|
-
require "rubygems/indexer"
|
6
|
-
|
7
|
-
class TestGemSource < Gem::TestCase
|
8
|
-
def tuple(*args)
|
9
|
-
Gem::NameTuple.new(*args)
|
10
|
-
end
|
11
|
-
|
12
|
-
def setup
|
13
|
-
super
|
14
|
-
|
15
|
-
@specs = spec_fetcher do |fetcher|
|
16
|
-
fetcher.spec "a", "1.a"
|
17
|
-
fetcher.gem "a", 1
|
18
|
-
fetcher.spec "a", 2
|
19
|
-
fetcher.spec "b", 2
|
20
|
-
end
|
21
|
-
|
22
|
-
@source = Gem::Source.new(@gem_repo)
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_initialize_invalid_uri
|
26
|
-
assert_raise URI::InvalidURIError do
|
27
|
-
Gem::Source.new "git@example:a.git"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_initialize_git
|
32
|
-
repository = "git@example:a.git"
|
33
|
-
|
34
|
-
source = Gem::Source::Git.new "a", repository, nil, false
|
35
|
-
|
36
|
-
assert_equal repository, source.uri
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_cache_dir_escapes_windows_paths
|
40
|
-
uri = URI.parse("file:///C:/WINDOWS/Temp/gem_repo")
|
41
|
-
root = Gem.spec_cache_dir
|
42
|
-
cache_dir = @source.cache_dir(uri).gsub(root, "")
|
43
|
-
assert cache_dir !~ /:/, "#{cache_dir} should not contain a :"
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_dependency_resolver_set_bundler_api
|
47
|
-
response = Net::HTTPResponse.new "1.1", 200, "OK"
|
48
|
-
response.uri = URI("http://example")
|
49
|
-
|
50
|
-
@fetcher.data[@gem_repo] = response
|
51
|
-
|
52
|
-
set = @source.dependency_resolver_set
|
53
|
-
|
54
|
-
assert_kind_of Gem::Resolver::APISet, set
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_dependency_resolver_set_file_uri
|
58
|
-
Gem::Indexer.new(@tempdir).generate_index
|
59
|
-
|
60
|
-
source = Gem::Source.new "file://#{@tempdir}/"
|
61
|
-
|
62
|
-
set = source.dependency_resolver_set
|
63
|
-
|
64
|
-
assert_kind_of Gem::Resolver::IndexSet, set
|
65
|
-
end
|
66
|
-
|
67
|
-
def test_dependency_resolver_set_marshal_api
|
68
|
-
set = @source.dependency_resolver_set
|
69
|
-
|
70
|
-
assert_kind_of Gem::Resolver::IndexSet, set
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_fetch_spec
|
74
|
-
a1 = @specs["a-1"]
|
75
|
-
|
76
|
-
spec_uri = "#{@gem_repo}#{Gem::MARSHAL_SPEC_DIR}#{a1.spec_name}"
|
77
|
-
|
78
|
-
spec = @source.fetch_spec tuple("a", Gem::Version.new(1), "ruby")
|
79
|
-
assert_equal a1.full_name, spec.full_name
|
80
|
-
|
81
|
-
cache_dir = @source.cache_dir URI.parse(spec_uri)
|
82
|
-
|
83
|
-
cache_file = File.join cache_dir, a1.spec_name
|
84
|
-
|
85
|
-
assert File.exist?(cache_file)
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_fetch_spec_cached
|
89
|
-
a1 = @specs["a-1"]
|
90
|
-
|
91
|
-
spec_uri = "#{@gem_repo}/#{Gem::MARSHAL_SPEC_DIR}#{a1.spec_name}"
|
92
|
-
@fetcher.data["#{spec_uri}.rz"] = nil
|
93
|
-
|
94
|
-
cache_dir = @source.cache_dir URI.parse(spec_uri)
|
95
|
-
FileUtils.mkdir_p cache_dir
|
96
|
-
|
97
|
-
cache_file = File.join cache_dir, a1.spec_name
|
98
|
-
|
99
|
-
File.open cache_file, "wb" do |io|
|
100
|
-
Marshal.dump a1, io
|
101
|
-
end
|
102
|
-
|
103
|
-
spec = @source.fetch_spec tuple("a", Gem::Version.new(1), "ruby")
|
104
|
-
assert_equal a1.full_name, spec.full_name
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_fetch_spec_platform
|
108
|
-
specs = spec_fetcher do |fetcher|
|
109
|
-
fetcher.legacy_platform
|
110
|
-
end
|
111
|
-
|
112
|
-
spec = @source.fetch_spec tuple("pl", Gem::Version.new(1), "i386-linux")
|
113
|
-
|
114
|
-
assert_equal specs["pl-1-x86-linux"].full_name, spec.full_name
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_fetch_spec_platform_ruby
|
118
|
-
spec = @source.fetch_spec tuple("a", Gem::Version.new(1), nil)
|
119
|
-
assert_equal @specs["a-1"].full_name, spec.full_name
|
120
|
-
|
121
|
-
spec = @source.fetch_spec tuple("a", Gem::Version.new(1), "")
|
122
|
-
assert_equal @specs["a-1"].full_name, spec.full_name
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_load_specs
|
126
|
-
released = @source.load_specs(:released).map {|spec| spec.full_name }
|
127
|
-
assert_equal %W[a-2 a-1 b-2], released
|
128
|
-
|
129
|
-
cache_dir = File.join Gem.spec_cache_dir, "gems.example.com%80"
|
130
|
-
assert File.exist?(cache_dir), "#{cache_dir} does not exist"
|
131
|
-
|
132
|
-
cache_file = File.join cache_dir, "specs.#{Gem.marshal_version}"
|
133
|
-
assert File.exist?(cache_file)
|
134
|
-
end
|
135
|
-
|
136
|
-
def test_load_specs_cached
|
137
|
-
latest_specs = @source.load_specs :latest
|
138
|
-
|
139
|
-
# Make sure the cached version is actually different:
|
140
|
-
latest_specs << Gem::NameTuple.new("cached", Gem::Version.new("1.0.0"), "ruby")
|
141
|
-
|
142
|
-
@fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] = nil
|
143
|
-
@fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}"] =
|
144
|
-
" " * Marshal.dump(latest_specs).length
|
145
|
-
|
146
|
-
cache_dir = File.join Gem.spec_cache_dir, "gems.example.com%80"
|
147
|
-
|
148
|
-
FileUtils.mkdir_p cache_dir
|
149
|
-
|
150
|
-
cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}"
|
151
|
-
|
152
|
-
File.open cache_file, "wb" do |io|
|
153
|
-
Marshal.dump latest_specs, io
|
154
|
-
end
|
155
|
-
|
156
|
-
cached_specs = @source.load_specs :latest
|
157
|
-
|
158
|
-
assert_equal latest_specs, cached_specs
|
159
|
-
end
|
160
|
-
|
161
|
-
def test_load_specs_cached_empty
|
162
|
-
latest_specs = @source.load_specs :latest
|
163
|
-
|
164
|
-
# Make sure the cached version is actually different:
|
165
|
-
latest_specs << Gem::NameTuple.new("fixed", Gem::Version.new("1.0.0"), "ruby")
|
166
|
-
# Setup valid data on the 'remote'
|
167
|
-
@fetcher.data["#{@gem_repo}latest_specs.#{Gem.marshal_version}.gz"] =
|
168
|
-
util_gzip(Marshal.dump(latest_specs))
|
169
|
-
|
170
|
-
cache_dir = File.join Gem.spec_cache_dir, "gems.example.com%80"
|
171
|
-
|
172
|
-
FileUtils.mkdir_p cache_dir
|
173
|
-
|
174
|
-
cache_file = File.join cache_dir, "latest_specs.#{Gem.marshal_version}"
|
175
|
-
|
176
|
-
File.open cache_file, "wb" do |io|
|
177
|
-
# Setup invalid data in the cache:
|
178
|
-
io.write Marshal.dump(latest_specs)[0, 10]
|
179
|
-
end
|
180
|
-
|
181
|
-
fixed_specs = @source.load_specs :latest
|
182
|
-
|
183
|
-
assert_equal latest_specs, fixed_specs
|
184
|
-
end
|
185
|
-
|
186
|
-
def test_load_specs_from_unavailable_uri
|
187
|
-
src = Gem::Source.new("http://not-there.nothing")
|
188
|
-
|
189
|
-
assert_raise Gem::RemoteFetcher::FetchError do
|
190
|
-
src.load_specs :latest
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
def test_spaceship
|
195
|
-
remote = @source
|
196
|
-
specific = Gem::Source::SpecificFile.new @specs["a-1"].cache_file
|
197
|
-
installed = Gem::Source::Installed.new
|
198
|
-
local = Gem::Source::Local.new
|
199
|
-
|
200
|
-
assert_equal(0, remote.<=>(remote), "remote <=> remote")
|
201
|
-
|
202
|
-
assert_equal(-1, remote.<=>(specific), "remote <=> specific")
|
203
|
-
assert_equal(1, specific.<=>(remote), "specific <=> remote")
|
204
|
-
|
205
|
-
assert_equal(-1, remote.<=>(local), "remote <=> local")
|
206
|
-
assert_equal(1, local.<=>(remote), "local <=> remote")
|
207
|
-
|
208
|
-
assert_equal(-1, remote.<=>(installed), "remote <=> installed")
|
209
|
-
assert_equal(1, installed.<=>(remote), "installed <=> remote")
|
210
|
-
|
211
|
-
no_uri = @source.dup
|
212
|
-
no_uri.instance_variable_set :@uri, nil
|
213
|
-
|
214
|
-
assert_equal(-1, remote.<=>(no_uri), "remote <=> no_uri")
|
215
|
-
end
|
216
|
-
|
217
|
-
def test_spaceship_order_is_preserved_when_uri_differs
|
218
|
-
sourceA = Gem::Source.new "http://example.com/a"
|
219
|
-
sourceB = Gem::Source.new "http://example.com/b"
|
220
|
-
|
221
|
-
assert_equal(0, sourceA.<=>(sourceA), "sourceA <=> sourceA")
|
222
|
-
assert_equal(1, sourceA.<=>(sourceB), "sourceA <=> sourceB")
|
223
|
-
assert_equal(1, sourceB.<=>(sourceA), "sourceB <=> sourceA")
|
224
|
-
end
|
225
|
-
|
226
|
-
def test_update_cache_eh
|
227
|
-
assert @source.update_cache?
|
228
|
-
end
|
229
|
-
|
230
|
-
def test_update_cache_eh_home_nonexistent
|
231
|
-
FileUtils.rmdir Gem.user_home
|
232
|
-
|
233
|
-
refute @source.update_cache?
|
234
|
-
end
|
235
|
-
|
236
|
-
def test_typo_squatting
|
237
|
-
rubygems_source = Gem::Source.new("https://rubgems.org")
|
238
|
-
assert rubygems_source.typo_squatting?("rubygems.org")
|
239
|
-
assert rubygems_source.typo_squatting?("rubyagems.org")
|
240
|
-
assert rubygems_source.typo_squatting?("rubyasgems.org")
|
241
|
-
refute rubygems_source.typo_squatting?("rubysertgems.org")
|
242
|
-
end
|
243
|
-
|
244
|
-
def test_typo_squatting_false_positive
|
245
|
-
rubygems_source = Gem::Source.new("https://rubygems.org")
|
246
|
-
refute rubygems_source.typo_squatting?("rubygems.org")
|
247
|
-
end
|
248
|
-
|
249
|
-
def test_typo_squatting_custom_distance_threshold
|
250
|
-
rubygems_source = Gem::Source.new("https://rubgems.org")
|
251
|
-
distance_threshold = 5
|
252
|
-
assert rubygems_source.typo_squatting?("rubysertgems.org", distance_threshold)
|
253
|
-
end
|
254
|
-
end
|