net-ping 1.5.1 → 1.5.2
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.
- data/CHANGES +9 -0
- data/lib/net/ping/http.rb +67 -38
- data/lib/net/ping/ping.rb +1 -1
- data/net-ping.gemspec +1 -1
- data/test/test_net_ping.rb +1 -1
- data/test/test_net_ping_http.rb +9 -3
- metadata +4 -4
data/CHANGES
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
== 1.5.2 - 4-Nov-2011
|
2
|
+
* The Net::Ping::HTTP class now defaults to using HEAD instead of GET
|
3
|
+
for its ping test. You can alter this via the get_request accessor.
|
4
|
+
Thanks got to Balazs Kutil for the patch.
|
5
|
+
* Added the ssl_verify_mode accessor to the Net::Ping::HTTP class, which
|
6
|
+
defaults to VERIFY_NONE. This fixes possible warnings resulting from
|
7
|
+
missing SSL certificates when using https. Thanks go to Balazs Kutil
|
8
|
+
for the patch.
|
9
|
+
|
1
10
|
== 1.5.1 - 15-Sep-2011
|
2
11
|
* Use RbConfig on Ruby 1.9 and later. Thanks go to Torsten Schönebaum
|
3
12
|
for the patch.
|
data/lib/net/ping/http.rb
CHANGED
@@ -27,12 +27,20 @@ module Net
|
|
27
27
|
# The user agent used for the HTTP request. The default is nil.
|
28
28
|
attr_accessor :user_agent
|
29
29
|
|
30
|
+
# OpenSSL certificate verification mode. The default is VERIFY_NONE.
|
31
|
+
attr_accessor :ssl_verify_mode
|
32
|
+
|
33
|
+
# Use GET request instead HEAD. The default is false.
|
34
|
+
attr_accessor :get_request
|
35
|
+
|
30
36
|
# Creates and returns a new Ping::HTTP object. The default port is the
|
31
37
|
# port associated with the URI. The default timeout is 5 seconds.
|
32
38
|
#
|
33
39
|
def initialize(uri=nil, port=nil, timeout=5)
|
34
40
|
@follow_redirect = true
|
35
41
|
@redirect_limit = 5
|
42
|
+
@ssl_verify_mode = OpenSSL::SSL::VERIFY_NONE
|
43
|
+
@get_request = false
|
36
44
|
|
37
45
|
port ||= URI.parse(uri).port if uri
|
38
46
|
|
@@ -60,48 +68,35 @@ module Net
|
|
60
68
|
|
61
69
|
start_time = Time.now
|
62
70
|
|
63
|
-
|
64
|
-
response = nil
|
65
|
-
uri_path = uri.path.empty? ? '/' : uri.path
|
66
|
-
headers = { }
|
67
|
-
headers["User-Agent"] = user_agent unless user_agent.nil?
|
68
|
-
Timeout.timeout(@timeout) do
|
69
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
70
|
-
http.use_ssl = (uri.scheme == 'https')
|
71
|
-
request = Net::HTTP::Get.new(uri_path)
|
72
|
-
response = http.start{ |h| h.request(request) }
|
73
|
-
end
|
74
|
-
rescue Exception => err
|
75
|
-
@exception = err.message
|
76
|
-
else
|
77
|
-
if response.is_a?(Net::HTTPSuccess)
|
78
|
-
bool = true
|
79
|
-
else
|
80
|
-
if @follow_redirect
|
81
|
-
@warning = response.message
|
82
|
-
rlimit = 0
|
83
|
-
|
84
|
-
# Any response code in the 300 range is a redirect
|
85
|
-
while response.code.to_i >= 300 && response.code.to_i < 400
|
86
|
-
if rlimit >= redirect_limit
|
87
|
-
@exception = "Redirect limit exceeded"
|
88
|
-
break
|
89
|
-
end
|
90
|
-
redirect = URI.parse(response['location'])
|
91
|
-
redirect = uri + redirect if redirect.relative?
|
92
|
-
response = Net::HTTP.get_response(redirect.host, redirect.path, @port)
|
93
|
-
rlimit += 1
|
94
|
-
end
|
71
|
+
response = do_ping(uri)
|
95
72
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
73
|
+
if response.is_a?(Net::HTTPSuccess)
|
74
|
+
bool = true
|
75
|
+
elsif redirect?(response) # Check code, HTTPRedirection does not always work
|
76
|
+
if @follow_redirect
|
77
|
+
@warning = response.message
|
78
|
+
rlimit = 0
|
79
|
+
|
80
|
+
while redirect?(response)
|
81
|
+
if rlimit >= redirect_limit
|
82
|
+
@exception = "Redirect limit exceeded"
|
83
|
+
break
|
101
84
|
end
|
85
|
+
redirect = URI.parse(response['location'])
|
86
|
+
redirect = uri + redirect if redirect.relative?
|
87
|
+
response = do_ping(redirect)
|
88
|
+
rlimit += 1
|
89
|
+
end
|
90
|
+
|
91
|
+
if response.is_a?(Net::HTTPSuccess)
|
92
|
+
bool = true
|
102
93
|
else
|
103
|
-
@
|
94
|
+
@warning = nil
|
95
|
+
@exception ||= response.message
|
104
96
|
end
|
97
|
+
|
98
|
+
else
|
99
|
+
@exception = response.message
|
105
100
|
end
|
106
101
|
end
|
107
102
|
|
@@ -116,5 +111,39 @@ module Net
|
|
116
111
|
alias follow_redirect? follow_redirect
|
117
112
|
alias uri host
|
118
113
|
alias uri= host=
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def redirect?(response)
|
118
|
+
response && response.code.to_i >= 300 && response.code.to_i < 400
|
119
|
+
end
|
120
|
+
|
121
|
+
def do_ping(uri)
|
122
|
+
response = nil
|
123
|
+
begin
|
124
|
+
uri_path = uri.path.empty? ? '/' : uri.path
|
125
|
+
headers = { }
|
126
|
+
headers["User-Agent"] = user_agent unless user_agent.nil?
|
127
|
+
Timeout.timeout(@timeout) do
|
128
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
129
|
+
|
130
|
+
if uri.scheme == 'https'
|
131
|
+
http.use_ssl = true
|
132
|
+
http.verify_mode = @ssl_verify_mode
|
133
|
+
end
|
134
|
+
|
135
|
+
if @get_request == true
|
136
|
+
request = Net::HTTP::Get.new(uri_path)
|
137
|
+
else
|
138
|
+
request = Net::HTTP::Head.new(uri_path)
|
139
|
+
end
|
140
|
+
|
141
|
+
response = http.start{ |h| h.request(request) }
|
142
|
+
end
|
143
|
+
rescue Exception => err
|
144
|
+
@exception = err.message
|
145
|
+
end
|
146
|
+
response
|
147
|
+
end
|
119
148
|
end
|
120
149
|
end
|
data/lib/net/ping/ping.rb
CHANGED
data/net-ping.gemspec
CHANGED
data/test/test_net_ping.rb
CHANGED
data/test/test_net_ping_http.rb
CHANGED
@@ -16,8 +16,9 @@ class TC_Net_Ping_HTTP < Test::Unit::TestCase
|
|
16
16
|
@uri_https = 'https://encrypted.google.com'
|
17
17
|
|
18
18
|
FakeWeb.register_uri(:get, @uri, :body => "PONG")
|
19
|
-
FakeWeb.register_uri(:
|
20
|
-
FakeWeb.register_uri(:
|
19
|
+
FakeWeb.register_uri(:head, @uri, :body => "PONG")
|
20
|
+
FakeWeb.register_uri(:head, @uri_https, :body => "PONG")
|
21
|
+
FakeWeb.register_uri(:head, "http://jigsaw.w3.org/HTTP/300/302.html",
|
21
22
|
:body => "PONG",
|
22
23
|
:location => "#{@uri}",
|
23
24
|
:status => ["302", "Found"])
|
@@ -163,12 +164,17 @@ class TC_Net_Ping_HTTP < Test::Unit::TestCase
|
|
163
164
|
assert_equal(443, @http.port)
|
164
165
|
end
|
165
166
|
|
166
|
-
# This will generate a warning. Nothing I can do about it.
|
167
167
|
test 'ping against https site works as expected' do
|
168
168
|
@http = Net::Ping::HTTP.new(@uri_https)
|
169
169
|
assert_true(@http.ping)
|
170
170
|
end
|
171
171
|
|
172
|
+
test 'ping with get option' do
|
173
|
+
@http = Net::Ping::HTTP.new(@uri)
|
174
|
+
@http.get_request = true
|
175
|
+
assert_true(@http.ping)
|
176
|
+
end
|
177
|
+
|
172
178
|
def teardown
|
173
179
|
@uri = nil
|
174
180
|
@http = nil
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-ping
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 1.5.
|
9
|
+
- 2
|
10
|
+
version: 1.5.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Daniel J. Berger
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-11-05 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: net-ldap
|