merged cont.
[opensuse:yast-rest-service.git] / webyast / test / unit / brute_force_protection_test.rb
1 #--
2 # Webyast Webservice framework
3 #
4 # Copyright (C) 2009, 2010 Novell, Inc. 
5 #   This library is free software; you can redistribute it and/or modify
6 # it only under the terms of version 2.1 of the GNU Lesser General Public
7 # License as published by the Free Software Foundation. 
8 #
9 #   This library is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
12 # details. 
13 #
14 #   You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software 
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 #++
18
19 require File.join(File.dirname(__FILE__),"..", "test_helper")
20
21 class BruteForceProtectionTest < ActiveSupport::TestCase
22   
23   def setup
24     @protection = BruteForceProtection.instance
25     @protection.send "initialize"
26   end
27     
28   def test_not_blocking_clean
29     assert !@protection.blocked?("test")
30   end
31
32   def test_blocked
33     BruteForceProtection.const_set "TIMEOUT_ON_FAIL", 0 #disable sleep
34     (BruteForceProtection.const_get "ATTEMPTS_TO_BLOCK").times do
35       @protection.fail_attempt "test"
36     end
37     assert @protection.blocked?("test")
38   end
39
40   def test_unblocked_after_period
41     BruteForceProtection.const_set "TIMEOUT_ON_FAIL", 0 #disable sleep
42     BruteForceProtection::ATTEMPTS_TO_BLOCK.times do
43       @protection.fail_attempt "test"
44     end
45     old_time = Time.now - (BruteForceProtection::BAN_TIMEOUT+10)
46     hash = @protection.instance_variable_get :@blocking_list
47     hash["test"][:last_fail] = old_time  # simulate old time in counter
48
49     assert !@protection.blocked?("test")
50   end
51
52 end