net-ping 1.2.3-x86-mswin32-60 → 1.3.0-x86-mswin32-60
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +11 -0
- data/MANIFEST +2 -0
- data/README +6 -1
- data/Rakefile +7 -1
- data/doc/ping.txt +23 -5
- data/examples/test_pingexternal.rb +18 -0
- data/examples/test_pinghttp.rb +19 -0
- data/examples/test_pingtcp.rb +22 -0
- data/examples/test_pingudp.rb +15 -0
- data/lib/net/ping/external.rb +5 -0
- data/lib/net/ping/icmp.rb +1 -0
- data/lib/net/ping/ping.rb +7 -1
- data/lib/net/ping/wmi.rb +119 -0
- data/net-ping.gemspec +17 -18
- data/test/test_net_ping_external.rb +1 -1
- data/test/test_net_ping_http.rb +1 -1
- data/test/test_net_ping_icmp.rb +21 -1
- data/test/test_net_ping_tcp.rb +11 -7
- data/test/test_net_ping_udp.rb +1 -1
- data/test/test_net_ping_wmi.rb +88 -0
- metadata +21 -18
data/CHANGES
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
== 1.3.0 - 19-May-2009
|
2
|
+
* Added the Ping::WMI class for MS Windows. This class encapsulates the
|
3
|
+
Win32_PingStatus WMI class. Unlike other ping methods, this one returns
|
4
|
+
a struct that contains various bits of information.
|
5
|
+
* The Net::Ping::External class now ensures that handles opened by the open3
|
6
|
+
call are closed. Thanks go to Nick S. Kanakakorn for the spot and a
|
7
|
+
preliminary patch.
|
8
|
+
* The Net::Ping::ICMP class now explicitly closes the socket if the call to
|
9
|
+
the Socket.pack_sockaddr_in method fails.
|
10
|
+
* Some documentation updates.
|
11
|
+
|
1
12
|
== 1.2.3 - 13-Jan-2008
|
2
13
|
* Fixed a bug in the checksum private method where it would die on odd data
|
3
14
|
sizes. Thanks go to Jake Douglas for the spot.
|
data/MANIFEST
CHANGED
@@ -11,6 +11,7 @@
|
|
11
11
|
* lib/net/ping/icmp.rb
|
12
12
|
* lib/net/ping/tcp.rb
|
13
13
|
* lib/net/ping/udp.rb
|
14
|
+
* lib/net/ping/wmi.rb
|
14
15
|
* lib/net/ping/http.rb
|
15
16
|
* lib/net/ping/external.rb
|
16
17
|
* test/test_net_ping_external.rb
|
@@ -18,4 +19,5 @@
|
|
18
19
|
* test/test_net_ping_icmp.rb
|
19
20
|
* test/test_net_ping_tcp.rb
|
20
21
|
* test/test_net_ping_udp.rb
|
22
|
+
* test/test_net_ping_wmi.rb
|
21
23
|
* test/test_net_ping.rb
|
data/README
CHANGED
@@ -4,9 +4,14 @@
|
|
4
4
|
== Prerequisites
|
5
5
|
* Ruby 1.8.0 or later
|
6
6
|
* The win32-open3 and windows-pr libraries are required on MS Windows
|
7
|
-
|
7
|
+
when using the Net::Ping::External class.
|
8
|
+
* Windows 2000 or later is required to use the Ping::WMI class.
|
8
9
|
|
9
10
|
== Installation
|
11
|
+
=== Remote Installation
|
12
|
+
gem install net-ping
|
13
|
+
|
14
|
+
=== Local Installation
|
10
15
|
rake test (optional)
|
11
16
|
rake install (standard) OR rake gem_install (gems)
|
12
17
|
|
data/Rakefile
CHANGED
@@ -58,4 +58,10 @@ Rake::TestTask.new("test_udp") do |t|
|
|
58
58
|
t.warning = true
|
59
59
|
t.verbose = true
|
60
60
|
t.test_files = FileList['test/test_net_ping_udp.rb']
|
61
|
-
end
|
61
|
+
end
|
62
|
+
|
63
|
+
Rake::TestTask.new("test_wmi") do |t|
|
64
|
+
t.warning = true
|
65
|
+
t.verbose = true
|
66
|
+
t.test_files = FileList['test/test_net_ping_wmi.rb']
|
67
|
+
end
|
data/doc/ping.txt
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
A simple Ruby interface to the 'ping' command.
|
3
3
|
|
4
4
|
= Synopsis
|
5
|
-
require
|
5
|
+
require 'net/ping'
|
6
6
|
include Net
|
7
7
|
|
8
|
-
Ping::TCP.
|
8
|
+
Ping::TCP.service_check = true
|
9
9
|
|
10
10
|
pt = Net::Ping::TCP.new(host)
|
11
11
|
pu = Net::Ping::UDP.new(host)
|
@@ -42,12 +42,15 @@
|
|
42
42
|
* Ping::External
|
43
43
|
* Ping::HTTP
|
44
44
|
* Ping::ICMP
|
45
|
+
* Ping::WMI
|
45
46
|
|
46
47
|
All Ping classes are children of the Ping parent class (which should
|
47
48
|
never be instantiated directly).
|
48
49
|
|
49
50
|
The Ping::ICMP class requires root privileges on UNIX systems.
|
50
51
|
|
52
|
+
The Ping::WMI class only works on MS Windows.
|
53
|
+
|
51
54
|
== Net::Ping
|
52
55
|
Net::Ping.new(host=nil, port=7, timeout=5)
|
53
56
|
Creates and returns a new Ping object. If the host is not specified
|
@@ -121,6 +124,17 @@ Ping::HTTP#uri=(uri)
|
|
121
124
|
Ping::ICMP#duration
|
122
125
|
The time it took to ping the host. Not a precise value but a good estimate.
|
123
126
|
|
127
|
+
== Ping::WMI
|
128
|
+
Ping::WMI#ping(host, options={})
|
129
|
+
Unlike other Ping classes, this method returns a PingStatus struct that
|
130
|
+
contains various bits of information about the ping itself. The PingStatus
|
131
|
+
struct is a wrapper for the Win32_PingStatus WMI class.
|
132
|
+
|
133
|
+
In addition, you can pass options that will be interpreted as WQL parameters.
|
134
|
+
|
135
|
+
Ping::WMI#ping?(host, options={})
|
136
|
+
Returns whether or not the ping succeeded.
|
137
|
+
|
124
138
|
= Common Instance Methods
|
125
139
|
Ping#exception
|
126
140
|
Returns the error string that was set if a ping call failed. If an exception
|
@@ -200,8 +214,12 @@ Ping#warning
|
|
200
214
|
Net::Traceroute Perl module by Daniel Hagerty.
|
201
215
|
|
202
216
|
= Known Bugs
|
203
|
-
You may see a test failure from the
|
204
|
-
|
217
|
+
You may see a test failure from the test_net_ping_tcp test case. You can
|
218
|
+
ignore these.
|
219
|
+
|
220
|
+
The socket library that ships with the Windows One-Click installer has
|
221
|
+
known issues. This may cause the Ping::ICMP class to fail. In fact, I
|
222
|
+
make an effort to skip those tests if I detect the one-click installer.
|
205
223
|
|
206
224
|
Please report any bugs on the project page at
|
207
225
|
http://www.rubyforge.org/projects/shards.
|
@@ -218,7 +236,7 @@ Ping#warning
|
|
218
236
|
Ruby's
|
219
237
|
|
220
238
|
= Copyright
|
221
|
-
(C) 2003-
|
239
|
+
(C) 2003-2009 Daniel J. Berger, All Rights Reserved
|
222
240
|
|
223
241
|
= Warranty
|
224
242
|
This package is provided "as is" and without any express or
|
@@ -0,0 +1,18 @@
|
|
1
|
+
base = File.basename(Dir.pwd)
|
2
|
+
|
3
|
+
if base == "examples" || base =~ /net-pingsimple.*/
|
4
|
+
Dir.chdir("..") if base == "examples"
|
5
|
+
$LOAD_PATH.unshift(Dir.pwd)
|
6
|
+
end
|
7
|
+
|
8
|
+
require "net/ping"
|
9
|
+
include Net
|
10
|
+
|
11
|
+
good = "www.rubyforge.org"
|
12
|
+
bad = "foo.bar.baz"
|
13
|
+
|
14
|
+
pe = PingExternal.new(good)
|
15
|
+
p pe.ping?
|
16
|
+
|
17
|
+
pe = PingExternal.new(bad)
|
18
|
+
p pe.ping?
|
@@ -0,0 +1,19 @@
|
|
1
|
+
base = File.basename(Dir.pwd)
|
2
|
+
|
3
|
+
if base == "examples" || base =~ /net-pingsimple.*/
|
4
|
+
Dir.chdir("..") if base == "examples"
|
5
|
+
$LOAD_PATH.unshift(Dir.pwd)
|
6
|
+
end
|
7
|
+
|
8
|
+
require "net/ping"
|
9
|
+
include Net
|
10
|
+
|
11
|
+
good = "http://www.pragmaticprogrammer.com/index.html"
|
12
|
+
bad = "http://www.ruby-lang.org/index.html"
|
13
|
+
|
14
|
+
hp = PingHTTP.new(good)
|
15
|
+
p hp.ping?
|
16
|
+
|
17
|
+
hp = PingHTTP.new(bad)
|
18
|
+
p hp.ping?
|
19
|
+
p hp.exception
|
@@ -0,0 +1,22 @@
|
|
1
|
+
base = File.basename(Dir.pwd)
|
2
|
+
|
3
|
+
if base == "examples" || base =~ /net-pingsimple.*/
|
4
|
+
Dir.chdir("..") if base == "examples"
|
5
|
+
$LOAD_PATH.unshift(Dir.pwd)
|
6
|
+
end
|
7
|
+
|
8
|
+
host = "www.ruby-lang.org"
|
9
|
+
|
10
|
+
require "net/ping"
|
11
|
+
include Net
|
12
|
+
|
13
|
+
good = "www.rubyforge.org"
|
14
|
+
bad = "foo.bar.baz"
|
15
|
+
|
16
|
+
PingTCP.ecr = true
|
17
|
+
|
18
|
+
pe = PingTCP.new(good,"http")
|
19
|
+
p pe.ping?
|
20
|
+
|
21
|
+
pe = PingTCP.new(bad)
|
22
|
+
p pe.ping?
|
@@ -0,0 +1,15 @@
|
|
1
|
+
base = File.basename(Dir.pwd)
|
2
|
+
|
3
|
+
if base == "examples" || base =~ /net-pingsimple.*/
|
4
|
+
Dir.chdir("..") if base == "examples"
|
5
|
+
$LOAD_PATH.unshift(Dir.pwd)
|
6
|
+
end
|
7
|
+
|
8
|
+
require "net/ping"
|
9
|
+
include Net
|
10
|
+
|
11
|
+
host = "www.ruby-lang.org"
|
12
|
+
u = PingUDP.new(host)
|
13
|
+
p u.ping?
|
14
|
+
|
15
|
+
puts "Done"
|
data/lib/net/ping/external.rb
CHANGED
@@ -46,6 +46,7 @@ module Net
|
|
46
46
|
|
47
47
|
begin
|
48
48
|
e = nil
|
49
|
+
|
49
50
|
Timeout.timeout(@timeout){
|
50
51
|
input, output, error = Open3.popen3(pstring)
|
51
52
|
e = error.gets # Can't chomp yet, might be nil
|
@@ -90,6 +91,10 @@ module Net
|
|
90
91
|
end
|
91
92
|
rescue Exception => err
|
92
93
|
@exception = err.message
|
94
|
+
ensure
|
95
|
+
input.close if input && !input.closed?
|
96
|
+
error.close if error && !error.closed?
|
97
|
+
output.close if output && !output.closed?
|
93
98
|
end
|
94
99
|
|
95
100
|
# There is no duration if the ping failed
|
data/lib/net/ping/icmp.rb
CHANGED
data/lib/net/ping/ping.rb
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
require 'socket'
|
2
2
|
require 'timeout'
|
3
3
|
|
4
|
+
# The Net module serves as a namespace only.
|
5
|
+
#
|
4
6
|
module Net
|
7
|
+
|
8
|
+
# The Ping class serves as an abstract base class for all other Ping class
|
9
|
+
# types. You should not instantiate this class directly.
|
10
|
+
#
|
5
11
|
class Ping
|
6
|
-
VERSION = '1.
|
12
|
+
VERSION = '1.3.0'
|
7
13
|
|
8
14
|
# The host to ping. In the case of Ping::HTTP, this is the URI.
|
9
15
|
attr_accessor :host
|
data/lib/net/ping/wmi.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
$LOAD_PATH.unshift File.dirname(__FILE__)
|
2
|
+
require 'ping'
|
3
|
+
require 'win32ole'
|
4
|
+
|
5
|
+
# The Net module serves as a namespace only.
|
6
|
+
#
|
7
|
+
module Net
|
8
|
+
|
9
|
+
# The Ping::WMI class encapsulates the Win32_PingStatus WMI class for
|
10
|
+
# MS Windows.
|
11
|
+
#
|
12
|
+
class Ping::WMI < Ping
|
13
|
+
|
14
|
+
PingStatus = Struct.new(
|
15
|
+
'PingStatus',
|
16
|
+
:address,
|
17
|
+
:buffer_size,
|
18
|
+
:no_fragmentation,
|
19
|
+
:primary_address_resolution_status,
|
20
|
+
:protocol_address,
|
21
|
+
:protocol_address_resolved,
|
22
|
+
:record_route,
|
23
|
+
:reply_inconsistency,
|
24
|
+
:reply_size,
|
25
|
+
:resolve_address_names,
|
26
|
+
:response_time,
|
27
|
+
:response_time_to_live,
|
28
|
+
:route_record,
|
29
|
+
:route_record_resolved,
|
30
|
+
:source_route,
|
31
|
+
:source_route_type,
|
32
|
+
:status_code,
|
33
|
+
:timeout,
|
34
|
+
:timestamp_record,
|
35
|
+
:timestamp_record_address,
|
36
|
+
:timestamp_record_address_resolved,
|
37
|
+
:timestamp_route,
|
38
|
+
:time_to_live,
|
39
|
+
:type_of_service
|
40
|
+
)
|
41
|
+
|
42
|
+
# Unlike the ping method for other Ping subclasses, this version returns
|
43
|
+
# a PingStatus struct which contains various bits of information about
|
44
|
+
# the results of the ping itself, such as response time.
|
45
|
+
#
|
46
|
+
# In addition, this version allows you to pass certain options that are
|
47
|
+
# then passed on to the underlying WQL query. See the MSDN documentation
|
48
|
+
# on Win32_PingStatus for details.
|
49
|
+
#
|
50
|
+
# Examples:
|
51
|
+
#
|
52
|
+
# # Ping with no options
|
53
|
+
# Ping::WMI.ping('www.perl.com')
|
54
|
+
#
|
55
|
+
# # Ping with options
|
56
|
+
# Ping::WMI.ping('www.perl.com', :BufferSize => 64, :NoFragmentation => true)
|
57
|
+
#--
|
58
|
+
# The PingStatus struct is a wrapper for the Win32_PingStatus WMI class.
|
59
|
+
#
|
60
|
+
def ping(host = @host, options = {})
|
61
|
+
super(host)
|
62
|
+
|
63
|
+
lhost = Socket.gethostname
|
64
|
+
|
65
|
+
cs = "winmgmts:{impersonationLevel=impersonate}!//#{lhost}/root/cimv2"
|
66
|
+
wmi = WIN32OLE.connect(cs)
|
67
|
+
|
68
|
+
query = "select * from win32_pingstatus where address = '#{host}'"
|
69
|
+
|
70
|
+
unless options.empty?
|
71
|
+
options.each{ |key, value|
|
72
|
+
if value.is_a?(String)
|
73
|
+
query << " and #{key} = '#{value}'"
|
74
|
+
else
|
75
|
+
query << " and #{key} = #{value}"
|
76
|
+
end
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
status = Struct::PingStatus.new
|
81
|
+
|
82
|
+
wmi.execquery(query).each{ |obj|
|
83
|
+
status.address = obj.Address
|
84
|
+
status.buffer_size = obj.BufferSize
|
85
|
+
status.no_fragmentation = obj.NoFragmentation
|
86
|
+
status.primary_address_resolution_status = obj.PrimaryAddressResolutionStatus
|
87
|
+
status.protocol_address = obj.ProtocolAddress
|
88
|
+
status.protocol_address_resolved = obj.ProtocolAddressResolved
|
89
|
+
status.record_route = obj.RecordRoute
|
90
|
+
status.reply_inconsistency = obj.ReplyInconsistency
|
91
|
+
status.reply_size = obj.ReplySize
|
92
|
+
status.resolve_address_names = obj.ResolveAddressNames
|
93
|
+
status.response_time = obj.ResponseTime
|
94
|
+
status.response_time_to_live = obj.ResponseTimeToLive
|
95
|
+
status.route_record = obj.RouteRecord
|
96
|
+
status.route_record_resolved = obj.RouteRecordResolved
|
97
|
+
status.source_route = obj.SourceRoute
|
98
|
+
status.source_route_type = obj.SourceRouteType
|
99
|
+
status.status_code = obj.StatusCode
|
100
|
+
status.timeout = obj.Timeout
|
101
|
+
status.timestamp_record = obj.TimeStampRecord
|
102
|
+
status.timestamp_record_address = obj.TimeStampRecordAddress
|
103
|
+
status.timestamp_record_address_resolved = obj.TimeStampRecordAddressResolved
|
104
|
+
status.timestamp_route = obj.TimeStampRoute
|
105
|
+
status.time_to_live = obj.TimeToLive
|
106
|
+
status.type_of_service = obj.TypeOfService
|
107
|
+
}
|
108
|
+
|
109
|
+
status
|
110
|
+
end
|
111
|
+
|
112
|
+
# Unlike Net::Ping::WMI#ping, this method returns true or false to
|
113
|
+
# indicate whether or not the ping was successful.
|
114
|
+
#
|
115
|
+
def ping?(host = @host, options = {})
|
116
|
+
ping(host, options).status_code == 0
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
data/net-ping.gemspec
CHANGED
@@ -1,19 +1,18 @@
|
|
1
|
-
require
|
1
|
+
require 'rubygems'
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |gem|
|
4
|
-
gem.name
|
5
|
-
gem.version
|
6
|
-
gem.author
|
7
|
-
gem.email
|
8
|
-
gem.homepage
|
9
|
-
gem.summary
|
10
|
-
gem.test_file
|
11
|
-
gem.has_rdoc
|
12
|
-
gem.rubyforge_project =
|
13
|
-
gem.files
|
14
|
-
gem.
|
15
|
-
|
16
|
-
gem.extra_rdoc_files = ["README", "CHANGES", "doc/ping.txt"]
|
4
|
+
gem.name = 'net-ping'
|
5
|
+
gem.version = '1.3.0'
|
6
|
+
gem.author = 'Daniel J. Berger'
|
7
|
+
gem.email = 'djberg96@gmail.com'
|
8
|
+
gem.homepage = 'http://www.rubyforge.org/projects/shards'
|
9
|
+
gem.summary = 'A ping interface for Ruby.'
|
10
|
+
gem.test_file = 'test/test_net_ping.rb'
|
11
|
+
gem.has_rdoc = true
|
12
|
+
gem.rubyforge_project = 'shards'
|
13
|
+
gem.files = Dir['**/*'].reject{ |f| f.include?('CVS') }
|
14
|
+
gem.extra_rdoc_files = ['README', 'CHANGES', 'doc/ping.txt']
|
15
|
+
|
17
16
|
gem.add_dependency('test-unit', '>= 2.0.2')
|
18
17
|
|
19
18
|
case RUBY_PLATFORM
|
@@ -25,12 +24,12 @@ spec = Gem::Specification.new do |gem|
|
|
25
24
|
gem.platform = Gem::Platform::RUBY
|
26
25
|
end
|
27
26
|
|
28
|
-
description =
|
29
|
-
description <<
|
27
|
+
description = 'A ping interface for Ruby. Includes TCP, HTTP, ICMP, UDP, '
|
28
|
+
description << 'External, and WMI ping interfaces.'
|
30
29
|
gem.description = description
|
31
30
|
end
|
32
31
|
|
33
|
-
if $
|
34
|
-
Gem.manage_gems if Gem::RubyGemsVersion.to_f
|
32
|
+
if $PROGRAM_NAME == __FILE__
|
33
|
+
Gem.manage_gems if Gem::RubyGemsVersion.to_f < 1.0
|
35
34
|
Gem::Builder.new(spec).build
|
36
35
|
end
|
data/test/test_net_ping_http.rb
CHANGED
data/test/test_net_ping_icmp.rb
CHANGED
@@ -17,17 +17,24 @@ unless Process.euid == 0
|
|
17
17
|
end
|
18
18
|
|
19
19
|
class TC_PingICMP < Test::Unit::TestCase
|
20
|
+
def self.startup
|
21
|
+
@@one_click = Config::CONFIG['host_os'] == 'mswin32'
|
22
|
+
end
|
23
|
+
|
20
24
|
def setup
|
21
25
|
@host = "www.ruby-lang.org"
|
22
26
|
@icmp = Ping::ICMP.new(@host)
|
23
27
|
end
|
24
28
|
|
25
29
|
def test_version
|
26
|
-
assert_equal('1.
|
30
|
+
assert_equal('1.3.0', PingICMP::VERSION)
|
27
31
|
end
|
28
32
|
|
29
33
|
def test_ping
|
30
34
|
assert_respond_to(@icmp, :ping)
|
35
|
+
|
36
|
+
omit_if(@@one_click, 'Unreliable socket library')
|
37
|
+
|
31
38
|
assert_nothing_raised{ @icmp.ping }
|
32
39
|
assert_nothing_raised{ @icmp.ping(@host) }
|
33
40
|
end
|
@@ -35,27 +42,34 @@ class TC_PingICMP < Test::Unit::TestCase
|
|
35
42
|
def test_ping_aliases_basic
|
36
43
|
assert_respond_to(@icmp, :ping?)
|
37
44
|
assert_respond_to(@icmp, :pingecho)
|
45
|
+
|
46
|
+
omit_if(@@one_click, 'Unreliable socket library')
|
47
|
+
|
38
48
|
assert_nothing_raised{ @icmp.ping? }
|
39
49
|
assert_nothing_raised{ @icmp.ping?(@host) }
|
40
50
|
end
|
41
51
|
|
42
52
|
def test_ping_returns_boolean
|
53
|
+
omit_if(@@one_click, 'Unreliable socket library')
|
43
54
|
assert_boolean(@icmp.pingecho)
|
44
55
|
assert_boolean(@icmp.pingecho(@host))
|
45
56
|
end
|
46
57
|
|
47
58
|
def test_ping_expected_failure
|
59
|
+
omit_if(@@one_click, 'Unreliable socket library')
|
48
60
|
assert_false(Ping::ICMP.new('bogus').ping?)
|
49
61
|
assert_false(Ping::ICMP.new('http://www.asdfhjklasdfhlkj.com').ping?)
|
50
62
|
end
|
51
63
|
|
52
64
|
def test_bind
|
65
|
+
omit_if(@@one_click, 'Unreliable socket library')
|
53
66
|
assert_respond_to(@icmp, :bind)
|
54
67
|
assert_nothing_raised{ @icmp.bind(Socket.gethostname) }
|
55
68
|
assert_nothing_raised{ @icmp.bind(Socket.gethostname, 80) }
|
56
69
|
end
|
57
70
|
|
58
71
|
def test_duration
|
72
|
+
omit_if(@@one_click, 'Unreliable socket library')
|
59
73
|
assert_nothing_raised{ @icmp.ping }
|
60
74
|
assert_respond_to(@icmp, :duration)
|
61
75
|
assert_kind_of(Float, @icmp.duration)
|
@@ -80,6 +94,7 @@ class TC_PingICMP < Test::Unit::TestCase
|
|
80
94
|
|
81
95
|
def test_exception
|
82
96
|
assert_respond_to(@icmp, :exception)
|
97
|
+
omit_if(@@one_click, 'Unreliable socket library')
|
83
98
|
assert_nothing_raised{ @icmp.ping }
|
84
99
|
assert_nil(@icmp.exception)
|
85
100
|
end
|
@@ -100,6 +115,7 @@ class TC_PingICMP < Test::Unit::TestCase
|
|
100
115
|
|
101
116
|
def test_odd_data_size_ok
|
102
117
|
assert_nothing_raised{ @icmp.data_size = 57 }
|
118
|
+
omit_if(@@one_click, 'Unreliable socket library')
|
103
119
|
assert_boolean(@icmp.ping)
|
104
120
|
end
|
105
121
|
|
@@ -107,4 +123,8 @@ class TC_PingICMP < Test::Unit::TestCase
|
|
107
123
|
@host = nil
|
108
124
|
@icmp = nil
|
109
125
|
end
|
126
|
+
|
127
|
+
def self.shutdown
|
128
|
+
@@one_click = nil
|
129
|
+
end
|
110
130
|
end
|
data/test/test_net_ping_tcp.rb
CHANGED
@@ -13,12 +13,13 @@ include Net
|
|
13
13
|
|
14
14
|
class TC_PingTCP < Test::Unit::TestCase
|
15
15
|
def setup
|
16
|
-
@host =
|
17
|
-
@
|
16
|
+
@host = 'www.ruby-lang.org'
|
17
|
+
@port = 'ftp'
|
18
|
+
@tcp = Ping::TCP.new(@host, @port)
|
18
19
|
end
|
19
20
|
|
20
21
|
def test_version
|
21
|
-
assert_equal('1.
|
22
|
+
assert_equal('1.3.0', PingTCP::VERSION)
|
22
23
|
end
|
23
24
|
|
24
25
|
def test_ping
|
@@ -38,7 +39,8 @@ class TC_PingTCP < Test::Unit::TestCase
|
|
38
39
|
|
39
40
|
def test_ping_service_check_false
|
40
41
|
msg = "+this test may fail depending on your network environment+"
|
41
|
-
|
42
|
+
Ping::TCP.service_check = false
|
43
|
+
@tcp = Ping::TCP.new('localhost')
|
42
44
|
assert_equal(false, @tcp.ping?, msg)
|
43
45
|
assert_equal(false, @tcp.exception.nil?, "Bad exception data")
|
44
46
|
end
|
@@ -54,7 +56,7 @@ class TC_PingTCP < Test::Unit::TestCase
|
|
54
56
|
assert_respond_to(PingTCP, :service_check=)
|
55
57
|
end
|
56
58
|
|
57
|
-
# These will be removed
|
59
|
+
# These will be removed eventually
|
58
60
|
def test_service_check_aliases
|
59
61
|
assert_respond_to(PingTCP, :econnrefused)
|
60
62
|
assert_respond_to(PingTCP, :econnrefused=)
|
@@ -66,10 +68,12 @@ class TC_PingTCP < Test::Unit::TestCase
|
|
66
68
|
assert_raises(ArgumentError){ PingTCP.service_check = "blah" }
|
67
69
|
end
|
68
70
|
|
71
|
+
# If the ping failed, the duration will be nil
|
69
72
|
def test_duration
|
70
73
|
assert_nothing_raised{ @tcp.ping }
|
71
74
|
assert_respond_to(@tcp, :duration)
|
72
|
-
|
75
|
+
omit_if(@tcp.duration.nil?, 'ping failed, skipping')
|
76
|
+
assert_kind_of(Float, @tcp.duration)
|
73
77
|
end
|
74
78
|
|
75
79
|
def test_host
|
@@ -81,7 +85,7 @@ class TC_PingTCP < Test::Unit::TestCase
|
|
81
85
|
def test_port
|
82
86
|
assert_respond_to(@tcp, :port)
|
83
87
|
assert_respond_to(@tcp, :port=)
|
84
|
-
assert_equal(
|
88
|
+
assert_equal('ftp', @tcp.port)
|
85
89
|
end
|
86
90
|
|
87
91
|
def test_timeout
|
data/test/test_net_ping_udp.rb
CHANGED
@@ -0,0 +1,88 @@
|
|
1
|
+
#######################################################################
|
2
|
+
# test_net_ping_wmi.rb
|
3
|
+
#
|
4
|
+
# Test case for the Net::Ping::WMI class. These tests will only be
|
5
|
+
# run MS Windows. You should run this test via the 'test' or
|
6
|
+
# 'test_wmi' Rake task.
|
7
|
+
#######################################################################
|
8
|
+
require 'rubygems'
|
9
|
+
gem 'test-unit'
|
10
|
+
|
11
|
+
require 'test/unit'
|
12
|
+
require 'net/ping/wmi'
|
13
|
+
include Net
|
14
|
+
|
15
|
+
class TC_Ping_WMI < Test::Unit::TestCase
|
16
|
+
def self.startup
|
17
|
+
@@windows = Config::CONFIG['host_os'] =~ /mswin|cygwin|mingw/i
|
18
|
+
end
|
19
|
+
|
20
|
+
def setup
|
21
|
+
@host = "www.ruby-lang.org"
|
22
|
+
@wmi = Ping::WMI.new(@host) if @@windows
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_version
|
26
|
+
assert_equal('1.3.0', Ping::WMI::VERSION)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_ping_basic
|
30
|
+
omit_unless(@@windows, 'skipped on Unix platforms')
|
31
|
+
assert_respond_to(@wmi, :ping)
|
32
|
+
assert_nothing_raised{ @wmi.ping }
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_ping_with_host
|
36
|
+
omit_unless(@@windows, 'skipped on Unix platforms')
|
37
|
+
assert_nothing_raised{ @wmi.ping(@host) }
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_ping_with_options
|
41
|
+
omit_unless(@@windows, 'skipped on Unix platforms')
|
42
|
+
assert_nothing_raised{ @wmi.ping(@host, :NoFragmentation => true) }
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_pingecho_alias
|
46
|
+
omit_unless(@@windows, 'skipped on Unix platforms')
|
47
|
+
assert_respond_to(@wmi, :pingecho)
|
48
|
+
assert_nothing_raised{ @wmi.pingecho }
|
49
|
+
assert_nothing_raised{ @wmi.pingecho(@host) }
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_ping_returns_struct
|
53
|
+
omit_unless(@@windows, 'skipped on Unix platforms')
|
54
|
+
assert_kind_of(Struct::PingStatus, @wmi.ping)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_ping_returns_boolean
|
58
|
+
omit_unless(@@windows, 'skipped on Unix platforms')
|
59
|
+
assert_boolean(@wmi.ping?)
|
60
|
+
assert_boolean(@wmi.ping?(@host))
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_ping_expected_failure
|
64
|
+
omit_unless(@@windows, 'skipped on Unix platforms')
|
65
|
+
assert_false(Ping::WMI.new('bogus').ping?)
|
66
|
+
assert_false(Ping::WMI.new('http://www.asdfhjklasdfhlkj.com').ping?)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_exception
|
70
|
+
omit_unless(@@windows, 'skipped on Unix platforms')
|
71
|
+
assert_respond_to(@wmi, :exception)
|
72
|
+
assert_nothing_raised{ @wmi.ping }
|
73
|
+
assert_nil(@wmi.exception)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_warning
|
77
|
+
assert_respond_to(@wmi, :warning)
|
78
|
+
end
|
79
|
+
|
80
|
+
def teardown
|
81
|
+
@host = nil
|
82
|
+
@wmi = nil
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.shutdown
|
86
|
+
@@windows = nil
|
87
|
+
end
|
88
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-ping
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: x86-mswin32-60
|
6
6
|
authors:
|
7
7
|
- Daniel J. Berger
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-19 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 0.2.7
|
44
44
|
version:
|
45
|
-
description: A ping interface for Ruby. Includes TCP, HTTP, ICMP, UDP, and
|
45
|
+
description: A ping interface for Ruby. Includes TCP, HTTP, ICMP, UDP, External, and WMI ping interfaces.
|
46
46
|
email: djberg96@gmail.com
|
47
47
|
executables: []
|
48
48
|
|
@@ -53,32 +53,35 @@ extra_rdoc_files:
|
|
53
53
|
- CHANGES
|
54
54
|
- doc/ping.txt
|
55
55
|
files:
|
56
|
-
- lib/net/ping
|
57
|
-
- lib/net/ping.rb
|
58
56
|
- CHANGES
|
59
|
-
- doc
|
60
|
-
- examples
|
61
|
-
-
|
57
|
+
- doc/ping.txt
|
58
|
+
- examples/test_pingexternal.rb
|
59
|
+
- examples/test_pinghttp.rb
|
60
|
+
- examples/test_pingtcp.rb
|
61
|
+
- examples/test_pingudp.rb
|
62
|
+
- lib/net/ping/external.rb
|
63
|
+
- lib/net/ping/http.rb
|
64
|
+
- lib/net/ping/icmp.rb
|
65
|
+
- lib/net/ping/ping.rb
|
66
|
+
- lib/net/ping/tcp.rb
|
67
|
+
- lib/net/ping/udp.rb
|
68
|
+
- lib/net/ping/wmi.rb
|
69
|
+
- lib/net/ping.rb
|
62
70
|
- MANIFEST
|
63
71
|
- net-ping.gemspec
|
64
72
|
- Rakefile
|
65
73
|
- README
|
66
|
-
- test
|
67
74
|
- test/test_net_ping.rb
|
68
75
|
- test/test_net_ping_external.rb
|
69
76
|
- test/test_net_ping_http.rb
|
70
77
|
- test/test_net_ping_icmp.rb
|
71
78
|
- test/test_net_ping_tcp.rb
|
72
79
|
- test/test_net_ping_udp.rb
|
73
|
-
-
|
74
|
-
- lib/net/ping/http.rb
|
75
|
-
- lib/net/ping/icmp.rb
|
76
|
-
- lib/net/ping/ping.rb
|
77
|
-
- lib/net/ping/tcp.rb
|
78
|
-
- lib/net/ping/udp.rb
|
79
|
-
- doc/ping.txt
|
80
|
+
- test/test_net_ping_wmi.rb
|
80
81
|
has_rdoc: true
|
81
82
|
homepage: http://www.rubyforge.org/projects/shards
|
83
|
+
licenses: []
|
84
|
+
|
82
85
|
post_install_message:
|
83
86
|
rdoc_options: []
|
84
87
|
|
@@ -99,9 +102,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
102
|
requirements: []
|
100
103
|
|
101
104
|
rubyforge_project: shards
|
102
|
-
rubygems_version: 1.3.
|
105
|
+
rubygems_version: 1.3.3
|
103
106
|
signing_key:
|
104
|
-
specification_version:
|
107
|
+
specification_version: 3
|
105
108
|
summary: A ping interface for Ruby.
|
106
109
|
test_files:
|
107
110
|
- test/test_net_ping.rb
|