rubygems-update 3.4.22 → 3.5.1
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 +105 -2
- data/Manifest.txt +46 -221
- data/README.md +1 -3
- data/bundler/CHANGELOG.md +63 -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 +254 -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 +46 -30
- 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/.document +1 -0
- 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/.document +1 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
- data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
- 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 +34 -34
- data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
- data/bundler/lib/bundler/vendor/thor/.document +1 -0
- data/bundler/lib/bundler/vendor/tsort/.document +1 -0
- data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
- data/bundler/lib/bundler/vendor/uri/.document +1 -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 +41 -32
- 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/.document +1 -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/.document +1 -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/.document +1 -0
- 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/molinillo/.document +1 -0
- 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/.document +1 -0
- 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 +50 -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,866 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "helper"
|
4
|
-
require "rubygems/commands/cert_command"
|
5
|
-
|
6
|
-
unless Gem::HAVE_OPENSSL
|
7
|
-
warn "Skipping `gem cert` tests. openssl not found."
|
8
|
-
end
|
9
|
-
|
10
|
-
if Gem.java_platform?
|
11
|
-
warn "Skipping `gem cert` tests on jruby."
|
12
|
-
end
|
13
|
-
|
14
|
-
class TestGemCommandsCertCommand < Gem::TestCase
|
15
|
-
ALTERNATE_CERT = load_cert "alternate"
|
16
|
-
EXPIRED_PUBLIC_CERT = load_cert "expired"
|
17
|
-
|
18
|
-
ALTERNATE_KEY_FILE = key_path "alternate"
|
19
|
-
PRIVATE_KEY_FILE = key_path "private"
|
20
|
-
PRIVATE_EC_KEY_FILE = key_path "private_ec"
|
21
|
-
PUBLIC_KEY_FILE = key_path "public"
|
22
|
-
|
23
|
-
ALTERNATE_CERT_FILE = cert_path "alternate"
|
24
|
-
CHILD_CERT_FILE = cert_path "child"
|
25
|
-
PUBLIC_CERT_FILE = cert_path "public"
|
26
|
-
EXPIRED_PUBLIC_CERT_FILE = cert_path "expired"
|
27
|
-
|
28
|
-
def setup
|
29
|
-
super
|
30
|
-
|
31
|
-
@cmd = Gem::Commands::CertCommand.new
|
32
|
-
|
33
|
-
@trust_dir = Gem::Security.trust_dir
|
34
|
-
|
35
|
-
@cleanup = []
|
36
|
-
end
|
37
|
-
|
38
|
-
def teardown
|
39
|
-
FileUtils.rm_f(@cleanup)
|
40
|
-
|
41
|
-
super
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_certificates_matching
|
45
|
-
@trust_dir.trust_cert PUBLIC_CERT
|
46
|
-
@trust_dir.trust_cert ALTERNATE_CERT
|
47
|
-
|
48
|
-
matches = @cmd.certificates_matching ""
|
49
|
-
|
50
|
-
# HACK: OpenSSL::X509::Certificate#== is Object#==, so do this the hard way
|
51
|
-
match = matches.next
|
52
|
-
assert_equal ALTERNATE_CERT.to_pem, match.first.to_pem
|
53
|
-
assert_equal @trust_dir.cert_path(ALTERNATE_CERT), match.last
|
54
|
-
|
55
|
-
match = matches.next
|
56
|
-
assert_equal PUBLIC_CERT.to_pem, match.first.to_pem
|
57
|
-
assert_equal @trust_dir.cert_path(PUBLIC_CERT), match.last
|
58
|
-
|
59
|
-
assert_raise StopIteration do
|
60
|
-
matches.next
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_certificates_matching_filter
|
65
|
-
@trust_dir.trust_cert PUBLIC_CERT
|
66
|
-
@trust_dir.trust_cert ALTERNATE_CERT
|
67
|
-
|
68
|
-
matches = @cmd.certificates_matching "alternate"
|
69
|
-
|
70
|
-
match = matches.next
|
71
|
-
assert_equal ALTERNATE_CERT.to_pem, match.first.to_pem
|
72
|
-
assert_equal @trust_dir.cert_path(ALTERNATE_CERT), match.last
|
73
|
-
|
74
|
-
assert_raise StopIteration do
|
75
|
-
matches.next
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_execute_add
|
80
|
-
@cmd.handle_options %W[--add #{PUBLIC_CERT_FILE}]
|
81
|
-
|
82
|
-
use_ui @ui do
|
83
|
-
@cmd.execute
|
84
|
-
end
|
85
|
-
|
86
|
-
cert_path = @trust_dir.cert_path PUBLIC_CERT
|
87
|
-
|
88
|
-
assert_path_exist cert_path
|
89
|
-
|
90
|
-
assert_equal "Added '/CN=nobody/DC=example'\n", @ui.output
|
91
|
-
assert_empty @ui.error
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_execute_add_twice
|
95
|
-
self.class.cert_path "alternate"
|
96
|
-
|
97
|
-
@cmd.handle_options %W[
|
98
|
-
--add #{PUBLIC_CERT_FILE}
|
99
|
-
--add #{ALTERNATE_CERT_FILE}
|
100
|
-
]
|
101
|
-
|
102
|
-
use_ui @ui do
|
103
|
-
@cmd.execute
|
104
|
-
end
|
105
|
-
|
106
|
-
expected = <<-EXPECTED
|
107
|
-
Added '/CN=nobody/DC=example'
|
108
|
-
Added '/CN=alternate/DC=example'
|
109
|
-
EXPECTED
|
110
|
-
|
111
|
-
assert_equal expected, @ui.output
|
112
|
-
assert_empty @ui.error
|
113
|
-
end
|
114
|
-
|
115
|
-
def test_execute_build
|
116
|
-
passphrase = "Foo bar"
|
117
|
-
|
118
|
-
@cmd.handle_options %W[--build nobody@example.com]
|
119
|
-
|
120
|
-
@build_ui = Gem::MockGemUi.new "#{passphrase}\n#{passphrase}"
|
121
|
-
|
122
|
-
use_ui @build_ui do
|
123
|
-
@cmd.execute
|
124
|
-
end
|
125
|
-
|
126
|
-
output = @build_ui.output.squeeze("\n").split "\n"
|
127
|
-
|
128
|
-
assert_equal "Passphrase for your Private Key: ",
|
129
|
-
output.shift
|
130
|
-
assert_equal "Please repeat the passphrase for your Private Key: ",
|
131
|
-
output.shift
|
132
|
-
assert_equal "Certificate: #{File.join @tempdir, "gem-public_cert.pem"}",
|
133
|
-
output.shift
|
134
|
-
assert_equal "Private Key: #{File.join @tempdir, "gem-private_key.pem"}",
|
135
|
-
output.shift
|
136
|
-
|
137
|
-
assert_equal "Don't forget to move the key file to somewhere private!",
|
138
|
-
output.shift
|
139
|
-
|
140
|
-
assert_empty output
|
141
|
-
assert_empty @build_ui.error
|
142
|
-
|
143
|
-
assert_path_exist File.join(@tempdir, "gem-private_key.pem")
|
144
|
-
assert_path_exist File.join(@tempdir, "gem-public_cert.pem")
|
145
|
-
end
|
146
|
-
|
147
|
-
def test_execute_build_key_algorithm_ec_key
|
148
|
-
passphrase = "Foo bar"
|
149
|
-
|
150
|
-
@cmd.handle_options %W[--build nobody@example.com --key-algorithm ec]
|
151
|
-
|
152
|
-
@build_ui = Gem::MockGemUi.new "#{passphrase}\n#{passphrase}"
|
153
|
-
|
154
|
-
use_ui @build_ui do
|
155
|
-
@cmd.execute
|
156
|
-
end
|
157
|
-
|
158
|
-
output = @build_ui.output.squeeze("\n").split "\n"
|
159
|
-
|
160
|
-
assert_equal "Passphrase for your Private Key: ",
|
161
|
-
output.shift
|
162
|
-
assert_equal "Please repeat the passphrase for your Private Key: ",
|
163
|
-
output.shift
|
164
|
-
assert_equal "Certificate: #{File.join @tempdir, "gem-public_cert.pem"}",
|
165
|
-
output.shift
|
166
|
-
assert_equal "Private Key: #{File.join @tempdir, "gem-private_key.pem"}",
|
167
|
-
output.shift
|
168
|
-
|
169
|
-
assert_equal "Don't forget to move the key file to somewhere private!",
|
170
|
-
output.shift
|
171
|
-
|
172
|
-
assert_empty output
|
173
|
-
assert_empty @build_ui.error
|
174
|
-
|
175
|
-
assert_path_exist File.join(@tempdir, "gem-private_key.pem")
|
176
|
-
|
177
|
-
cert_path = File.join(@tempdir, "gem-public_cert.pem")
|
178
|
-
assert_path_exist cert_path
|
179
|
-
cert = OpenSSL::X509::Certificate.new(File.read(cert_path))
|
180
|
-
assert cert.public_key.is_a? OpenSSL::PKey::EC
|
181
|
-
end
|
182
|
-
|
183
|
-
def test_execute_build_bad_email_address
|
184
|
-
passphrase = "Foo bar"
|
185
|
-
email = "nobody@"
|
186
|
-
|
187
|
-
@cmd.handle_options %W[--build #{email}]
|
188
|
-
|
189
|
-
@build_ui = Gem::MockGemUi.new "#{passphrase}\n#{passphrase}"
|
190
|
-
|
191
|
-
use_ui @build_ui do
|
192
|
-
e = assert_raise Gem::CommandLineError do
|
193
|
-
@cmd.execute
|
194
|
-
end
|
195
|
-
|
196
|
-
assert_equal "Invalid email address #{email}",
|
197
|
-
e.message
|
198
|
-
|
199
|
-
assert_path_not_exist File.join(@tempdir, "gem-private_key.pem")
|
200
|
-
assert_path_not_exist File.join(@tempdir, "gem-public_cert.pem")
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
def test_execute_build_expiration_days
|
205
|
-
passphrase = "Foo bar"
|
206
|
-
|
207
|
-
@cmd.handle_options %W[
|
208
|
-
--build nobody@example.com
|
209
|
-
--days 26
|
210
|
-
]
|
211
|
-
|
212
|
-
@build_ui = Gem::MockGemUi.new "#{passphrase}\n#{passphrase}"
|
213
|
-
|
214
|
-
use_ui @build_ui do
|
215
|
-
@cmd.execute
|
216
|
-
end
|
217
|
-
|
218
|
-
output = @build_ui.output.squeeze("\n").split "\n"
|
219
|
-
|
220
|
-
assert_equal "Passphrase for your Private Key: ",
|
221
|
-
output.shift
|
222
|
-
assert_equal "Please repeat the passphrase for your Private Key: ",
|
223
|
-
output.shift
|
224
|
-
assert_equal "Certificate: #{File.join @tempdir, "gem-public_cert.pem"}",
|
225
|
-
output.shift
|
226
|
-
assert_equal "Private Key: #{File.join @tempdir, "gem-private_key.pem"}",
|
227
|
-
output.shift
|
228
|
-
|
229
|
-
assert_equal "Don't forget to move the key file to somewhere private!",
|
230
|
-
output.shift
|
231
|
-
|
232
|
-
assert_empty output
|
233
|
-
assert_empty @build_ui.error
|
234
|
-
|
235
|
-
assert_path_exist File.join(@tempdir, "gem-private_key.pem")
|
236
|
-
assert_path_exist File.join(@tempdir, "gem-public_cert.pem")
|
237
|
-
|
238
|
-
pem = File.read("#{@tempdir}/gem-public_cert.pem")
|
239
|
-
cert = OpenSSL::X509::Certificate.new(pem)
|
240
|
-
|
241
|
-
test = (cert.not_after - cert.not_before).to_i / (24 * 60 * 60)
|
242
|
-
assert_equal(test, 26)
|
243
|
-
end
|
244
|
-
|
245
|
-
def test_execute_build_bad_passphrase_confirmation
|
246
|
-
passphrase = "Foo bar"
|
247
|
-
passphrase_confirmation = "Fu bar"
|
248
|
-
|
249
|
-
@cmd.handle_options %W[--build nobody@example.com]
|
250
|
-
|
251
|
-
@build_ui = Gem::MockGemUi.new "#{passphrase}\n#{passphrase_confirmation}"
|
252
|
-
|
253
|
-
use_ui @build_ui do
|
254
|
-
e = assert_raise Gem::CommandLineError do
|
255
|
-
@cmd.execute
|
256
|
-
end
|
257
|
-
|
258
|
-
output = @build_ui.output.squeeze("\n").split "\n"
|
259
|
-
|
260
|
-
assert_equal "Passphrase for your Private Key: ",
|
261
|
-
output.shift
|
262
|
-
assert_equal "Please repeat the passphrase for your Private Key: ",
|
263
|
-
output.shift
|
264
|
-
|
265
|
-
assert_empty output
|
266
|
-
|
267
|
-
assert_equal "Passphrase and passphrase confirmation don't match",
|
268
|
-
e.message
|
269
|
-
end
|
270
|
-
|
271
|
-
assert_path_not_exist File.join(@tempdir, "gem-private_key.pem")
|
272
|
-
assert_path_not_exist File.join(@tempdir, "gem-public_cert.pem")
|
273
|
-
end
|
274
|
-
|
275
|
-
def test_execute_build_key
|
276
|
-
@cmd.handle_options %W[
|
277
|
-
--build nobody@example.com
|
278
|
-
--private-key #{PRIVATE_KEY_FILE}
|
279
|
-
]
|
280
|
-
|
281
|
-
use_ui @ui do
|
282
|
-
@cmd.execute
|
283
|
-
end
|
284
|
-
|
285
|
-
output = @ui.output.split "\n"
|
286
|
-
|
287
|
-
assert_equal "Certificate: #{File.join @tempdir, "gem-public_cert.pem"}",
|
288
|
-
output.shift
|
289
|
-
|
290
|
-
assert_empty output
|
291
|
-
assert_empty @ui.error
|
292
|
-
|
293
|
-
assert_path_exist File.join(@tempdir, "gem-public_cert.pem")
|
294
|
-
assert_path_not_exist File.join(@tempdir, "gem-private_key.pem")
|
295
|
-
end
|
296
|
-
|
297
|
-
def test_execute_build_encrypted_key
|
298
|
-
@cmd.handle_options %W[
|
299
|
-
--build nobody@example.com
|
300
|
-
--private-key #{ENCRYPTED_PRIVATE_KEY_PATH}
|
301
|
-
]
|
302
|
-
|
303
|
-
use_ui @ui do
|
304
|
-
@cmd.execute
|
305
|
-
end
|
306
|
-
|
307
|
-
output = @ui.output.split "\n"
|
308
|
-
|
309
|
-
assert_equal "Certificate: #{File.join @tempdir, "gem-public_cert.pem"}",
|
310
|
-
output.shift
|
311
|
-
|
312
|
-
assert_empty output
|
313
|
-
assert_empty @ui.error
|
314
|
-
|
315
|
-
assert_path_exist File.join(@tempdir, "gem-public_cert.pem")
|
316
|
-
end
|
317
|
-
|
318
|
-
def test_execute_build_ec_key
|
319
|
-
@cmd.handle_options %W[
|
320
|
-
--build nobody@example.com
|
321
|
-
--private-key #{PRIVATE_EC_KEY_FILE}
|
322
|
-
]
|
323
|
-
|
324
|
-
use_ui @ui do
|
325
|
-
@cmd.execute
|
326
|
-
end
|
327
|
-
|
328
|
-
output = @ui.output.split "\n"
|
329
|
-
|
330
|
-
assert_equal "Certificate: #{File.join @tempdir, "gem-public_cert.pem"}",
|
331
|
-
output.shift
|
332
|
-
|
333
|
-
assert_empty output
|
334
|
-
assert_empty @ui.error
|
335
|
-
|
336
|
-
assert_path_exist File.join(@tempdir, "gem-public_cert.pem")
|
337
|
-
assert_path_not_exist File.join(@tempdir, "gem-private_key.pem")
|
338
|
-
end
|
339
|
-
|
340
|
-
def test_execute_certificate
|
341
|
-
use_ui @ui do
|
342
|
-
@cmd.handle_options %W[--certificate #{PUBLIC_CERT_FILE}]
|
343
|
-
end
|
344
|
-
|
345
|
-
assert_equal "", @ui.output
|
346
|
-
assert_equal "", @ui.error
|
347
|
-
|
348
|
-
assert_equal PUBLIC_CERT.to_pem, @cmd.options[:issuer_cert].to_pem
|
349
|
-
end
|
350
|
-
|
351
|
-
def test_execute_list
|
352
|
-
@trust_dir.trust_cert PUBLIC_CERT
|
353
|
-
@trust_dir.trust_cert ALTERNATE_CERT
|
354
|
-
|
355
|
-
@cmd.handle_options %W[--list]
|
356
|
-
|
357
|
-
use_ui @ui do
|
358
|
-
@cmd.execute
|
359
|
-
end
|
360
|
-
|
361
|
-
assert_equal "/CN=alternate/DC=example\n/CN=nobody/DC=example\n",
|
362
|
-
@ui.output
|
363
|
-
assert_empty @ui.error
|
364
|
-
end
|
365
|
-
|
366
|
-
def test_execute_list_filter
|
367
|
-
@trust_dir.trust_cert PUBLIC_CERT
|
368
|
-
@trust_dir.trust_cert ALTERNATE_CERT
|
369
|
-
|
370
|
-
@cmd.handle_options %W[--list nobody]
|
371
|
-
|
372
|
-
use_ui @ui do
|
373
|
-
@cmd.execute
|
374
|
-
end
|
375
|
-
|
376
|
-
assert_equal "/CN=nobody/DC=example\n", @ui.output
|
377
|
-
assert_empty @ui.error
|
378
|
-
end
|
379
|
-
|
380
|
-
def test_execute_private_key
|
381
|
-
use_ui @ui do
|
382
|
-
@cmd.send :handle_options, %W[--private-key #{PRIVATE_KEY_FILE}]
|
383
|
-
end
|
384
|
-
|
385
|
-
assert_equal "", @ui.output
|
386
|
-
assert_equal "", @ui.error
|
387
|
-
|
388
|
-
assert_equal PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
|
389
|
-
end
|
390
|
-
|
391
|
-
def test_execute_encrypted_private_key
|
392
|
-
use_ui @ui do
|
393
|
-
@cmd.send :handle_options, %W[--private-key #{ENCRYPTED_PRIVATE_KEY_PATH}]
|
394
|
-
end
|
395
|
-
|
396
|
-
assert_equal "", @ui.output
|
397
|
-
assert_equal "", @ui.error
|
398
|
-
|
399
|
-
assert_equal ENCRYPTED_PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
|
400
|
-
end
|
401
|
-
|
402
|
-
def test_execute_remove
|
403
|
-
@trust_dir.trust_cert PUBLIC_CERT
|
404
|
-
|
405
|
-
cert_path = @trust_dir.cert_path PUBLIC_CERT
|
406
|
-
|
407
|
-
assert_path_exist cert_path
|
408
|
-
|
409
|
-
@cmd.handle_options %W[--remove nobody]
|
410
|
-
|
411
|
-
use_ui @ui do
|
412
|
-
@cmd.execute
|
413
|
-
end
|
414
|
-
|
415
|
-
assert_equal "Removed '/CN=nobody/DC=example'\n", @ui.output
|
416
|
-
assert_equal "", @ui.error
|
417
|
-
|
418
|
-
assert_path_not_exist cert_path
|
419
|
-
end
|
420
|
-
|
421
|
-
def test_execute_remove_multiple
|
422
|
-
@trust_dir.trust_cert PUBLIC_CERT
|
423
|
-
@trust_dir.trust_cert ALTERNATE_CERT
|
424
|
-
|
425
|
-
public_path = @trust_dir.cert_path PUBLIC_CERT
|
426
|
-
alternate_path = @trust_dir.cert_path ALTERNATE_CERT
|
427
|
-
|
428
|
-
assert_path_exist public_path
|
429
|
-
assert_path_exist alternate_path
|
430
|
-
|
431
|
-
@cmd.handle_options %W[--remove example]
|
432
|
-
|
433
|
-
use_ui @ui do
|
434
|
-
@cmd.execute
|
435
|
-
end
|
436
|
-
|
437
|
-
expected = <<-EXPECTED
|
438
|
-
Removed '/CN=alternate/DC=example'
|
439
|
-
Removed '/CN=nobody/DC=example'
|
440
|
-
EXPECTED
|
441
|
-
|
442
|
-
assert_equal expected, @ui.output
|
443
|
-
assert_equal "", @ui.error
|
444
|
-
|
445
|
-
assert_path_not_exist public_path
|
446
|
-
assert_path_not_exist alternate_path
|
447
|
-
end
|
448
|
-
|
449
|
-
def test_execute_remove_twice
|
450
|
-
@trust_dir.trust_cert PUBLIC_CERT
|
451
|
-
@trust_dir.trust_cert ALTERNATE_CERT
|
452
|
-
|
453
|
-
public_path = @trust_dir.cert_path PUBLIC_CERT
|
454
|
-
alternate_path = @trust_dir.cert_path ALTERNATE_CERT
|
455
|
-
|
456
|
-
assert_path_exist public_path
|
457
|
-
assert_path_exist alternate_path
|
458
|
-
|
459
|
-
@cmd.handle_options %W[--remove nobody --remove alternate]
|
460
|
-
|
461
|
-
use_ui @ui do
|
462
|
-
@cmd.execute
|
463
|
-
end
|
464
|
-
|
465
|
-
expected = <<-EXPECTED
|
466
|
-
Removed '/CN=nobody/DC=example'
|
467
|
-
Removed '/CN=alternate/DC=example'
|
468
|
-
EXPECTED
|
469
|
-
|
470
|
-
assert_equal expected, @ui.output
|
471
|
-
assert_equal "", @ui.error
|
472
|
-
|
473
|
-
assert_path_not_exist public_path
|
474
|
-
assert_path_not_exist alternate_path
|
475
|
-
end
|
476
|
-
|
477
|
-
def test_execute_sign
|
478
|
-
path = File.join @tempdir, "cert.pem"
|
479
|
-
Gem::Security.write ALTERNATE_CERT, path, 0o600
|
480
|
-
|
481
|
-
assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
|
482
|
-
|
483
|
-
@cmd.handle_options %W[
|
484
|
-
--private-key #{PRIVATE_KEY_FILE}
|
485
|
-
--certificate #{PUBLIC_CERT_FILE}
|
486
|
-
|
487
|
-
--sign #{path}
|
488
|
-
]
|
489
|
-
|
490
|
-
use_ui @ui do
|
491
|
-
@cmd.execute
|
492
|
-
end
|
493
|
-
|
494
|
-
assert_equal "", @ui.output
|
495
|
-
assert_equal "", @ui.error
|
496
|
-
|
497
|
-
cert = OpenSSL::X509::Certificate.new File.read path
|
498
|
-
|
499
|
-
assert_equal "/CN=nobody/DC=example", cert.issuer.to_s
|
500
|
-
|
501
|
-
mask = 0o100600 & (~File.umask)
|
502
|
-
|
503
|
-
assert_equal mask, File.stat(path).mode unless win_platform?
|
504
|
-
end
|
505
|
-
|
506
|
-
def test_execute_sign_encrypted_key
|
507
|
-
path = File.join @tempdir, "cert.pem"
|
508
|
-
Gem::Security.write ALTERNATE_CERT, path, 0o600
|
509
|
-
|
510
|
-
assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
|
511
|
-
|
512
|
-
@cmd.handle_options %W[
|
513
|
-
--private-key #{ENCRYPTED_PRIVATE_KEY_PATH}
|
514
|
-
--certificate #{PUBLIC_CERT_FILE}
|
515
|
-
|
516
|
-
--sign #{path}
|
517
|
-
]
|
518
|
-
|
519
|
-
use_ui @ui do
|
520
|
-
@cmd.execute
|
521
|
-
end
|
522
|
-
|
523
|
-
assert_equal "", @ui.output
|
524
|
-
assert_equal "", @ui.error
|
525
|
-
|
526
|
-
cert = OpenSSL::X509::Certificate.new File.read path
|
527
|
-
|
528
|
-
assert_equal "/CN=nobody/DC=example", cert.issuer.to_s
|
529
|
-
|
530
|
-
mask = 0o100600 & (~File.umask)
|
531
|
-
|
532
|
-
assert_equal mask, File.stat(path).mode unless win_platform?
|
533
|
-
end
|
534
|
-
|
535
|
-
def test_execute_sign_default
|
536
|
-
FileUtils.mkdir_p File.join Gem.user_home, ".gem"
|
537
|
-
|
538
|
-
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
|
539
|
-
Gem::Security.write PRIVATE_KEY, private_key_path
|
540
|
-
|
541
|
-
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
|
542
|
-
Gem::Security.write PUBLIC_CERT, public_cert_path
|
543
|
-
|
544
|
-
path = File.join @tempdir, "cert.pem"
|
545
|
-
Gem::Security.write ALTERNATE_CERT, path, 0o600
|
546
|
-
|
547
|
-
assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
|
548
|
-
|
549
|
-
@cmd.handle_options %W[--sign #{path}]
|
550
|
-
|
551
|
-
use_ui @ui do
|
552
|
-
@cmd.execute
|
553
|
-
end
|
554
|
-
|
555
|
-
assert_equal "", @ui.output
|
556
|
-
assert_equal "", @ui.error
|
557
|
-
|
558
|
-
cert = OpenSSL::X509::Certificate.new File.read path
|
559
|
-
|
560
|
-
assert_equal "/CN=nobody/DC=example", cert.issuer.to_s
|
561
|
-
|
562
|
-
mask = 0o100600 & (~File.umask)
|
563
|
-
|
564
|
-
assert_equal mask, File.stat(path).mode unless win_platform?
|
565
|
-
end
|
566
|
-
|
567
|
-
def test_execute_sign_default_encrypted_key
|
568
|
-
FileUtils.mkdir_p File.join(Gem.user_home, ".gem")
|
569
|
-
|
570
|
-
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
|
571
|
-
Gem::Security.write ENCRYPTED_PRIVATE_KEY, private_key_path, 0o600, PRIVATE_KEY_PASSPHRASE
|
572
|
-
|
573
|
-
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
|
574
|
-
Gem::Security.write PUBLIC_CERT, public_cert_path
|
575
|
-
|
576
|
-
path = File.join @tempdir, "cert.pem"
|
577
|
-
Gem::Security.write ALTERNATE_CERT, path, 0o600
|
578
|
-
|
579
|
-
assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
|
580
|
-
|
581
|
-
@cmd.handle_options %W[--sign #{path}]
|
582
|
-
|
583
|
-
use_ui @ui do
|
584
|
-
@cmd.execute
|
585
|
-
end
|
586
|
-
|
587
|
-
assert_equal "", @ui.output
|
588
|
-
assert_equal "", @ui.error
|
589
|
-
|
590
|
-
cert = OpenSSL::X509::Certificate.new File.read path
|
591
|
-
|
592
|
-
assert_equal "/CN=nobody/DC=example", cert.issuer.to_s
|
593
|
-
|
594
|
-
mask = 0o100600 & (~File.umask)
|
595
|
-
|
596
|
-
assert_equal mask, File.stat(path).mode unless win_platform?
|
597
|
-
end
|
598
|
-
|
599
|
-
def test_execute_sign_no_cert
|
600
|
-
FileUtils.mkdir_p File.join Gem.user_home, ".gem"
|
601
|
-
|
602
|
-
private_key_path = File.join Gem.user_home, ".gem", "gem-private_key.pem"
|
603
|
-
Gem::Security.write PRIVATE_KEY, private_key_path
|
604
|
-
|
605
|
-
path = File.join @tempdir, "cert.pem"
|
606
|
-
Gem::Security.write ALTERNATE_CERT, path, 0o600
|
607
|
-
|
608
|
-
assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
|
609
|
-
|
610
|
-
@cmd.handle_options %W[--sign #{path}]
|
611
|
-
|
612
|
-
use_ui @ui do
|
613
|
-
assert_raise Gem::MockGemUi::TermError do
|
614
|
-
@cmd.execute
|
615
|
-
end
|
616
|
-
end
|
617
|
-
|
618
|
-
assert_equal "", @ui.output
|
619
|
-
|
620
|
-
expected = <<-EXPECTED
|
621
|
-
ERROR: --certificate not specified and ~/.gem/gem-public_cert.pem does not exist
|
622
|
-
EXPECTED
|
623
|
-
|
624
|
-
assert_equal expected, @ui.error
|
625
|
-
end
|
626
|
-
|
627
|
-
def test_execute_sign_no_key
|
628
|
-
FileUtils.mkdir_p File.join Gem.user_home, ".gem"
|
629
|
-
|
630
|
-
public_cert_path = File.join Gem.user_home, ".gem", "gem-public_cert.pem"
|
631
|
-
Gem::Security.write PUBLIC_CERT, public_cert_path
|
632
|
-
|
633
|
-
path = File.join @tempdir, "cert.pem"
|
634
|
-
Gem::Security.write ALTERNATE_CERT, path, 0o600
|
635
|
-
|
636
|
-
assert_equal "/CN=alternate/DC=example", ALTERNATE_CERT.issuer.to_s
|
637
|
-
|
638
|
-
@cmd.handle_options %W[--sign #{path}]
|
639
|
-
|
640
|
-
use_ui @ui do
|
641
|
-
assert_raise Gem::MockGemUi::TermError do
|
642
|
-
@cmd.execute
|
643
|
-
end
|
644
|
-
end
|
645
|
-
|
646
|
-
assert_equal "", @ui.output
|
647
|
-
|
648
|
-
expected = <<-EXPECTED
|
649
|
-
ERROR: --private-key not specified and ~/.gem/gem-private_key.pem does not exist
|
650
|
-
EXPECTED
|
651
|
-
|
652
|
-
assert_equal expected, @ui.error
|
653
|
-
end
|
654
|
-
|
655
|
-
def test_execute_re_sign
|
656
|
-
gem_path = File.join Gem.user_home, ".gem"
|
657
|
-
Dir.mkdir gem_path
|
658
|
-
|
659
|
-
path = File.join @tempdir, "cert.pem"
|
660
|
-
Gem::Security.write EXPIRED_PUBLIC_CERT, path, 0o600
|
661
|
-
|
662
|
-
assert_equal "/CN=nobody/DC=example", EXPIRED_PUBLIC_CERT.issuer.to_s
|
663
|
-
|
664
|
-
tmp_expired_cert_file = File.join(Dir.tmpdir, File.basename(EXPIRED_PUBLIC_CERT_FILE))
|
665
|
-
@cleanup << tmp_expired_cert_file
|
666
|
-
File.write(tmp_expired_cert_file, File.read(EXPIRED_PUBLIC_CERT_FILE))
|
667
|
-
|
668
|
-
@cmd.handle_options %W[
|
669
|
-
--private-key #{PRIVATE_KEY_FILE}
|
670
|
-
--certificate #{tmp_expired_cert_file}
|
671
|
-
--re-sign
|
672
|
-
]
|
673
|
-
|
674
|
-
use_ui @ui do
|
675
|
-
@cmd.execute
|
676
|
-
end
|
677
|
-
|
678
|
-
expected_path = File.join(gem_path, "#{File.basename(tmp_expired_cert_file)}.expired")
|
679
|
-
|
680
|
-
assert_match(
|
681
|
-
/INFO: Your certificate #{tmp_expired_cert_file} has been re-signed\nINFO: Your expired certificate will be located at: #{expected_path}\.[0-9]+/,
|
682
|
-
@ui.output
|
683
|
-
)
|
684
|
-
assert_equal "", @ui.error
|
685
|
-
end
|
686
|
-
|
687
|
-
def test_execute_re_sign_with_cert_expiration_length_days
|
688
|
-
gem_path = File.join Gem.user_home, ".gem"
|
689
|
-
Dir.mkdir gem_path
|
690
|
-
|
691
|
-
path = File.join @tempdir, "cert.pem"
|
692
|
-
Gem::Security.write EXPIRED_PUBLIC_CERT, path, 0o600
|
693
|
-
|
694
|
-
assert_equal "/CN=nobody/DC=example", EXPIRED_PUBLIC_CERT.issuer.to_s
|
695
|
-
|
696
|
-
tmp_expired_cert_file = File.join(Dir.tmpdir, File.basename(EXPIRED_PUBLIC_CERT_FILE))
|
697
|
-
@cleanup << tmp_expired_cert_file
|
698
|
-
File.write(tmp_expired_cert_file, File.read(EXPIRED_PUBLIC_CERT_FILE))
|
699
|
-
|
700
|
-
@cmd.handle_options %W[
|
701
|
-
--private-key #{PRIVATE_KEY_FILE}
|
702
|
-
--certificate #{tmp_expired_cert_file}
|
703
|
-
--re-sign
|
704
|
-
]
|
705
|
-
|
706
|
-
Gem.configuration.cert_expiration_length_days = 28
|
707
|
-
|
708
|
-
use_ui @ui do
|
709
|
-
@cmd.execute
|
710
|
-
end
|
711
|
-
|
712
|
-
re_signed_cert = OpenSSL::X509::Certificate.new(File.read(tmp_expired_cert_file))
|
713
|
-
cert_days_to_expire = (re_signed_cert.not_after - re_signed_cert.not_before).to_i / (24 * 60 * 60)
|
714
|
-
|
715
|
-
assert_equal(28, cert_days_to_expire)
|
716
|
-
assert_equal "", @ui.error
|
717
|
-
end
|
718
|
-
|
719
|
-
def test_handle_options
|
720
|
-
@cmd.handle_options %W[
|
721
|
-
--add #{PUBLIC_CERT_FILE}
|
722
|
-
--add #{ALTERNATE_CERT_FILE}
|
723
|
-
|
724
|
-
--remove nobody
|
725
|
-
--remove example
|
726
|
-
|
727
|
-
--list
|
728
|
-
--list example
|
729
|
-
|
730
|
-
--build nobody@example
|
731
|
-
--build other@example
|
732
|
-
]
|
733
|
-
|
734
|
-
assert_equal [PUBLIC_CERT.to_pem, ALTERNATE_CERT.to_pem],
|
735
|
-
@cmd.options[:add].map {|cert| cert.to_pem }
|
736
|
-
|
737
|
-
assert_equal %w[nobody example], @cmd.options[:remove]
|
738
|
-
|
739
|
-
assert_equal %w[nobody@example other@example],
|
740
|
-
@cmd.options[:build].map {|name| name.to_s }
|
741
|
-
|
742
|
-
assert_equal ["", "example"], @cmd.options[:list]
|
743
|
-
end
|
744
|
-
|
745
|
-
def test_handle_options_add_bad
|
746
|
-
nonexistent = File.join @tempdir, "nonexistent"
|
747
|
-
e = assert_raise Gem::OptionParser::InvalidArgument do
|
748
|
-
@cmd.handle_options %W[--add #{nonexistent}]
|
749
|
-
end
|
750
|
-
|
751
|
-
assert_equal "invalid argument: --add #{nonexistent}: does not exist",
|
752
|
-
e.message
|
753
|
-
|
754
|
-
bad = File.join @tempdir, "bad"
|
755
|
-
FileUtils.touch bad
|
756
|
-
|
757
|
-
e = assert_raise Gem::OptionParser::InvalidArgument do
|
758
|
-
@cmd.handle_options %W[--add #{bad}]
|
759
|
-
end
|
760
|
-
|
761
|
-
assert_equal "invalid argument: --add #{bad}: invalid X509 certificate",
|
762
|
-
e.message
|
763
|
-
end
|
764
|
-
|
765
|
-
def test_handle_options_certificate
|
766
|
-
nonexistent = File.join @tempdir, "nonexistent"
|
767
|
-
e = assert_raise Gem::OptionParser::InvalidArgument do
|
768
|
-
@cmd.handle_options %W[--certificate #{nonexistent}]
|
769
|
-
end
|
770
|
-
|
771
|
-
assert_equal "invalid argument: --certificate #{nonexistent}: does not exist",
|
772
|
-
e.message
|
773
|
-
|
774
|
-
bad = File.join @tempdir, "bad"
|
775
|
-
FileUtils.touch bad
|
776
|
-
|
777
|
-
e = assert_raise Gem::OptionParser::InvalidArgument do
|
778
|
-
@cmd.handle_options %W[--certificate #{bad}]
|
779
|
-
end
|
780
|
-
|
781
|
-
assert_equal "invalid argument: " +
|
782
|
-
"--certificate #{bad}: invalid X509 certificate",
|
783
|
-
e.message
|
784
|
-
end
|
785
|
-
|
786
|
-
def test_handle_options_key_bad
|
787
|
-
nonexistent = File.join @tempdir, "nonexistent"
|
788
|
-
e = assert_raise Gem::OptionParser::InvalidArgument do
|
789
|
-
@cmd.handle_options %W[--private-key #{nonexistent}]
|
790
|
-
end
|
791
|
-
|
792
|
-
assert_equal "invalid argument: " +
|
793
|
-
"--private-key #{nonexistent}: does not exist",
|
794
|
-
e.message
|
795
|
-
|
796
|
-
bad = File.join @tempdir, "bad"
|
797
|
-
FileUtils.touch bad
|
798
|
-
|
799
|
-
e = assert_raise Gem::OptionParser::InvalidArgument do
|
800
|
-
@cmd.handle_options %W[--private-key #{bad}]
|
801
|
-
end
|
802
|
-
|
803
|
-
assert_equal "invalid argument: --private-key #{bad}: invalid RSA, DSA, or EC key",
|
804
|
-
e.message
|
805
|
-
|
806
|
-
e = assert_raise Gem::OptionParser::InvalidArgument do
|
807
|
-
@cmd.handle_options %W[--private-key #{PUBLIC_KEY_FILE}]
|
808
|
-
end
|
809
|
-
|
810
|
-
assert_equal "invalid argument: " +
|
811
|
-
"--private-key #{PUBLIC_KEY_FILE}: private key not found",
|
812
|
-
e.message
|
813
|
-
end
|
814
|
-
|
815
|
-
def test_handle_options_sign
|
816
|
-
@cmd.handle_options %W[
|
817
|
-
--private-key #{ALTERNATE_KEY_FILE}
|
818
|
-
--private-key #{PRIVATE_KEY_FILE}
|
819
|
-
|
820
|
-
--certificate #{ALTERNATE_CERT_FILE}
|
821
|
-
--certificate #{PUBLIC_CERT_FILE}
|
822
|
-
|
823
|
-
--sign #{ALTERNATE_CERT_FILE}
|
824
|
-
--sign #{CHILD_CERT_FILE}
|
825
|
-
]
|
826
|
-
|
827
|
-
assert_equal PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
|
828
|
-
assert_equal PUBLIC_CERT.to_pem, @cmd.options[:issuer_cert].to_pem
|
829
|
-
|
830
|
-
assert_equal [ALTERNATE_CERT_FILE, CHILD_CERT_FILE], @cmd.options[:sign]
|
831
|
-
end
|
832
|
-
|
833
|
-
def test_handle_options_sign_encrypted_key
|
834
|
-
@cmd.handle_options %W[
|
835
|
-
--private-key #{ALTERNATE_KEY_FILE}
|
836
|
-
--private-key #{ENCRYPTED_PRIVATE_KEY_PATH}
|
837
|
-
|
838
|
-
--certificate #{ALTERNATE_CERT_FILE}
|
839
|
-
--certificate #{PUBLIC_CERT_FILE}
|
840
|
-
|
841
|
-
--sign #{ALTERNATE_CERT_FILE}
|
842
|
-
--sign #{CHILD_CERT_FILE}
|
843
|
-
]
|
844
|
-
|
845
|
-
assert_equal ENCRYPTED_PRIVATE_KEY.to_pem, @cmd.options[:key].to_pem
|
846
|
-
assert_equal PUBLIC_CERT.to_pem, @cmd.options[:issuer_cert].to_pem
|
847
|
-
|
848
|
-
assert_equal [ALTERNATE_CERT_FILE, CHILD_CERT_FILE], @cmd.options[:sign]
|
849
|
-
end
|
850
|
-
|
851
|
-
def test_handle_options_sign_nonexistent
|
852
|
-
nonexistent = File.join @tempdir, "nonexistent"
|
853
|
-
e = assert_raise Gem::OptionParser::InvalidArgument do
|
854
|
-
@cmd.handle_options %W[
|
855
|
-
--private-key #{ALTERNATE_KEY_FILE}
|
856
|
-
|
857
|
-
--certificate #{ALTERNATE_CERT_FILE}
|
858
|
-
|
859
|
-
--sign #{nonexistent}
|
860
|
-
]
|
861
|
-
end
|
862
|
-
|
863
|
-
assert_equal "invalid argument: --sign #{nonexistent}: does not exist",
|
864
|
-
e.message
|
865
|
-
end
|
866
|
-
end if Gem::HAVE_OPENSSL && !Gem.java_platform?
|