check_passenger 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,29 @@
1
+ module CheckPassenger
2
+ class PassengerStatus
3
+ class << self
4
+ attr_accessor :path
5
+
6
+ def run
7
+ `#{passenger_status_executable_path}`
8
+ end
9
+
10
+ private
11
+
12
+ def passenger_status_executable_path
13
+ command = if @path and File.exist?(@path)
14
+ if File.directory?(@path)
15
+ File.expand_path('passenger-status', @path)
16
+ else
17
+ @path
18
+ end
19
+ else
20
+ `which passenger-status`.strip
21
+ end
22
+
23
+ raise Errno::ENOENT, 'Cannot find passenger-status' unless File.executable?(command)
24
+
25
+ command
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,10 @@
1
+ module CheckPassenger
2
+ class StatusOutputError < RuntimeError
3
+ attr_accessor :passenger_status_output
4
+
5
+ def initialize(message, passenger_status_output = nil)
6
+ @passenger_status_output = passenger_status_output
7
+ super(message)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ module CheckPassenger
2
+ VERSION = "0.1"
3
+ end
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ puts DATA.read
4
+
5
+ __END__
6
+ Version : 4.0.46
7
+ Date : 2014-09-11 00:57:57 +0200
8
+ Instance: 32028
9
+ ----------- General information -----------
10
+ Max pool size : 40
11
+ Processes : 26
12
+ Requests in top-level queue : 0
13
+
14
+ ----------- Application groups -----------
15
+ /home/application_1/Site#default:
16
+ App root: /home/application_1/Site
17
+ Requests in queue: 0
18
+ * PID: 12396 Sessions: 0 Processed: 13322 Uptime: 19h 12m 52s
19
+ CPU: 0% Memory : 153M Last used: 51m 29s
20
+ * PID: 12404 Sessions: 0 Processed: 11694 Uptime: 19h 12m 52s
21
+ CPU: 0% Memory : 152M Last used: 27s ago
22
+ * PID: 12411 Sessions: 0 Processed: 2487 Uptime: 19h 12m 52s
23
+ CPU: 0% Memory : 128M Last used: 5m 56s
24
+ * PID: 12418 Sessions: 0 Processed: 16516 Uptime: 19h 12m 52s
25
+ CPU: 1% Memory : 159M Last used: 51m 29s
26
+ * PID: 12425 Sessions: 0 Processed: 9004 Uptime: 19h 12m 52s
27
+ CPU: 0% Memory : 150M Last used: 5m 56s
28
+ * PID: 12432 Sessions: 0 Processed: 9733 Uptime: 19h 12m 52s
29
+ CPU: 0% Memory : 137M Last used: 50m 37s
30
+ * PID: 12439 Sessions: 0 Processed: 15867 Uptime: 19h 12m 52s
31
+ CPU: 1% Memory : 269M Last used: 51m 29s
32
+ * PID: 12450 Sessions: 0 Processed: 21723 Uptime: 19h 12m 52s
33
+ CPU: 1% Memory : 172M Last used: 50m 37s
34
+ * PID: 12457 Sessions: 0 Processed: 27773 Uptime: 19h 12m 52s
35
+ CPU: 2% Memory : 183M Last used: 1s ago
36
+ * PID: 12464 Sessions: 0 Processed: 25461 Uptime: 19h 12m 52s
37
+ CPU: 1% Memory : 169M Last used: 50m 37s
38
+ * PID: 24260 Sessions: 0 Processed: 13129 Uptime: 7h 26m 53s
39
+ CPU: 2% Memory : 179M Last used: 12m 0s a
40
+ * PID: 27767 Sessions: 0 Processed: 3383 Uptime: 1h 3m 8s
41
+ CPU: 5% Memory : 157M Last used: 1s ago
42
+
43
+ /home/application_2/Site#default:
44
+ App root: /home/application_2/Site
45
+ Requests in queue: 0
46
+ * PID: 26712 Sessions: 0 Processed: 184 Uptime: 21h 36m 36s
47
+ CPU: 0% Memory : 26M Last used: 1m 11s
48
+ * PID: 26721 Sessions: 0 Processed: 0 Uptime: 21h 36m 35s
49
+ CPU: 0% Memory : 13M Last used: 21h 36m
50
+ * PID: 26728 Sessions: 0 Processed: 0 Uptime: 21h 36m 35s
51
+ CPU: 0% Memory : 13M Last used: 21h 36m
52
+ * PID: 26736 Sessions: 0 Processed: 0 Uptime: 21h 36m 35s
53
+ CPU: 0% Memory : 13M Last used: 21h 36m
54
+
55
+ /home/application_3/Site#default:
56
+ App root: /home/application_3/Site
57
+ Requests in queue: 0
58
+ * PID: 17507 Sessions: 0 Processed: 2141 Uptime: 21h 43m 33s
59
+ CPU: 0% Memory : 242M Last used: 5h 51m
60
+ * PID: 17514 Sessions: 0 Processed: 5967 Uptime: 21h 43m 33s
61
+ CPU: 0% Memory : 703M Last used: 29s ago
62
+ * PID: 17527 Sessions: 0 Processed: 6859 Uptime: 21h 43m 33s
63
+ CPU: 0% Memory : 790M Last used: 18m 23s
64
+ * PID: 17534 Sessions: 0 Processed: 4646 Uptime: 21h 43m 33s
65
+ CPU: 0% Memory : 561M Last used: 5h 51m
66
+ * PID: 17541 Sessions: 0 Processed: 3030 Uptime: 21h 43m 33s
67
+ CPU: 0% Memory : 401M Last used: 12m 15s
68
+ * PID: 17548 Sessions: 0 Processed: 1277 Uptime: 21h 43m 33s
69
+ CPU: 0% Memory : 240M Last used: 5h 51m
70
+
71
+ /home/application_4/Site#default:
72
+ App root: /home/application_4/Site
73
+ Requests in queue: 0
74
+ * PID: 32383 Sessions: 0 Processed: 2182 Uptime: 2h 7m 9s
75
+ CPU: 0% Memory : 76M Last used: 2s ago
76
+ * PID: 23605 Sessions: 0 Processed: 609 Uptime: 1h 7m 25s
77
+ CPU: 0% Memory : 61M Last used: 1m 7s ago
78
+ * PID: 13173 Sessions: 0 Processed: 417 Uptime: 44m 7s
79
+ CPU: 0% Memory : 60M Last used: 1m 7s ago
80
+ * PID: 24379 Sessions: 0 Processed: 275 Uptime: 32m 7s
81
+ CPU: 0% Memory : 59M Last used: 0s ago
82
+
@@ -0,0 +1,76 @@
1
+ Version : 4.0.46
2
+ Date : 2014-09-11 00:57:57 +0200
3
+ Instance: 32028
4
+ ----------- General information -----------
5
+ Max pool size : 40
6
+ Processes : 26
7
+ Requests in top-level queue : 0
8
+
9
+ ----------- Application groups -----------
10
+ /home/application_1/Site#default:
11
+ App root: /home/application_1/Site
12
+ Requests in queue: 0
13
+ * PID: 12396 Sessions: 0 Processed: 13322 Uptime: 19h 12m 52s
14
+ CPU: 0% Memory : 153M Last used: 51m 29s
15
+ * PID: 12404 Sessions: 0 Processed: 11694 Uptime: 19h 12m 52s
16
+ CPU: 0% Memory : 152M Last used: 27s ago
17
+ * PID: 12411 Sessions: 0 Processed: 2487 Uptime: 19h 12m 52s
18
+ CPU: 0% Memory : 128M Last used: 5m 56s
19
+ * PID: 12418 Sessions: 0 Processed: 16516 Uptime: 19h 12m 52s
20
+ CPU: 1% Memory : 159M Last used: 51m 29s
21
+ * PID: 12425 Sessions: 0 Processed: 9004 Uptime: 19h 12m 52s
22
+ CPU: 0% Memory : 150M Last used: 5m 56s
23
+ * PID: 12432 Sessions: 0 Processed: 9733 Uptime: 19h 12m 52s
24
+ CPU: 0% Memory : 137M Last used: 50m 37s
25
+ * PID: 12439 Sessions: 0 Processed: 15867 Uptime: 19h 12m 52s
26
+ CPU: 1% Memory : 269M Last used: 51m 29s
27
+ * PID: 12450 Sessions: 0 Processed: 21723 Uptime: 19h 12m 52s
28
+ CPU: 1% Memory : 172M Last used: 50m 37s
29
+ * PID: 12457 Sessions: 0 Processed: 27773 Uptime: 19h 12m 52s
30
+ CPU: 2% Memory : 183M Last used: 1s ago
31
+ * PID: 12464 Sessions: 0 Processed: 25461 Uptime: 19h 12m 52s
32
+ CPU: 1% Memory : 169M Last used: 50m 37s
33
+ * PID: 24260 Sessions: 0 Processed: 13129 Uptime: 7h 26m 53s
34
+ CPU: 2% Memory : 179M Last used: 12m 0s a
35
+ * PID: 27767 Sessions: 0 Processed: 3383 Uptime: 1h 3m 8s
36
+ CPU: 5% Memory : 157M Last used: 1s ago
37
+
38
+ /home/application_2/Site#default:
39
+ App root: /home/application_2/Site
40
+ Requests in queue: 0
41
+ * PID: 26712 Sessions: 0 Processed: 184 Uptime: 21h 36m 36s
42
+ CPU: 0% Memory : 26M Last used: 1m 11s
43
+ * PID: 26721 Sessions: 0 Processed: 0 Uptime: 21h 36m 35s
44
+ CPU: 0% Memory : 13M Last used: 21h 36m
45
+ * PID: 26728 Sessions: 0 Processed: 0 Uptime: 21h 36m 35s
46
+ CPU: 0% Memory : 13M Last used: 21h 36m
47
+ * PID: 26736 Sessions: 0 Processed: 0 Uptime: 21h 36m 35s
48
+ CPU: 0% Memory : 13M Last used: 21h 36m
49
+
50
+ /home/application_3/Site#default:
51
+ App root: /home/application_3/Site
52
+ Requests in queue: 0
53
+ * PID: 17507 Sessions: 0 Processed: 2141 Uptime: 21h 43m 33s
54
+ CPU: 0% Memory : 242M Last used: 5h 51m
55
+ * PID: 17514 Sessions: 0 Processed: 5967 Uptime: 21h 43m 33s
56
+ CPU: 0% Memory : 703M Last used: 29s ago
57
+ * PID: 17527 Sessions: 0 Processed: 6859 Uptime: 21h 43m 33s
58
+ CPU: 0% Memory : 790M Last used: 18m 23s
59
+ * PID: 17534 Sessions: 0 Processed: 4646 Uptime: 21h 43m 33s
60
+ CPU: 0% Memory : 561M Last used: 5h 51m
61
+ * PID: 17541 Sessions: 0 Processed: 3030 Uptime: 21h 43m 33s
62
+ CPU: 0% Memory : 401M Last used: 12m 15s
63
+ * PID: 17548 Sessions: 0 Processed: 1277 Uptime: 21h 43m 33s
64
+ CPU: 0% Memory : 240M Last used: 5h 51m
65
+
66
+ /home/application_4/Site#default:
67
+ App root: /home/application_4/Site
68
+ Requests in queue: 0
69
+ * PID: 32383 Sessions: 0 Processed: 2182 Uptime: 2h 7m 9s
70
+ CPU: 0% Memory : 76M Last used: 2s ago
71
+ * PID: 23605 Sessions: 0 Processed: 609 Uptime: 1h 7m 25s
72
+ CPU: 0% Memory : 61M Last used: 1m 7s ago
73
+ * PID: 13173 Sessions: 0 Processed: 417 Uptime: 44m 7s
74
+ CPU: 0% Memory : 60M Last used: 1m 7s ago
75
+ * PID: 24379 Sessions: 0 Processed: 275 Uptime: 32m 7s
76
+ CPU: 0% Memory : 59M Last used: 0s ago
@@ -0,0 +1,64 @@
1
+ Version : 4.0.46
2
+ Date : 2014-09-10 21:24:22 -0400
3
+ Instance: 28669
4
+ ----------- General information -----------
5
+ Max pool size : 40
6
+ Processes : 22
7
+ Requests in top-level queue : 0
8
+
9
+ ----------- Application groups -----------
10
+ /home/application_1/Site#default:
11
+ App root: /home/application_1/Site
12
+ Requests in queue: 0
13
+ * PID: 10966 Sessions: 0 Processed: 10840 Uptime: 15h 39m 16s
14
+ CPU: 1% Memory : 170M Last used: 17s ago
15
+ * PID: 10974 Sessions: 0 Processed: 0 Uptime: 15h 39m 16s
16
+ CPU: 0% Memory : 14M Last used: 15h 39m
17
+ * PID: 10981 Sessions: 0 Processed: 0 Uptime: 15h 39m 16s
18
+ CPU: 0% Memory : 14M Last used: 15h 39m
19
+ * PID: 10988 Sessions: 0 Processed: 0 Uptime: 15h 39m 16s
20
+ CPU: 0% Memory : 14M Last used: 15h 39m
21
+ * PID: 10995 Sessions: 0 Processed: 0 Uptime: 15h 39m 16s
22
+ CPU: 0% Memory : 14M Last used: 15h 39m
23
+ * PID: 11002 Sessions: 0 Processed: 0 Uptime: 15h 39m 16s
24
+ CPU: 0% Memory : 13M Last used: 15h 39m
25
+ * PID: 11009 Sessions: 0 Processed: 0 Uptime: 15h 39m 15s
26
+ CPU: 0% Memory : 13M Last used: 15h 39m
27
+ * PID: 11016 Sessions: 0 Processed: 0 Uptime: 15h 39m 15s
28
+ CPU: 0% Memory : 14M Last used: 15h 39m
29
+ * PID: 11023 Sessions: 0 Processed: 2977 Uptime: 15h 39m 15s
30
+ CPU: 0% Memory : 144M Last used: 3s ago
31
+ * PID: 11030 Sessions: 0 Processed: 12869 Uptime: 15h 39m 15s
32
+ CPU: 1% Memory : 205M Last used: 0s ago
33
+ * PID: 11037 Sessions: 0 Processed: 8255 Uptime: 15h 39m 15s
34
+ CPU: 1% Memory : 162M Last used: 46s ago
35
+ * PID: 11044 Sessions: 0 Processed: 6311 Uptime: 15h 39m 15s
36
+ CPU: 1% Memory : 177M Last used: 21m 16s
37
+
38
+ /home/application_2/Site#default:
39
+ App root: /home/application_2/Site
40
+ Requests in queue: 0
41
+ * PID: 1679 Sessions: 0 Processed: 1273 Uptime: 3d 17h 40m 10s
42
+ CPU: 0% Memory : 45M Last used: 6m 4
43
+ * PID: 1686 Sessions: 0 Processed: 0 Uptime: 3d 17h 40m 10s
44
+ CPU: 0% Memory : 13M Last used: 3d 1
45
+ * PID: 1693 Sessions: 0 Processed: 0 Uptime: 3d 17h 40m 10s
46
+ CPU: 0% Memory : 13M Last used: 3d 1
47
+ * PID: 1700 Sessions: 0 Processed: 59 Uptime: 3d 17h 40m 10s
48
+ CPU: 0% Memory : 24M Last used: 2d 2
49
+
50
+ /home/application_3/Site#default:
51
+ App root: /home/application_3/Site
52
+ Requests in queue: 0
53
+ * PID: 8170 Sessions: 0 Processed: 13179 Uptime: 1d 12h 8m 46s
54
+ CPU: 1% Memory : 612M Last used: 0s ag
55
+ * PID: 8180 Sessions: 0 Processed: 20043 Uptime: 1d 12h 8m 45s
56
+ CPU: 1% Memory : 663M Last used: 11h 3
57
+ * PID: 8190 Sessions: 0 Processed: 13395 Uptime: 1d 12h 8m 45s
58
+ CPU: 1% Memory : 324M Last used: 16h 5
59
+ * PID: 8200 Sessions: 0 Processed: 8310 Uptime: 1d 12h 8m 45s
60
+ CPU: 0% Memory : 414M Last used: 43s a
61
+ * PID: 8207 Sessions: 0 Processed: 8589 Uptime: 1d 12h 8m 45s
62
+ CPU: 0% Memory : 415M Last used: 2m 43
63
+ * PID: 8214 Sessions: 0 Processed: 15640 Uptime: 1d 12h 8m 45s
64
+ CPU: 1% Memory : 507M Last used: 11h 3
@@ -0,0 +1,122 @@
1
+ require File.expand_path('test_helper', File.dirname(__FILE__))
2
+
3
+ describe CheckPassenger::Check do
4
+ describe '#passenger_status' do
5
+ it 'returns a PassengerStatus class' do
6
+ assert_equal 'CheckPassenger::PassengerStatus', CheckPassenger::Check.send(:passenger_status).name
7
+ assert_equal 'CheckPassenger::PassengerStatus',
8
+ CheckPassenger::Check.send(:passenger_status, File.dirname(__FILE__)).name
9
+ end
10
+ end
11
+
12
+ def output_data_structure_test(output_data)
13
+ assert_kind_of Array, output_data
14
+
15
+ output_data.each do |datum|
16
+ assert_kind_of Hash, datum
17
+ assert datum.has_key?(:text)
18
+ assert datum.has_key?(:counter)
19
+ assert datum.has_key?(:value)
20
+ end
21
+ end
22
+
23
+ describe 'sample output 1' do
24
+ before do
25
+ sample_path = File.expand_path('sample_output_1.txt', File.dirname(__FILE__))
26
+ data = File.read(sample_path)
27
+ @parsed_data = CheckPassenger::Parser.new(data)
28
+ end
29
+
30
+ describe '#process_count' do
31
+ it 'reports global process count' do
32
+ options = { parsed_data: @parsed_data }
33
+ output_status, output_data = CheckPassenger::Check.process_count(options)
34
+
35
+ assert_equal :ok, output_status
36
+ output_data_structure_test(output_data)
37
+
38
+ assert_equal 'process_count', output_data.first[:counter]
39
+ assert_equal 26, output_data.first[:value]
40
+ end
41
+
42
+ it 'reports global memory' do
43
+ options = { parsed_data: @parsed_data }
44
+ output_status, output_data = CheckPassenger::Check.memory(options)
45
+
46
+ assert :ok, output_status
47
+ output_data_structure_test(output_data)
48
+
49
+ assert_equal 'memory', output_data.first[:counter]
50
+ assert_equal 5_266, output_data.first[:value]
51
+ end
52
+
53
+ it 'reports data for all applications' do
54
+ options = { parsed_data: @parsed_data, include_all: true }
55
+ [:process_count, :memory, :live_process_count].each do |counter|
56
+ output_status, output_data = CheckPassenger::Check.send(counter, options)
57
+
58
+ assert_equal :ok, output_status
59
+ output_data_structure_test(output_data)
60
+
61
+ assert_equal 5, output_data.size
62
+ end
63
+ end
64
+
65
+ it 'reports global live process count' do
66
+ options = { parsed_data: @parsed_data }
67
+ output_status, output_data = CheckPassenger::Check.live_process_count(options)
68
+
69
+ assert :ok, output_status
70
+ output_data_structure_test(output_data)
71
+
72
+ assert_equal 'live_process_count', output_data.first[:counter]
73
+ assert_equal 9, output_data.first[:value]
74
+ end
75
+
76
+ it 'reports application process count' do
77
+ options = { parsed_data: @parsed_data, app_name: 'application_1' }
78
+ output_status, output_data = CheckPassenger::Check.process_count(options)
79
+
80
+ assert_equal :ok, output_status
81
+ output_data_structure_test(output_data)
82
+
83
+ assert_equal 'process_count', output_data.first[:counter]
84
+ assert_equal 12, output_data.first[:value]
85
+ end
86
+
87
+ it 'reports application memory' do
88
+ options = { parsed_data: @parsed_data, app_name: 'application_2' }
89
+ output_status, output_data = CheckPassenger::Check.memory(options)
90
+
91
+ assert_equal :ok, output_status
92
+ output_data_structure_test(output_data)
93
+
94
+ assert_equal 'memory', output_data.first[:counter]
95
+ assert_equal 65, output_data.first[:value]
96
+ end
97
+
98
+ it 'reports application live process count' do
99
+ options = { parsed_data: @parsed_data, app_name: 'application_3' }
100
+ output_status, output_data = CheckPassenger::Check.live_process_count(options)
101
+
102
+ assert_equal :ok, output_status
103
+ output_data_structure_test(output_data)
104
+
105
+ assert_equal 'live_process_count', output_data.first[:counter]
106
+ assert_equal 1, output_data.first[:value]
107
+ end
108
+
109
+ it 'sets a warn alert when value over threshold' do
110
+ options = { parsed_data: @parsed_data, app_name: 'application_4', warn: '150', crit: '300' }
111
+ output_status, output_data = CheckPassenger::Check.memory(options)
112
+ assert_equal :warn, output_status
113
+ end
114
+
115
+ it 'sets a crit alert when value over threshold' do
116
+ options = { parsed_data: @parsed_data, app_name: 'application_4', warn: '75', crit: '150' }
117
+ output_status, output_data = CheckPassenger::Check.memory(options)
118
+ assert_equal :crit, output_status
119
+ end
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,9 @@
1
+ lib = File.expand_path('../lib', File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
3
+
4
+ require 'check_passenger'
5
+ require 'minitest'
6
+ require 'minitest/autorun'
7
+ require 'minitest/reporters'
8
+
9
+ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
@@ -0,0 +1,72 @@
1
+ require File.expand_path('test_helper', File.dirname(__FILE__))
2
+
3
+ describe CheckPassenger::NagiosCheck do
4
+ before do
5
+ @obj = Class.new do
6
+ extend CheckPassenger::NagiosCheck
7
+ end
8
+ end
9
+
10
+ describe '#nagios_status' do
11
+ it 'returns the correct status' do
12
+ assert_equal :ok, @obj.send(:nagios_status, 2)
13
+ assert_equal :ok, @obj.send(:nagios_status, 2, { warn: '3' })
14
+ assert_equal :warn, @obj.send(:nagios_status, 6, { warn: '5' })
15
+ assert_equal :warn, @obj.send(:nagios_status, -1, { warn: '5' })
16
+ assert_equal :crit, @obj.send(:nagios_status, 6, { warn: '5', crit: '5' })
17
+ end
18
+ end
19
+
20
+ describe '#number_outside_range?' do
21
+ it 'processes simple numbers' do
22
+ assert @obj.send(:'number_outside_range?', -1, '10')
23
+ refute @obj.send(:'number_outside_range?', 0, '10')
24
+ refute @obj.send(:'number_outside_range?', 10, '10')
25
+ assert @obj.send(:'number_outside_range?', 11, '10')
26
+ end
27
+
28
+ it 'processes ranges with empty ends' do
29
+ assert @obj.send(:'number_outside_range?', -1, '10:')
30
+ assert @obj.send(:'number_outside_range?', 9, '10:')
31
+ refute @obj.send(:'number_outside_range?', 10, '10:')
32
+ refute @obj.send(:'number_outside_range?', 100, '10:')
33
+ end
34
+
35
+ it 'processes ranges to inifinity' do
36
+ refute @obj.send(:'number_outside_range?', -1, '~:10')
37
+ refute @obj.send(:'number_outside_range?', 10, '~:10')
38
+ assert @obj.send(:'number_outside_range?', 11, '~:10')
39
+ assert @obj.send(:'number_outside_range?', 100, '~:10')
40
+ end
41
+
42
+ it 'processes delimited ranges' do
43
+ assert @obj.send(:'number_outside_range?', -1, '10:20')
44
+ assert @obj.send(:'number_outside_range?', 9, '10:20')
45
+ refute @obj.send(:'number_outside_range?', 10, '10:20')
46
+ refute @obj.send(:'number_outside_range?', 15, '10:20')
47
+ refute @obj.send(:'number_outside_range?', 20, '10:20')
48
+ assert @obj.send(:'number_outside_range?', 21, '10:20')
49
+ assert @obj.send(:'number_outside_range?', 100, '10:20')
50
+ end
51
+
52
+ it 'processes negative delimited ranges' do
53
+ refute @obj.send(:'number_outside_range?', -1, '@10:20')
54
+ refute @obj.send(:'number_outside_range?', 9, '@10:20')
55
+ assert @obj.send(:'number_outside_range?', 10, '@10:20')
56
+ assert @obj.send(:'number_outside_range?', 15, '@10:20')
57
+ assert @obj.send(:'number_outside_range?', 20, '@10:20')
58
+ refute @obj.send(:'number_outside_range?', 21, '@10:20')
59
+ refute @obj.send(:'number_outside_range?', 100, '@10:20')
60
+ end
61
+
62
+ it 'raises an exception on unknown range' do
63
+ assert_raises ArgumentError do
64
+ @obj.send(:'number_outside_range?', 100, '&10:20')
65
+ end
66
+
67
+ assert_raises ArgumentError do
68
+ @obj.send(:'number_outside_range?', 100, ':')
69
+ end
70
+ end
71
+ end
72
+ end