fix timer deschedule deadlock
[god.git] / test / test_conditions_http_response_code.rb
blob47eecbad4049e505af360310e8464d7daddac8de
1 require File.dirname(__FILE__) + '/helper'
3 class TestHttpResponseCode < Test::Unit::TestCase
4   def valid_condition
5     c = Conditions::HttpResponseCode.new()
6     c.watch = stub(:name => 'foo')
7     c.host = 'localhost'
8     c.port = 8080
9     c.path = '/'
10     c.timeout = 10
11     c.code_is = 200
12     c.times = 1
13     yield(c) if block_given?
14     c.prepare
15     c
16   end
17   
18   # valid?
19   
20   def test_valid_condition_is_valid
21     c = valid_condition
22     assert c.valid?
23   end
24   
25   def test_valid_should_return_false_if_both_code_is_and_code_is_not_are_set
26     c = valid_condition do |cc|
27       cc.code_is_not = 500
28     end
29     no_stdout { assert !c.valid? }
30   end
31   
32   def test_valid_should_return_false_if_no_host_set
33     c = valid_condition do |cc|
34       cc.host = nil
35     end
36     no_stdout { assert !c.valid? }
37   end
38   
39   # test
40   
41   def test_test_should_return_false_if_code_is_is_set_to_200_but_response_is_500
42     c = valid_condition
43     Net::HTTP.expects(:start).yields(stub(:read_timeout= => nil, :get => stub(:code => 500)))
44     assert_equal false, c.test
45   end
46   
47   def test_test_should_return_false_if_code_is_not_is_set_to_200_and_response_is_200
48     c = valid_condition do |cc|
49       cc.code_is = nil
50       cc.code_is_not = [200]
51     end
52     Net::HTTP.expects(:start).yields(stub(:read_timeout= => nil, :get => stub(:code => 200)))
53     assert_equal false, c.test
54   end
55   
56   def test_test_should_return_true_if_code_is_is_set_to_200_and_response_is_200
57     c = valid_condition
58     Net::HTTP.expects(:start).yields(stub(:read_timeout= => nil, :get => stub(:code => 200)))
59     assert_equal true, c.test
60   end
61   
62   def test_test_should_return_false_if_code_is_not_is_set_to_200_but_response_is_500
63     c = valid_condition do |cc|
64       cc.code_is = nil
65       cc.code_is_not = [200]
66     end
67     Net::HTTP.expects(:start).yields(stub(:read_timeout= => nil, :get => stub(:code => 500)))
68     assert_equal true, c.test
69   end
70   
71   def test_test_should_return_false_if_code_is_is_set_to_200_but_response_times_out
72     c = valid_condition
73     Net::HTTP.expects(:start).raises(Timeout::Error, '')
74     assert_equal false, c.test
75   end
76   
77   def test_test_should_return_true_if_code_is_not_is_set_to_200_and_response_times_out
78     c = valid_condition do |cc|
79       cc.code_is = nil
80       cc.code_is_not = [200]
81     end
82     Net::HTTP.expects(:start).raises(Timeout::Error, '')
83     assert_equal true, c.test
84   end
85   
86   def test_test_should_return_false_if_code_is_is_set_to_200_but_cant_connect
87     c = valid_condition
88     Net::HTTP.expects(:start).raises(Errno::ECONNREFUSED, '')
89     assert_equal false, c.test
90   end
91   
92   def test_test_should_return_true_if_code_is_not_is_set_to_200_and_cant_connect
93     c = valid_condition do |cc|
94       cc.code_is = nil
95       cc.code_is_not = [200]
96     end
97     Net::HTTP.expects(:start).raises(Errno::ECONNREFUSED, '')
98     assert_equal true, c.test
99   end
100   
101   def test_test_should_return_true_if_code_is_is_set_to_200_and_response_is_200_twice_for_times_two_of_two
102     c = valid_condition do |cc|
103       cc.times = [2, 2]
104     end
105     Net::HTTP.expects(:start).yields(stub(:read_timeout= => nil, :get => stub(:code => 200))).times(2)
106     assert_equal false, c.test
107     assert_equal true, c.test
108   end