セッション固定攻撃対策も実装しましたし、実際に動くかテストしてみます。
fixtureにあらかじめテストデータをセットします。
hashed_true:
id: 3
hashed_email: <%= Digest::SHA1.hexdigest('admin@email.jp') %>
hashed_passwd: <%= Digest::SHA1.hexdigest('_admin_passwd_') %>
name: Administrator
lastlogin_at: "2006-04-20 11:11:11"
status: truehashed_false:
id: 4
hashed_email: <%= Digest::SHA1.hexdigest('apply@email.jp') %>
hashed_passwd: <%= Digest::SHA1.hexdigest('_apply_passwd_') %>
name: Administrator
lastlogin_at: "2006-04-20 22:22:22"
status: false
test/functional/user_controller_test.rbにテストメソッドを追加します。
class UserControllerTest < Test::Unit::TestCase
fixtures :usersdef setup
@controller = UserController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
enddef test_login_form
get :login_form
assert_response :success
end# ログインしていないユーザのログイン
def test_logout_without_user
get :logout
assert_redirected_to :action => 'login_form'
assert_equal 'please login' , flash[:notice]
end# 無効なユーザによるログイン
def test_login_with_invalid_user
post :login , :user => {:email => 'invalid_email', :password => 'invalid_pw'}
assert_redirected_to :action => 'login_form'
assert_equal 'invalid login !' , flash[:notice]
end# status がfalseなユーザによるログイン
def test_login_with_false_status
post :login , :user => {:email => 'apply@email.jp', :password => '_apply_passwd_'}
assert_redirected_to :action => 'login_form'
assert_equal 'invalid login !' , flash[:notice]
end# 有効なユーザによるログイン
def test_login_with_valid_user
post :login , :user => {:email => 'admin@email.jp', :password => '_admin_passwd_'}
assert_response :success
assert_not_nil(session[:user_id])
user = User.find(session[:user_id])
assert_equal 'Administrator', user.name
enddef test_guard_session_fixation_attack
old_session_id = session.object_id
post :login , :user => {:email => 'admin@email.jp', :password => '_admin_passwd_'}
assert_response :success
assert_not_equal old_session_id, session.object_id
endend
一番最後の test_guard_session_fixation_attack でログインする前のセッションオブジェクトとログイン後のセッションのオブジェクトのIDを比較して異なっているか調べています。
テストを実行してみます。
colinux:~/ror/test/test/functional# ruby user_controller_test.rb
Loaded suite user_controller_test
Started
......
Finished in 4.944607 seconds.6 tests, 15 assertions, 0 failures, 0 errors
失敗してるテストがないのですし、セッションは新たに作られてるようです。(本当?)