Nasuta<http://www.nasuta.jp/>

2006年04月22日

ユーザコントローラのテスト(1)

セッション固定攻撃対策も実装しましたし、実際に動くかテストしてみます。

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: true

hashed_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 :users

  def setup
    @controller = UserController.new
    @request    = ActionController::TestRequest.new
    @response   = ActionController::TestResponse.new
  end

  def 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
  end

  def 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
  end

end

一番最後の 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

失敗してるテストがないのですし、セッションは新たに作られてるようです。(本当?)

posted by ふんじ at 18:44| Comment(0) | TrackBack(0) | テスト Test::Unit | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。