diff options
author | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-12-01 11:01:00 +0000 |
---|---|---|
committer | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-12-01 11:01:00 +0000 |
commit | 7a46a3b94121339cbead211c4497142bee82fddb (patch) | |
tree | bc6e9f11a1b60f8c4258e4780b18f952b0a8ec35 /test/rubygems | |
parent | 5cae104e51be9cbf524b7d953b33d0909c46d006 (diff) |
Merge rubygems-3.0.0.beta3.
* [GSoC] Multi-factor feature for RubyGems https://github.com/rubygems/rubygems/pull/2369
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66118 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/rubygems')
-rw-r--r-- | test/rubygems/test_gem_commands_owner_command.rb | 35 | ||||
-rw-r--r-- | test/rubygems/test_gem_commands_push_command.rb | 39 | ||||
-rw-r--r-- | test/rubygems/test_gem_gemcutter_utilities.rb | 32 |
3 files changed, 104 insertions, 2 deletions
diff --git a/test/rubygems/test_gem_commands_owner_command.rb b/test/rubygems/test_gem_commands_owner_command.rb index 1f9a2efbca..071079c0dd 100644 --- a/test/rubygems/test_gem_commands_owner_command.rb +++ b/test/rubygems/test_gem_commands_owner_command.rb @@ -235,4 +235,39 @@ EOF assert_equal "Removing missing@example: #{response}\n", @stub_ui.output end + def test_otp_verified_success + response_fail = "You have enabled multifactor authentication but your request doesn't have the correct OTP code. Please check it and retry." + response_success = "Owner added successfully." + + @stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = proc do + @call_count ||= 0 + (@call_count += 1).odd? ? [response_fail, 401, 'Unauthorized'] : [response_success, 200, 'OK'] + end + + @otp_ui = Gem::MockGemUi.new "111111\n" + use_ui @otp_ui do + @cmd.add_owners("freewill", ["user-new1@example.com"]) + end + + assert_match 'You have enabled multi-factor authentication. Please enter OTP code.', @otp_ui.output + assert_match 'Code: ', @otp_ui.output + assert_match response_success, @otp_ui.output + assert_equal '111111', @stub_fetcher.last_request['OTP'] + end + + def test_otp_verified_failure + response = "You have enabled multifactor authentication but your request doesn't have the correct OTP code. Please check it and retry." + @stub_fetcher.data["#{Gem.host}/api/v1/gems/freewill/owners"] = [response, 401, 'Unauthorized'] + + @otp_ui = Gem::MockGemUi.new "111111\n" + use_ui @otp_ui do + @cmd.add_owners("freewill", ["user-new1@example.com"]) + end + + assert_match response, @otp_ui.output + assert_match 'You have enabled multi-factor authentication. Please enter OTP code.', @otp_ui.output + assert_match 'Code: ', @otp_ui.output + assert_equal '111111', @stub_fetcher.last_request['OTP'] + end + end diff --git a/test/rubygems/test_gem_commands_push_command.rb b/test/rubygems/test_gem_commands_push_command.rb index ccc46d4f45..9d2185dcd9 100644 --- a/test/rubygems/test_gem_commands_push_command.rb +++ b/test/rubygems/test_gem_commands_push_command.rb @@ -161,6 +161,7 @@ class TestGemCommandsPushCommand < Gem::TestCase @response = "Successfully registered gem: freebird (1.0.1)" @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK'] + send_battery end @@ -230,6 +231,7 @@ class TestGemCommandsPushCommand < Gem::TestCase spec.metadata['allowed_push_host'] = "https://privategemserver.example" end + response = %{ERROR: "#{@host}" is not allowed by the gemspec, which only allows "https://privategemserver.example"} assert_raises Gem::MockGemUi::TermError do @@ -347,4 +349,41 @@ class TestGemCommandsPushCommand < Gem::TestCase @fetcher.last_request["Authorization"] end + def test_otp_verified_success + response_fail = "You have enabled multifactor authentication but your request doesn't have the correct OTP code. Please check it and retry." + response_success = 'Successfully registered gem: freewill (1.0.0)' + + @fetcher.data["#{Gem.host}/api/v1/gems"] = proc do + @call_count ||= 0 + (@call_count += 1).odd? ? [response_fail, 401, 'Unauthorized'] : [response_success, 200, 'OK'] + end + + @otp_ui = Gem::MockGemUi.new "111111\n" + use_ui @otp_ui do + @cmd.send_gem(@path) + end + + assert_match 'You have enabled multi-factor authentication. Please enter OTP code.', @otp_ui.output + assert_match 'Code: ', @otp_ui.output + assert_match response_success, @otp_ui.output + assert_equal '111111', @fetcher.last_request['OTP'] + end + + def test_otp_verified_failure + response = "You have enabled multifactor authentication but your request doesn't have the correct OTP code. Please check it and retry." + @fetcher.data["#{Gem.host}/api/v1/gems"] = [response, 401, 'Unauthorized'] + + @otp_ui = Gem::MockGemUi.new "111111\n" + assert_raises Gem::MockGemUi::TermError do + use_ui @otp_ui do + @cmd.send_gem(@path) + end + end + + assert_match response, @otp_ui.output + assert_match 'You have enabled multi-factor authentication. Please enter OTP code.', @otp_ui.output + assert_match 'Code: ', @otp_ui.output + assert_equal '111111', @fetcher.last_request['OTP'] + end + end diff --git a/test/rubygems/test_gem_gemcutter_utilities.rb b/test/rubygems/test_gem_gemcutter_utilities.rb index f0d2428391..4315090a3d 100644 --- a/test/rubygems/test_gem_gemcutter_utilities.rb +++ b/test/rubygems/test_gem_gemcutter_utilities.rb @@ -187,7 +187,35 @@ class TestGemGemcutterUtilities < Gem::TestCase assert_match %r{Access Denied.}, @sign_in_ui.output end - def util_sign_in(response, host = nil, args = []) + def test_sign_in_with_correct_otp_code + api_key = 'a5fdbb6ba150cbb83aad2bb2fede64cf040453903' + response_fail = "You have enabled multifactor authentication but your request doesn't have the correct OTP code. Please check it and retry." + + util_sign_in(proc do + @call_count ||= 0 + (@call_count += 1).odd? ? [response_fail, 401, 'Unauthorized'] : [api_key, 200, 'OK'] + end, nil, [], "111111\n") + + assert_match 'You have enabled multi-factor authentication. Please enter OTP code.', @sign_in_ui.output + assert_match 'Code: ', @sign_in_ui.output + assert_match 'Signed in.', @sign_in_ui.output + assert_equal '111111', @fetcher.last_request['OTP'] + end + + def test_sign_in_with_incorrect_otp_code + response = "You have enabled multifactor authentication but your request doesn't have the correct OTP code. Please check it and retry." + + assert_raises Gem::MockGemUi::TermError do + util_sign_in [response, 401, 'Unauthorized'], nil, [], "111111\n" + end + + assert_match 'You have enabled multi-factor authentication. Please enter OTP code.', @sign_in_ui.output + assert_match 'Code: ', @sign_in_ui.output + assert_match response, @sign_in_ui.output + assert_equal '111111', @fetcher.last_request['OTP'] + end + + def util_sign_in(response, host = nil, args = [], extra_input = '') email = 'you@example.com' password = 'secret' @@ -201,7 +229,7 @@ class TestGemGemcutterUtilities < Gem::TestCase @fetcher.data["#{host}/api/v1/api_key"] = response Gem::RemoteFetcher.fetcher = @fetcher - @sign_in_ui = Gem::MockGemUi.new "#{email}\n#{password}\n" + @sign_in_ui = Gem::MockGemUi.new("#{email}\n#{password}\n" + extra_input) use_ui @sign_in_ui do if args.length > 0 |