test_consumer.rb
257 lines
| 8.2 KiB
| text/x-ruby
|
RubyLexer
|
r2376 | require "openid/consumer" | ||
require "test/unit" | ||||
require "testutil" | ||||
module OpenID | ||||
class Consumer | ||||
module TestConsumer | ||||
class TestLastEndpoint < Test::Unit::TestCase | ||||
def test_set_get | ||||
session = {} | ||||
consumer = Consumer.new(session, nil) | ||||
consumer.send(:last_requested_endpoint=, :endpoint) | ||||
ep = consumer.send(:last_requested_endpoint) | ||||
assert_equal(:endpoint, ep) | ||||
ep = consumer.send(:last_requested_endpoint) | ||||
assert_equal(:endpoint, ep) | ||||
consumer.send(:cleanup_last_requested_endpoint) | ||||
ep = consumer.send(:last_requested_endpoint) | ||||
assert_equal(nil, ep) | ||||
end | ||||
end | ||||
class TestBegin < Test::Unit::TestCase | ||||
attr_accessor :user_input, :anonymous, :services, | ||||
:discovered_identifier, :checkid_request, :service | ||||
def setup | ||||
@discovered_identifier = 'http://discovered/' | ||||
@user_input = 'user.input' | ||||
@service = :service | ||||
@services = [@service] | ||||
@session = {} | ||||
@anonymous = false | ||||
@checkid_request = :checkid_request | ||||
end | ||||
def consumer | ||||
test = self | ||||
consumer = Consumer.new(@session, nil) | ||||
consumer.extend(InstanceDefExtension) | ||||
consumer.instance_def(:discover) do |identifier| | ||||
test.assert_equal(test.user_input, identifier) | ||||
[test.discovered_identifier, test.services] | ||||
end | ||||
consumer.instance_def(:begin_without_discovery) do | ||||
|service, sent_anonymous| | ||||
test.assert_equal(test.service, service) | ||||
test.assert_equal(test.anonymous, sent_anonymous) | ||||
test.checkid_request | ||||
end | ||||
consumer | ||||
end | ||||
def test_begin | ||||
checkid_request = consumer.begin(@user_input, @anonymous) | ||||
assert_equal(:checkid_request, checkid_request) | ||||
assert_equal(['OpenID::Consumer::DiscoveredServices::'\ | ||||
'OpenID::Consumer::'], @session.keys.sort!) | ||||
end | ||||
def test_begin_failure | ||||
@services = [] | ||||
assert_raises(DiscoveryFailure) { | ||||
consumer.begin(@user_input, @anonymous) | ||||
} | ||||
end | ||||
def test_begin_fallback | ||||
@services = [:service1, :service2] | ||||
consumer = self.consumer | ||||
@service = :service1 | ||||
consumer.begin(@user_input, @anonymous) | ||||
@service = :service2 | ||||
consumer.begin(@user_input, @anonymous) | ||||
@service = :service1 | ||||
consumer.begin(@user_input, @anonymous) | ||||
@service = :service2 | ||||
consumer.begin(@user_input, @anonymous) | ||||
end | ||||
end | ||||
class TestBeginWithoutDiscovery < Test::Unit::TestCase | ||||
attr_reader :assoc | ||||
def setup | ||||
@session = {} | ||||
@assoc = :assoc | ||||
@service = OpenIDServiceEndpoint.new | ||||
@claimed_id = 'http://claimed.id/' | ||||
@service.claimed_id = @claimed_id | ||||
@anonymous = false | ||||
end | ||||
def consumer | ||||
test = self | ||||
assoc_manager = Object.new | ||||
assoc_manager.extend(InstanceDefExtension) | ||||
assoc_manager.instance_def(:get_association) do | ||||
test.assoc | ||||
end | ||||
consumer = Consumer.new(@session, nil) | ||||
consumer.extend(InstanceDefExtension) | ||||
consumer.instance_def(:association_manager) do |service| | ||||
assoc_manager | ||||
end | ||||
consumer | ||||
end | ||||
def call_begin_without_discovery | ||||
result = consumer.begin_without_discovery(@service, @anonymous) | ||||
assert(result.instance_of?(CheckIDRequest)) | ||||
assert_equal(@anonymous, result.anonymous) | ||||
assert_equal(@service, consumer.send(:last_requested_endpoint)) | ||||
assert_equal(result.instance_variable_get(:@assoc), @assoc) | ||||
return result | ||||
end | ||||
def cid_name | ||||
Consumer.openid1_return_to_claimed_id_name | ||||
end | ||||
def nonce_name | ||||
Consumer.openid1_return_to_nonce_name | ||||
end | ||||
def test_begin_without_openid1 | ||||
result = call_begin_without_discovery | ||||
assert_equal(@claimed_id, result.return_to_args[cid_name]) | ||||
assert_equal([cid_name, nonce_name].sort!, | ||||
result.return_to_args.keys.sort!) | ||||
end | ||||
def test_begin_without_openid1_anonymous | ||||
@anonymous = true | ||||
assert_raises(ArgumentError) { | ||||
call_begin_without_discovery | ||||
} | ||||
end | ||||
def test_begin_without_openid2 | ||||
@service.type_uris = [OPENID_2_0_TYPE] | ||||
result = call_begin_without_discovery | ||||
assert(result.return_to_args.empty?) | ||||
end | ||||
def test_begin_without_openid2_anonymous | ||||
@anonymous = true | ||||
@service.type_uris = [OPENID_2_0_TYPE] | ||||
result = call_begin_without_discovery | ||||
assert(result.return_to_args.empty?) | ||||
end | ||||
end | ||||
class TestComplete < Test::Unit::TestCase | ||||
def setup | ||||
@session = {} | ||||
@consumer = Consumer.new(@session, nil) | ||||
end | ||||
def test_bad_mode | ||||
response = @consumer.complete({'openid.ns' => OPENID2_NS, | ||||
'openid.mode' => 'bad'}, nil) | ||||
assert_equal(FAILURE, response.status) | ||||
end | ||||
def test_missing_mode | ||||
response = @consumer.complete({'openid.ns' => OPENID2_NS}, nil) | ||||
assert_equal(FAILURE, response.status) | ||||
end | ||||
def test_cancel | ||||
response = @consumer.complete({'openid.mode' => 'cancel'}, nil) | ||||
assert_equal(CANCEL, response.status) | ||||
end | ||||
def test_setup_needed_openid1 | ||||
response = @consumer.complete({'openid.mode' => 'setup_needed'}, nil) | ||||
assert_equal(FAILURE, response.status) | ||||
end | ||||
def test_setup_needed_openid2 | ||||
args = {'openid.ns' => OPENID2_NS, 'openid.mode' => 'setup_needed'} | ||||
response = @consumer.complete(args, nil) | ||||
assert_equal(SETUP_NEEDED, response.status) | ||||
end | ||||
def test_idres_setup_needed_openid1 | ||||
setup_url = 'http://setup.url/' | ||||
args = { | ||||
'openid.user_setup_url' => setup_url, | ||||
'openid.mode' => 'id_res', | ||||
} | ||||
response = @consumer.complete(args, nil) | ||||
assert_equal(SETUP_NEEDED, response.status) | ||||
end | ||||
def test_error | ||||
contact = 'me' | ||||
reference = 'thing thing' | ||||
args = { | ||||
'openid.mode' => 'error', | ||||
'openid.contact' => contact, | ||||
'openid.reference' => reference, | ||||
} | ||||
response = @consumer.complete(args, nil) | ||||
assert_equal(FAILURE, response.status) | ||||
assert_equal(contact, response.contact) | ||||
assert_equal(reference, response.reference) | ||||
args['openid.ns'] = OPENID2_NS | ||||
response = @consumer.complete(args, nil) | ||||
assert_equal(FAILURE, response.status) | ||||
assert_equal(contact, response.contact) | ||||
assert_equal(reference, response.reference) | ||||
end | ||||
def test_idres_openid1 | ||||
args = { | ||||
'openid.mode' => 'id_res', | ||||
} | ||||
endpoint = OpenIDServiceEndpoint.new | ||||
endpoint.claimed_id = :test_claimed_id | ||||
idres = Object.new | ||||
idres.extend(InstanceDefExtension) | ||||
idres.instance_def(:endpoint){endpoint} | ||||
idres.instance_def(:signed_fields){:test_signed_fields} | ||||
test = self | ||||
@consumer.extend(InstanceDefExtension) | ||||
@consumer.instance_def(:handle_idres) {|message, return_to| | ||||
test.assert_equal(args, message.to_post_args) | ||||
test.assert_equal(:test_return_to, return_to) | ||||
idres | ||||
} | ||||
response = @consumer.complete(args, :test_return_to) | ||||
assert_equal(SUCCESS, response.status, response.message) | ||||
assert_equal(:test_claimed_id, response.identity_url) | ||||
assert_equal(endpoint, response.endpoint) | ||||
error_message = "In Soviet Russia, id_res handles you!" | ||||
@consumer.instance_def(:handle_idres) {|message, return_to| | ||||
raise ProtocolError, error_message | ||||
} | ||||
response = @consumer.complete(args, :test_return_to) | ||||
assert_equal(FAILURE, response.status) | ||||
assert_equal(error_message, response.message) | ||||
end | ||||
end | ||||
end | ||||
end | ||||
end | ||||