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 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
- when using the Net::Ping::External class.
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 "net/ping"
5
+ require 'net/ping'
6
6
  include Net
7
7
 
8
- Ping::TCP.econnrefused = true
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 tc_pingtcp test case. You can ignore
204
- this.
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-2008 Daniel J. Berger, All Rights Reserved
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"
@@ -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
@@ -85,6 +85,7 @@ module Net
85
85
  begin
86
86
  saddr = Socket.pack_sockaddr_in(0, host)
87
87
  rescue Exception
88
+ socket.close unless socket.closed?
88
89
  return bool
89
90
  end
90
91
 
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.2.3'
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
@@ -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 "rubygems"
1
+ require 'rubygems'
2
2
 
3
3
  spec = Gem::Specification.new do |gem|
4
- gem.name = "net-ping"
5
- gem.version = "1.2.3"
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["lib/net/*"] + Dir['[A-Z]*'] + Dir['test/*']
14
- gem.files += Dir["lib/net/ping/*"]
15
- gem.files.reject! { |fn| fn.include? "CVS" }
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 = "A ping interface for Ruby. Includes TCP, HTTP, ICMP, UDP, "
29
- description << "and External ping interfaces."
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 $0 == __FILE__
34
- Gem.manage_gems if Gem::RubyGemsVersion.to_f > 1.0
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
@@ -20,7 +20,7 @@ class TC_PingExternal < Test::Unit::TestCase
20
20
  end
21
21
 
22
22
  def test_version
23
- assert_equal('1.2.3', PingExternal::VERSION)
23
+ assert_equal('1.3.0', PingExternal::VERSION)
24
24
  end
25
25
 
26
26
  def test_ping
@@ -19,7 +19,7 @@ class TC_PingHTTP < Test::Unit::TestCase
19
19
  end
20
20
 
21
21
  def test_version
22
- assert_equal('1.2.3', Ping::HTTP::VERSION)
22
+ assert_equal('1.3.0', Ping::HTTP::VERSION)
23
23
  end
24
24
 
25
25
  def test_ping
@@ -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.2.3', PingICMP::VERSION)
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
@@ -13,12 +13,13 @@ include Net
13
13
 
14
14
  class TC_PingTCP < Test::Unit::TestCase
15
15
  def setup
16
- @host = Socket.gethostname
17
- @tcp = Ping::TCP.new(@host)
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.2.3', PingTCP::VERSION)
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
- PingTCP.service_check = false
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 in 1.3.0
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
- assert_kind_of(Float, @tcp.duration, '+nil if the ping failed+')
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(7, @tcp.port)
88
+ assert_equal('ftp', @tcp.port)
85
89
  end
86
90
 
87
91
  def test_timeout
@@ -22,7 +22,7 @@ class TC_PingUDP < Test::Unit::TestCase
22
22
  end
23
23
 
24
24
  def test_version
25
- assert_equal('1.2.3', Ping::UDP::VERSION)
25
+ assert_equal('1.3.0', Ping::UDP::VERSION)
26
26
  end
27
27
 
28
28
  def test_ping
@@ -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.2.3
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-01-13 00:00:00 -07:00
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 External ping interfaces.
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
- - lib
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
- - lib/net/ping/external.rb
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.1
105
+ rubygems_version: 1.3.3
103
106
  signing_key:
104
- specification_version: 2
107
+ specification_version: 3
105
108
  summary: A ping interface for Ruby.
106
109
  test_files:
107
110
  - test/test_net_ping.rb