net-ping 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +18 -0
- data/MANIFEST +0 -2
- data/README +7 -7
- data/Rakefile +13 -2
- data/doc/ping.txt +25 -19
- data/lib/net/ping/external.rb +56 -42
- data/lib/net/ping/http.rb +6 -1
- data/lib/net/ping/ping.rb +1 -1
- data/lib/net/ping/tcp.rb +17 -15
- data/lib/net/ping/udp.rb +29 -0
- data/test/tc_pingexternal.rb +5 -5
- data/test/tc_pinghttp.rb +6 -6
- data/test/tc_pingicmp.rb +3 -3
- data/test/tc_pingtcp.rb +21 -12
- data/test/tc_pingudp.rb +21 -9
- metadata +48 -37
data/CHANGES
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
== 1.2.2 - 22-Jan-2008
|
2
|
+
* Bug fix for Ping::External where it was not honoring the timeout value.
|
3
|
+
Thanks go to Chris Morris for the spot and the patch.
|
4
|
+
* Bug fix for Ping::External where non-English output could cause false
|
5
|
+
positives on MS Windows Vista or later. This library now requires the
|
6
|
+
windows-pr library on MS Windows systems as a result.
|
7
|
+
* Added the Ping::UDP.service_check and Ping::UDP.service_check= class
|
8
|
+
methods. This method controls whether or not Errno::ECONNREFUSED or
|
9
|
+
Errno::ECONNRESET are considered successful pings or not.
|
10
|
+
* The Ping::HTTP class no longer uses the resolv-replace library on MS Windows
|
11
|
+
because it was (ironically) causing timeouts.
|
12
|
+
* Changed the Ping::TCP.econnrefused method to Ping::TCP.service_check. I
|
13
|
+
changed it because I now use a similar method in Ping::UDP, but that handles
|
14
|
+
more than Errno::ECONNREFUSED. An alias is provided to provide backwards
|
15
|
+
compatibility, but it is considered deprecated and will be removed in the
|
16
|
+
1.3.0 release.
|
17
|
+
* Removed the install.rb file. The Rakefile now handles installation.
|
18
|
+
|
1
19
|
== 1.2.1 - 6-Apr-2007
|
2
20
|
* For the Ping::External class, if a ping attempt results in 100% packet loss
|
3
21
|
it is now considered a failed ping, regardless of whether or not an error
|
data/MANIFEST
CHANGED
data/README
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
== Description
|
2
|
-
A
|
2
|
+
A collection of classes that provide different ways to ping computers.
|
3
3
|
|
4
4
|
== Prerequisites
|
5
5
|
* Ruby 1.8.0 or later
|
6
|
-
* The win32
|
7
|
-
|
6
|
+
* The win32-open3 and windows-pr libraries are required on MS Windows
|
7
|
+
when using the Net::Ping::External class.
|
8
8
|
|
9
9
|
== Installation
|
10
10
|
rake test (optional)
|
11
11
|
rake install (standard) OR rake gem_install (gems)
|
12
12
|
|
13
13
|
== Notes
|
14
|
-
Please read the documentation
|
15
|
-
|
14
|
+
Please read the documentation under the 'doc' directory. Especially pay
|
15
|
+
attention to the documentation pertaining to ECONNREFUSED and TCP pings.
|
16
16
|
|
17
17
|
Also note the documentation regarding down hosts.
|
18
18
|
|
@@ -21,11 +21,11 @@
|
|
21
21
|
|
22
22
|
require 'net/ping'
|
23
23
|
|
24
|
-
In which case you will get Net::Ping and all of its subclasses.
|
24
|
+
In which case you will get Net::Ping and all of its subclasses. Or,
|
25
25
|
you can load individual subclasses like this:
|
26
26
|
|
27
27
|
require 'net/ping/tcp'
|
28
28
|
|
29
29
|
The former has the advantage of being easier to remember and all inclusive,
|
30
|
-
not to mention backwards compatible.
|
30
|
+
not to mention backwards compatible. The latter has the advantage of
|
31
31
|
reducing your memory footprint.
|
data/Rakefile
CHANGED
@@ -1,9 +1,20 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/testtask'
|
3
|
+
include Config
|
3
4
|
|
4
|
-
desc "Install the net-ping package
|
5
|
+
desc "Install the net-ping package (non-gem)"
|
5
6
|
task :install do
|
6
|
-
|
7
|
+
dest1 = File.join(CONFIG['sitelibdir'], 'net')
|
8
|
+
dest2 = File.join(dest1, 'ping')
|
9
|
+
|
10
|
+
Dir.mkdir(dest1) unless File.exists?(dest1)
|
11
|
+
Dir.mkdir(dest2) unless File.exists?(dest2)
|
12
|
+
|
13
|
+
FileUtils.cp('lib/net/ping.rb', dest1, :verbose => true)
|
14
|
+
|
15
|
+
Dir['lib/net/ping/*.rb'].each{ |file|
|
16
|
+
FileUtils.cp(file, dest2, :verbose => true)
|
17
|
+
}
|
7
18
|
end
|
8
19
|
|
9
20
|
desc "Create and install a net-ping gem"
|
data/doc/ping.txt
CHANGED
@@ -54,12 +54,12 @@ Net::Ping.new(host=nil, port=7, timeout=5)
|
|
54
54
|
in the constructor then it must be specified in the ping method.
|
55
55
|
|
56
56
|
== Net::Ping::TCP
|
57
|
-
Ping::TCP.
|
58
|
-
Returns the setting for how ECONNREFUSED is handled.
|
57
|
+
Ping::TCP.service_check
|
58
|
+
Returns the setting for how ECONNREFUSED is handled. By default, this is
|
59
59
|
set to false, i.e. an ECONNREFUSED error is considered a failed ping.
|
60
60
|
|
61
|
-
Ping::TCP.
|
62
|
-
Sets the behavior for how ECONNREFUSED is handled.
|
61
|
+
Ping::TCP.service_check=(bool)
|
62
|
+
Sets the behavior for how ECONNREFUSED is handled. By default, this is
|
63
63
|
set to false, i.e. an ECONNREFUSED error is considered a failed ping.
|
64
64
|
|
65
65
|
Ping::TCP#ping(host=nil)
|
@@ -166,35 +166,41 @@ Ping#warning
|
|
166
166
|
Q: "Why don't you return exceptions if a connection fails?"
|
167
167
|
|
168
168
|
A: Because ping is only meant to return one of two things - success or
|
169
|
-
failure.
|
169
|
+
failure. It's very simple. If you want to find out *why* the ping
|
170
170
|
failed, you can check the 'exception' attribute.
|
171
171
|
|
172
172
|
Q: "I know the host is alive, but a TCP or UDP ping tells me otherwise. What
|
173
173
|
gives?"
|
174
174
|
|
175
175
|
A: It's possible that the echo port has been disabled on the remote
|
176
|
-
host for security reasons.
|
176
|
+
host for security reasons. Your best best is to specify a different port
|
177
177
|
or to use Ping::ICMP or Ping::External instead.
|
178
|
+
|
179
|
+
In the case of UDP pings, they are often actively refused. It may be
|
180
|
+
more pragmatic to set Ping::UDP.service_check = false.
|
178
181
|
|
179
|
-
Q: "Why does TCP ping return false when I know it should return true?"
|
182
|
+
Q: "Why does a TCP ping return false when I know it should return true?"
|
180
183
|
|
181
|
-
A: By default ECONNREFUSED errors will return a value of false.
|
182
|
-
contrary to what most other folks do for TCP pings.
|
183
|
-
their
|
184
|
-
the route to the host.
|
184
|
+
A: By default ECONNREFUSED errors will return a value of false. This is
|
185
|
+
contrary to what most other folks do for TCP pings. The problem with
|
186
|
+
their philosophy is that you can get false positives if a firewall blocks
|
187
|
+
the route to the host. The problem with my philosophy is that you can
|
185
188
|
get false negatives if there is no firewall (or it's not blocking the
|
186
|
-
route).
|
189
|
+
route). Given the alternatives I chose the latter.
|
187
190
|
|
188
|
-
You can always change the default behavior by using the +
|
191
|
+
You can always change the default behavior by using the +service_check+
|
189
192
|
class method.
|
193
|
+
|
194
|
+
A similar situation is true for UDP pings.
|
190
195
|
|
191
196
|
Q: "Couldn't you use traceroute information to tell for sure?"
|
192
197
|
|
193
|
-
A: I
|
194
|
-
it's worth.
|
198
|
+
A: I could but I won't so don't bug me about it. It's far more effort than
|
199
|
+
it's worth. If you want something like that, please port the
|
200
|
+
Net::Traceroute Perl module by Daniel Hagerty.
|
195
201
|
|
196
202
|
= Known Bugs
|
197
|
-
You may see a test failure from the tc_pingtcp test case.
|
203
|
+
You may see a test failure from the tc_pingtcp test case. You can ignore
|
198
204
|
this.
|
199
205
|
|
200
206
|
Please report any bugs on the project page at
|
@@ -202,17 +208,17 @@ Ping#warning
|
|
202
208
|
|
203
209
|
= Acknowledgements
|
204
210
|
The Ping::ICMP#ping method is based largely on the identical method from
|
205
|
-
the Net::Ping Perl module by Rob Brown.
|
211
|
+
the Net::Ping Perl module by Rob Brown. Much of the code was ported by
|
206
212
|
Jos Backus on ruby-talk.
|
207
213
|
|
208
214
|
= Future Plans
|
209
|
-
Add
|
215
|
+
Add support for syn pings.
|
210
216
|
|
211
217
|
= License
|
212
218
|
Ruby's
|
213
219
|
|
214
220
|
= Copyright
|
215
|
-
(C) 2003-
|
221
|
+
(C) 2003-2008 Daniel J. Berger, All Rights Reserved
|
216
222
|
|
217
223
|
= Warranty
|
218
224
|
This package is provided "as is" and without any express or
|
data/lib/net/ping/external.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
$LOAD_PATH.unshift File.dirname(__FILE__)
|
2
2
|
require 'ping'
|
3
3
|
|
4
|
+
if RUBY_PLATFORM.match('mswin')
|
5
|
+
require 'win32/open3'
|
6
|
+
require 'windows/console'
|
7
|
+
include Windows::Console
|
8
|
+
else
|
9
|
+
require 'open3'
|
10
|
+
end
|
11
|
+
|
4
12
|
module Net
|
5
13
|
class Ping::External < Ping
|
6
14
|
|
@@ -13,9 +21,11 @@ module Net
|
|
13
21
|
#
|
14
22
|
def ping(host = @host)
|
15
23
|
super(host)
|
24
|
+
|
16
25
|
input, output, error = ""
|
17
26
|
pstring = "ping "
|
18
|
-
bool
|
27
|
+
bool = false
|
28
|
+
orig_cp = nil
|
19
29
|
|
20
30
|
case RUBY_PLATFORM
|
21
31
|
when /linux|bsd|osx|mach|darwin/i
|
@@ -25,57 +35,61 @@ module Net
|
|
25
35
|
when /hpux/i
|
26
36
|
pstring += "#{host} -n 1"
|
27
37
|
when /win32|windows|mswin/i
|
38
|
+
orig_cp = GetConsoleCP()
|
39
|
+
SetConsoleCP(437) if orig_cp != 437 # United States
|
28
40
|
pstring += "-n 1 #{host}"
|
29
41
|
else
|
30
42
|
pstring += "#{host}"
|
31
43
|
end
|
32
44
|
|
33
|
-
if RUBY_PLATFORM.match('mswin')
|
34
|
-
require 'win32/open3'
|
35
|
-
else
|
36
|
-
require 'open3'
|
37
|
-
end
|
38
|
-
|
39
45
|
start_time = Time.now
|
40
46
|
|
41
|
-
|
42
|
-
|
43
|
-
|
47
|
+
begin
|
48
|
+
e = nil
|
49
|
+
Timeout.timeout(@timeout){
|
50
|
+
input, output, error = Open3.popen3(pstring)
|
51
|
+
e = error.gets # Can't chomp yet, might be nil
|
52
|
+
}
|
44
53
|
|
45
|
-
|
54
|
+
input.close
|
55
|
+
error.close
|
46
56
|
|
47
|
-
|
48
|
-
|
57
|
+
if RUBY_PLATFORM.match('mswin') && GetConsoleCP() != orig_cp
|
58
|
+
SetConsoleCP(orig_cp)
|
59
|
+
end
|
49
60
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
61
|
+
unless e.nil?
|
62
|
+
if e =~ /warning/i
|
63
|
+
@warning = e.chomp
|
64
|
+
bool = true
|
65
|
+
else
|
66
|
+
@exception = e.chomp
|
67
|
+
end
|
68
|
+
# The "no answer" response goes to stdout, not stderr, so check it
|
69
|
+
else
|
70
|
+
lines = output.readlines
|
71
|
+
output.close
|
72
|
+
if lines.nil? || lines.empty?
|
73
|
+
bool = true
|
74
|
+
else
|
75
|
+
regexp = /
|
76
|
+
no\ answer|
|
77
|
+
host\ unreachable|
|
78
|
+
could\ not\ find\ host|
|
79
|
+
request\ timed\ out|
|
80
|
+
100%\ packet\ loss
|
81
|
+
/ix
|
82
|
+
lines.each{ |e|
|
83
|
+
if regexp.match(e)
|
84
|
+
@exception = e.chomp
|
85
|
+
break
|
86
|
+
end
|
87
|
+
}
|
88
|
+
bool = true unless @exception
|
89
|
+
end
|
90
|
+
end
|
91
|
+
rescue Exception => err
|
92
|
+
@exception = err.message
|
79
93
|
end
|
80
94
|
|
81
95
|
# There is no duration if the ping failed
|
data/lib/net/ping/http.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
$LOAD_PATH.unshift File.dirname(__FILE__)
|
2
2
|
require 'ping'
|
3
3
|
require 'net/http'
|
4
|
-
require 'resolv-replace' # Force non-blocking Socket.getaddrinfo
|
5
4
|
require 'uri'
|
6
5
|
|
6
|
+
# Force non-blocking Socket.getaddrinfo on Unix systems. Do not use on
|
7
|
+
# Windows because it causes problems.
|
8
|
+
unless RUBY_PLATFORM.match('mswin')
|
9
|
+
require 'resolv-replace'
|
10
|
+
end
|
11
|
+
|
7
12
|
module Net
|
8
13
|
class Ping::HTTP < Ping
|
9
14
|
|
data/lib/net/ping/ping.rb
CHANGED
data/lib/net/ping/tcp.rb
CHANGED
@@ -3,36 +3,36 @@ require 'ping'
|
|
3
3
|
|
4
4
|
module Net
|
5
5
|
|
6
|
-
# With a TCP ping, simply try to open a connection. If we are
|
6
|
+
# With a TCP ping, simply try to open a connection. If we are successful,
|
7
7
|
# assume bool. In either case, close the connection to be polite.
|
8
8
|
#
|
9
9
|
class Ping::TCP < Ping
|
10
|
-
@@
|
10
|
+
@@service_check = false
|
11
11
|
|
12
|
-
# Returns whether or not Errno::ECONNREFUSED is considered a
|
13
|
-
# ping.
|
12
|
+
# Returns whether or not Errno::ECONNREFUSED is considered a successful
|
13
|
+
# ping. The default is false.
|
14
14
|
#
|
15
|
-
def self.
|
16
|
-
@@
|
15
|
+
def self.service_check
|
16
|
+
@@service_check
|
17
17
|
end
|
18
18
|
|
19
19
|
# Sets whether or not an Errno::ECONNREFUSED should be considered a
|
20
|
-
#
|
20
|
+
# successful ping.
|
21
21
|
#
|
22
|
-
def self.
|
22
|
+
def self.service_check=(bool)
|
23
23
|
unless bool.kind_of?(TrueClass) || bool.kind_of?(FalseClass)
|
24
24
|
raise ArgumentError, 'argument must be true or false'
|
25
25
|
end
|
26
|
-
@@
|
26
|
+
@@service_check = bool
|
27
27
|
end
|
28
28
|
|
29
29
|
# This method attempts to ping a host and port using a TCPSocket with
|
30
30
|
# the host, port and timeout values passed in the constructor. Returns
|
31
|
-
# true if
|
31
|
+
# true if successful, or false otherwise.
|
32
32
|
#
|
33
33
|
# Note that, by default, an Errno::ECONNREFUSED return result will be
|
34
34
|
# considered a failed ping. See the documentation for the
|
35
|
-
# Ping::TCP.
|
35
|
+
# Ping::TCP.service_check= method if you wish to change this behavior.
|
36
36
|
#
|
37
37
|
def ping(host=@host)
|
38
38
|
super(host)
|
@@ -46,7 +46,7 @@ module Net
|
|
46
46
|
begin
|
47
47
|
tcp = TCPSocket.new(host, @port)
|
48
48
|
rescue Errno::ECONNREFUSED => err
|
49
|
-
if @@
|
49
|
+
if @@service_check
|
50
50
|
bool = true
|
51
51
|
else
|
52
52
|
@exception = err
|
@@ -72,10 +72,12 @@ module Net
|
|
72
72
|
alias ping? ping
|
73
73
|
alias pingecho ping
|
74
74
|
|
75
|
-
# Class method aliases
|
75
|
+
# Class method aliases. DEPRECATED.
|
76
76
|
class << self
|
77
|
-
alias
|
78
|
-
alias
|
77
|
+
alias econnrefused service_check
|
78
|
+
alias econnrefused= service_check=
|
79
|
+
alias ecr service_check
|
80
|
+
alias ecr= service_check=
|
79
81
|
end
|
80
82
|
end
|
81
83
|
|
data/lib/net/ping/udp.rb
CHANGED
@@ -3,6 +3,29 @@ require 'ping'
|
|
3
3
|
|
4
4
|
module Net
|
5
5
|
class Ping::UDP < Ping
|
6
|
+
@@service_check = true
|
7
|
+
|
8
|
+
# Returns whether or not the connect behavior should enforce remote
|
9
|
+
# service availability as well as reachability. The default is true.
|
10
|
+
#
|
11
|
+
def self.service_check
|
12
|
+
@@service_check
|
13
|
+
end
|
14
|
+
|
15
|
+
# Set whether or not the connect behavior should enforce remote
|
16
|
+
# service availability as well as reachability. If set to false
|
17
|
+
# then Errno::ECONNREFUSED or Errno::ECONNRESET will be considered
|
18
|
+
# a successful ping, meaning no actual data handshaking is required.
|
19
|
+
# By default, if either of those errors occurs it is considered a failed
|
20
|
+
# ping.
|
21
|
+
#
|
22
|
+
def self.service_check=(bool)
|
23
|
+
unless bool.kind_of?(TrueClass) || bool.kind_of?(FalseClass)
|
24
|
+
raise ArgumentError, 'argument must be true or false'
|
25
|
+
end
|
26
|
+
@@service_check = bool
|
27
|
+
end
|
28
|
+
|
6
29
|
MAX_DATA = 64
|
7
30
|
|
8
31
|
# The data to send to the remote host. By default this is 'ping'.
|
@@ -65,6 +88,12 @@ module Net
|
|
65
88
|
udp.send(@data, 0)
|
66
89
|
array = udp.recvfrom(MAX_DATA)
|
67
90
|
}
|
91
|
+
rescue Errno::ECONNREFUSED, Errno::ECONNRESET => err
|
92
|
+
if @@service_check
|
93
|
+
@exception = err
|
94
|
+
else
|
95
|
+
bool = true
|
96
|
+
end
|
68
97
|
rescue Exception => err
|
69
98
|
@exception = err
|
70
99
|
else
|
data/test/tc_pingexternal.rb
CHANGED
@@ -4,20 +4,20 @@
|
|
4
4
|
# Test case for the Net::PingExternal class. Run this via the 'test' or
|
5
5
|
# 'test_external' rake task.
|
6
6
|
#########################################################################
|
7
|
-
require
|
8
|
-
require
|
7
|
+
require 'test/unit'
|
8
|
+
require 'net/ping/external'
|
9
9
|
include Net
|
10
10
|
|
11
11
|
class TC_PingExternal < Test::Unit::TestCase
|
12
12
|
def setup
|
13
|
-
@host =
|
14
|
-
@bogus =
|
13
|
+
@host = 'www.ruby-lang.org'
|
14
|
+
@bogus = 'foo.bar.baz'
|
15
15
|
@pe = Ping::External.new(@host)
|
16
16
|
@bad = Ping::External.new(@bogus)
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_version
|
20
|
-
assert_equal(
|
20
|
+
assert_equal('1.2.2', PingExternal::VERSION)
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_ping
|
data/test/tc_pinghttp.rb
CHANGED
@@ -4,19 +4,19 @@
|
|
4
4
|
# Test case for the Net::PingHTTP class. This should be run via the 'test' or
|
5
5
|
# 'test_http' test task.
|
6
6
|
#################################################################################
|
7
|
-
require
|
8
|
-
require
|
7
|
+
require 'test/unit'
|
8
|
+
require 'net/ping/http'
|
9
9
|
include Net
|
10
10
|
|
11
11
|
class TC_PingHTTP < Test::Unit::TestCase
|
12
12
|
def setup
|
13
|
-
@uri =
|
13
|
+
@uri = 'http://www.google.com/index.html'
|
14
14
|
@http = Ping::HTTP.new(@uri, 80, 30)
|
15
|
-
@bad = Ping::HTTP.new(
|
15
|
+
@bad = Ping::HTTP.new('http://www.blabfoobarurgh.com') # One hopes not
|
16
16
|
end
|
17
17
|
|
18
18
|
def test_version
|
19
|
-
assert_equal(
|
19
|
+
assert_equal('1.2.2', Ping::HTTP::VERSION)
|
20
20
|
end
|
21
21
|
|
22
22
|
def test_ping
|
@@ -48,7 +48,7 @@ class TC_PingHTTP < Test::Unit::TestCase
|
|
48
48
|
assert_respond_to(@http, :host=)
|
49
49
|
assert_respond_to(@http, :uri) # Alias
|
50
50
|
assert_respond_to(@http, :uri=) # Alias
|
51
|
-
assert_equal('http://www.
|
51
|
+
assert_equal('http://www.google.com/index.html', @http.host)
|
52
52
|
end
|
53
53
|
|
54
54
|
def test_port
|
data/test/tc_pingicmp.rb
CHANGED
@@ -5,8 +5,8 @@
|
|
5
5
|
# with root privileges on UNIX systems. This should be run via the
|
6
6
|
# 'test' or 'test_icmp' Rake task.
|
7
7
|
#######################################################################
|
8
|
-
require
|
9
|
-
require
|
8
|
+
require 'test/unit'
|
9
|
+
require 'net/ping/icmp'
|
10
10
|
include Net
|
11
11
|
|
12
12
|
unless Process.euid == 0
|
@@ -20,7 +20,7 @@ class TC_PingICMP < Test::Unit::TestCase
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def test_version
|
23
|
-
assert_equal(
|
23
|
+
assert_equal('1.2.2', PingICMP::VERSION)
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_ping
|
data/test/tc_pingtcp.rb
CHANGED
@@ -4,18 +4,18 @@
|
|
4
4
|
# Test case for the Net::PingTCP class. This test should be run via
|
5
5
|
# the 'test' or 'test_tcp' Rake task.
|
6
6
|
#####################################################################
|
7
|
-
require
|
8
|
-
require
|
7
|
+
require 'test/unit'
|
8
|
+
require 'net/ping/tcp'
|
9
9
|
include Net
|
10
10
|
|
11
11
|
class TC_PingTCP < Test::Unit::TestCase
|
12
12
|
def setup
|
13
|
-
@host =
|
13
|
+
@host = Socket.gethostname
|
14
14
|
@tcp = Ping::TCP.new(@host)
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_version
|
18
|
-
assert_equal(
|
18
|
+
assert_equal('1.2.2', PingTCP::VERSION)
|
19
19
|
end
|
20
20
|
|
21
21
|
def test_ping
|
@@ -33,25 +33,34 @@ class TC_PingTCP < Test::Unit::TestCase
|
|
33
33
|
assert_nothing_raised{ @tcp.pingecho(@host) }
|
34
34
|
end
|
35
35
|
|
36
|
-
def
|
36
|
+
def test_ping_service_check_false
|
37
37
|
msg = "+this test may fail depending on your network environment+"
|
38
|
-
PingTCP.
|
38
|
+
PingTCP.service_check = false
|
39
39
|
assert_equal(false, @tcp.ping?, msg)
|
40
40
|
assert_equal(false, @tcp.exception.nil?, "Bad exception data")
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
43
|
+
def test_ping_service_check_true
|
44
44
|
msg = "+this test may fail depending on your network environment+"
|
45
|
-
PingTCP.
|
45
|
+
PingTCP.service_check = true
|
46
46
|
assert_equal(true, @tcp.ping?, msg)
|
47
47
|
end
|
48
48
|
|
49
|
-
def
|
49
|
+
def test_service_check
|
50
|
+
assert_respond_to(PingTCP, :service_check)
|
51
|
+
assert_respond_to(PingTCP, :service_check=)
|
52
|
+
end
|
53
|
+
|
54
|
+
# These will be removed in 1.3.0
|
55
|
+
def test_service_check_aliases
|
50
56
|
assert_respond_to(PingTCP, :econnrefused)
|
51
57
|
assert_respond_to(PingTCP, :econnrefused=)
|
52
58
|
assert_respond_to(PingTCP, :ecr)
|
53
|
-
assert_respond_to(PingTCP, :ecr=)
|
54
|
-
|
59
|
+
assert_respond_to(PingTCP, :ecr=)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_service_check_expected_errors
|
63
|
+
assert_raises(ArgumentError){ PingTCP.service_check = "blah" }
|
55
64
|
end
|
56
65
|
|
57
66
|
def test_duration
|
@@ -63,7 +72,7 @@ class TC_PingTCP < Test::Unit::TestCase
|
|
63
72
|
def test_host
|
64
73
|
assert_respond_to(@tcp, :host)
|
65
74
|
assert_respond_to(@tcp, :host=)
|
66
|
-
assert_equal(
|
75
|
+
assert_equal(@host, @tcp.host)
|
67
76
|
end
|
68
77
|
|
69
78
|
def test_port
|
data/test/tc_pingudp.rb
CHANGED
@@ -5,20 +5,21 @@
|
|
5
5
|
# via the 'test' or 'test_udp' Rake task.
|
6
6
|
#
|
7
7
|
# If someone could provide me a host where a udp ping actually
|
8
|
-
# works, I would appreciate it. :)
|
8
|
+
# works (with a service check), I would appreciate it. :)
|
9
9
|
################################################################
|
10
|
-
require
|
11
|
-
require
|
10
|
+
require 'test/unit'
|
11
|
+
require 'net/ping/udp'
|
12
12
|
include Net
|
13
13
|
|
14
14
|
class TC_PingUDP < Test::Unit::TestCase
|
15
15
|
def setup
|
16
|
-
|
16
|
+
Ping::UDP.service_check = false
|
17
|
+
@host = '127.0.0.1'
|
17
18
|
@udp = Ping::UDP.new(@host)
|
18
19
|
end
|
19
20
|
|
20
21
|
def test_version
|
21
|
-
assert_equal(
|
22
|
+
assert_equal('1.2.2', Ping::UDP::VERSION)
|
22
23
|
end
|
23
24
|
|
24
25
|
def test_ping
|
@@ -37,13 +38,13 @@ class TC_PingUDP < Test::Unit::TestCase
|
|
37
38
|
end
|
38
39
|
|
39
40
|
def test_ping_standard
|
40
|
-
assert_equal(
|
41
|
-
assert_equal(
|
41
|
+
assert_equal(true, @udp.ping?)
|
42
|
+
assert_equal(true, @udp.exception.nil?)
|
42
43
|
end
|
43
44
|
|
44
45
|
def test_bind
|
45
46
|
assert_respond_to(@udp, :bind)
|
46
|
-
assert_nothing_raised{ @udp.bind('
|
47
|
+
assert_nothing_raised{ @udp.bind('127.0.0.1', 80) }
|
47
48
|
end
|
48
49
|
|
49
50
|
def test_duration
|
@@ -55,7 +56,7 @@ class TC_PingUDP < Test::Unit::TestCase
|
|
55
56
|
def test_host
|
56
57
|
assert_respond_to(@udp, :host)
|
57
58
|
assert_respond_to(@udp, :host=)
|
58
|
-
assert_equal('
|
59
|
+
assert_equal('127.0.0.1', @udp.host)
|
59
60
|
end
|
60
61
|
|
61
62
|
def test_port
|
@@ -79,6 +80,17 @@ class TC_PingUDP < Test::Unit::TestCase
|
|
79
80
|
def test_warning
|
80
81
|
assert_respond_to(@udp, :warning)
|
81
82
|
end
|
83
|
+
|
84
|
+
def test_service_check
|
85
|
+
assert_respond_to(Ping::UDP, :service_check)
|
86
|
+
assert_respond_to(Ping::UDP, :service_check=)
|
87
|
+
assert_equal(false, Ping::UDP.service_check) # Set in setup
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_service_check_expected_failures
|
91
|
+
assert_raise(ArgumentError){ Ping::UDP.service_check(1) }
|
92
|
+
assert_raise(ArgumentError){ Ping::UDP.service_check = 1 }
|
93
|
+
end
|
82
94
|
|
83
95
|
def teardown
|
84
96
|
@host = nil
|
metadata
CHANGED
@@ -1,46 +1,45 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.2
|
3
|
-
specification_version: 1
|
4
2
|
name: net-ping
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.2.
|
7
|
-
date: 2007-04-06 00:00:00 -06:00
|
8
|
-
summary: A ping interface for Ruby.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: djberg96@gmail.com
|
12
|
-
homepage: http://www.rubyforge.org/projects/shards
|
13
|
-
rubyforge_project:
|
14
|
-
description: A ping interface for Ruby. Includes TCP, HTTP, ICMP, UDP, and External ping interfaces.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 1.2.2
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Daniel J. Berger
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-01-22 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: A ping interface for Ruby. Includes TCP, HTTP, ICMP, UDP, and External ping interfaces.
|
17
|
+
email: djberg96@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
- CHANGES
|
25
|
+
- doc/ping.txt
|
31
26
|
files:
|
27
|
+
- lib/net/CVS
|
32
28
|
- lib/net/ping
|
33
29
|
- lib/net/ping.rb
|
34
30
|
- CHANGES
|
31
|
+
- CVS
|
35
32
|
- MANIFEST
|
36
|
-
- README
|
37
33
|
- Rakefile
|
34
|
+
- README
|
35
|
+
- test/CVS
|
38
36
|
- test/tc_pingexternal.rb
|
39
37
|
- test/tc_pinghttp.rb
|
40
38
|
- test/tc_pingicmp.rb
|
41
39
|
- test/tc_pingtcp.rb
|
42
40
|
- test/tc_pingudp.rb
|
43
41
|
- test/ts_ping.rb
|
42
|
+
- lib/net/ping/CVS
|
44
43
|
- lib/net/ping/external.rb
|
45
44
|
- lib/net/ping/http.rb
|
46
45
|
- lib/net/ping/icmp.rb
|
@@ -48,19 +47,31 @@ files:
|
|
48
47
|
- lib/net/ping/tcp.rb
|
49
48
|
- lib/net/ping/udp.rb
|
50
49
|
- doc/ping.txt
|
51
|
-
|
52
|
-
|
50
|
+
has_rdoc: true
|
51
|
+
homepage: http://www.rubyforge.org/projects/shards
|
52
|
+
post_install_message:
|
53
53
|
rdoc_options: []
|
54
54
|
|
55
|
-
|
56
|
-
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: "0"
|
62
|
+
version:
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
63
69
|
requirements: []
|
64
70
|
|
65
|
-
|
66
|
-
|
71
|
+
rubyforge_project: shards
|
72
|
+
rubygems_version: 1.0.0
|
73
|
+
signing_key:
|
74
|
+
specification_version: 2
|
75
|
+
summary: A ping interface for Ruby.
|
76
|
+
test_files:
|
77
|
+
- test/ts_ping.rb
|