annotate .svn/pristine/2d/2d84dac3d9e6ebc1cf62421fe475b32d70661abb.svn-base @ 1327:287f201c2802 redmine-2.2-integration

Add italic
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Wed, 19 Jun 2013 20:56:22 +0100
parents cbb26bc654de
children
rev   line source
Chris@909 1 require File.dirname(__FILE__) + '/test_helper'
Chris@909 2 require File.dirname(__FILE__) + '/../lib/open_id_authentication/mem_cache_store'
Chris@909 3
Chris@909 4 # Mock MemCacheStore with MemoryStore for testing
Chris@909 5 class OpenIdAuthentication::MemCacheStore < OpenID::Store::Interface
Chris@909 6 def initialize(*addresses)
Chris@909 7 @connection = ActiveSupport::Cache::MemoryStore.new
Chris@909 8 end
Chris@909 9 end
Chris@909 10
Chris@909 11 class MemCacheStoreTest < Test::Unit::TestCase
Chris@909 12 ALLOWED_HANDLE = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
Chris@909 13
Chris@909 14 def setup
Chris@909 15 @store = OpenIdAuthentication::MemCacheStore.new
Chris@909 16 end
Chris@909 17
Chris@909 18 def test_store
Chris@909 19 server_url = "http://www.myopenid.com/openid"
Chris@909 20 assoc = gen_assoc(0)
Chris@909 21
Chris@909 22 # Make sure that a missing association returns no result
Chris@909 23 assert_retrieve(server_url)
Chris@909 24
Chris@909 25 # Check that after storage, getting returns the same result
Chris@909 26 @store.store_association(server_url, assoc)
Chris@909 27 assert_retrieve(server_url, nil, assoc)
Chris@909 28
Chris@909 29 # more than once
Chris@909 30 assert_retrieve(server_url, nil, assoc)
Chris@909 31
Chris@909 32 # Storing more than once has no ill effect
Chris@909 33 @store.store_association(server_url, assoc)
Chris@909 34 assert_retrieve(server_url, nil, assoc)
Chris@909 35
Chris@909 36 # Removing an association that does not exist returns not present
Chris@909 37 assert_remove(server_url, assoc.handle + 'x', false)
Chris@909 38
Chris@909 39 # Removing an association that does not exist returns not present
Chris@909 40 assert_remove(server_url + 'x', assoc.handle, false)
Chris@909 41
Chris@909 42 # Removing an association that is present returns present
Chris@909 43 assert_remove(server_url, assoc.handle, true)
Chris@909 44
Chris@909 45 # but not present on subsequent calls
Chris@909 46 assert_remove(server_url, assoc.handle, false)
Chris@909 47
Chris@909 48 # Put assoc back in the store
Chris@909 49 @store.store_association(server_url, assoc)
Chris@909 50
Chris@909 51 # More recent and expires after assoc
Chris@909 52 assoc2 = gen_assoc(1)
Chris@909 53 @store.store_association(server_url, assoc2)
Chris@909 54
Chris@909 55 # After storing an association with a different handle, but the
Chris@909 56 # same server_url, the handle with the later expiration is returned.
Chris@909 57 assert_retrieve(server_url, nil, assoc2)
Chris@909 58
Chris@909 59 # We can still retrieve the older association
Chris@909 60 assert_retrieve(server_url, assoc.handle, assoc)
Chris@909 61
Chris@909 62 # Plus we can retrieve the association with the later expiration
Chris@909 63 # explicitly
Chris@909 64 assert_retrieve(server_url, assoc2.handle, assoc2)
Chris@909 65
Chris@909 66 # More recent, and expires earlier than assoc2 or assoc. Make sure
Chris@909 67 # that we're picking the one with the latest issued date and not
Chris@909 68 # taking into account the expiration.
Chris@909 69 assoc3 = gen_assoc(2, 100)
Chris@909 70 @store.store_association(server_url, assoc3)
Chris@909 71
Chris@909 72 assert_retrieve(server_url, nil, assoc3)
Chris@909 73 assert_retrieve(server_url, assoc.handle, assoc)
Chris@909 74 assert_retrieve(server_url, assoc2.handle, assoc2)
Chris@909 75 assert_retrieve(server_url, assoc3.handle, assoc3)
Chris@909 76
Chris@909 77 assert_remove(server_url, assoc2.handle, true)
Chris@909 78
Chris@909 79 assert_retrieve(server_url, nil, assoc3)
Chris@909 80 assert_retrieve(server_url, assoc.handle, assoc)
Chris@909 81 assert_retrieve(server_url, assoc2.handle, nil)
Chris@909 82 assert_retrieve(server_url, assoc3.handle, assoc3)
Chris@909 83
Chris@909 84 assert_remove(server_url, assoc2.handle, false)
Chris@909 85 assert_remove(server_url, assoc3.handle, true)
Chris@909 86
Chris@909 87 assert_retrieve(server_url, nil, assoc)
Chris@909 88 assert_retrieve(server_url, assoc.handle, assoc)
Chris@909 89 assert_retrieve(server_url, assoc2.handle, nil)
Chris@909 90 assert_retrieve(server_url, assoc3.handle, nil)
Chris@909 91
Chris@909 92 assert_remove(server_url, assoc2.handle, false)
Chris@909 93 assert_remove(server_url, assoc.handle, true)
Chris@909 94 assert_remove(server_url, assoc3.handle, false)
Chris@909 95
Chris@909 96 assert_retrieve(server_url, nil, nil)
Chris@909 97 assert_retrieve(server_url, assoc.handle, nil)
Chris@909 98 assert_retrieve(server_url, assoc2.handle, nil)
Chris@909 99 assert_retrieve(server_url, assoc3.handle, nil)
Chris@909 100
Chris@909 101 assert_remove(server_url, assoc2.handle, false)
Chris@909 102 assert_remove(server_url, assoc.handle, false)
Chris@909 103 assert_remove(server_url, assoc3.handle, false)
Chris@909 104 end
Chris@909 105
Chris@909 106 def test_nonce
Chris@909 107 server_url = "http://www.myopenid.com/openid"
Chris@909 108
Chris@909 109 [server_url, ''].each do |url|
Chris@909 110 nonce1 = OpenID::Nonce::mk_nonce
Chris@909 111
Chris@909 112 assert_nonce(nonce1, true, url, "#{url}: nonce allowed by default")
Chris@909 113 assert_nonce(nonce1, false, url, "#{url}: nonce not allowed twice")
Chris@909 114 assert_nonce(nonce1, false, url, "#{url}: nonce not allowed third time")
Chris@909 115
Chris@909 116 # old nonces shouldn't pass
Chris@909 117 old_nonce = OpenID::Nonce::mk_nonce(3600)
Chris@909 118 assert_nonce(old_nonce, false, url, "Old nonce #{old_nonce.inspect} passed")
Chris@909 119 end
Chris@909 120 end
Chris@909 121
Chris@909 122 private
Chris@909 123 def gen_assoc(issued, lifetime = 600)
Chris@909 124 secret = OpenID::CryptUtil.random_string(20, nil)
Chris@909 125 handle = OpenID::CryptUtil.random_string(128, ALLOWED_HANDLE)
Chris@909 126 OpenID::Association.new(handle, secret, Time.now + issued, lifetime, 'HMAC-SHA1')
Chris@909 127 end
Chris@909 128
Chris@909 129 def assert_retrieve(url, handle = nil, expected = nil)
Chris@909 130 assoc = @store.get_association(url, handle)
Chris@909 131
Chris@909 132 if expected.nil?
Chris@909 133 assert_nil(assoc)
Chris@909 134 else
Chris@909 135 assert_equal(expected, assoc)
Chris@909 136 assert_equal(expected.handle, assoc.handle)
Chris@909 137 assert_equal(expected.secret, assoc.secret)
Chris@909 138 end
Chris@909 139 end
Chris@909 140
Chris@909 141 def assert_remove(url, handle, expected)
Chris@909 142 present = @store.remove_association(url, handle)
Chris@909 143 assert_equal(expected, present)
Chris@909 144 end
Chris@909 145
Chris@909 146 def assert_nonce(nonce, expected, server_url, msg = "")
Chris@909 147 stamp, salt = OpenID::Nonce::split_nonce(nonce)
Chris@909 148 actual = @store.use_nonce(server_url, stamp, salt)
Chris@909 149 assert_equal(expected, actual, msg)
Chris@909 150 end
Chris@909 151 end