net-ping 1.1.1 → 1.2.0
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 +23 -0
- data/MANIFEST +10 -2
- data/README +16 -1
- data/doc/ping.txt +114 -94
- data/lib/net/ping.rb +11 -237
- data/lib/net/ping/external.rb +92 -0
- data/lib/net/ping/http.rb +83 -0
- data/lib/net/ping/icmp.rb +168 -0
- data/lib/net/ping/ping.rb +81 -0
- data/lib/net/ping/tcp.rb +84 -0
- data/lib/net/ping/udp.rb +90 -0
- data/test/tc_pingexternal.rb +31 -6
- data/test/tc_pinghttp.rb +32 -7
- data/test/tc_pingicmp.rb +84 -0
- data/test/tc_pingtcp.rb +29 -5
- data/test/tc_pingudp.rb +33 -7
- data/test/ts_ping.rb +10 -0
- metadata +17 -8
data/lib/net/ping/udp.rb
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
$LOAD_PATH.unshift File.dirname(__FILE__)
|
2
|
+
require 'ping'
|
3
|
+
|
4
|
+
module Net
|
5
|
+
class Ping::UDP < Ping
|
6
|
+
MAX_DATA = 64
|
7
|
+
|
8
|
+
# The data to send to the remote host. By default this is 'ping'.
|
9
|
+
# This should be MAX_DATA size characters or less.
|
10
|
+
#
|
11
|
+
attr_reader :data
|
12
|
+
|
13
|
+
# Creates and returns a new Ping::UDP object. This is effectively
|
14
|
+
# identical to its superclass constructor.
|
15
|
+
#
|
16
|
+
def initialize(host=nil, port=nil, timeout=5)
|
17
|
+
@data = 'ping'
|
18
|
+
|
19
|
+
super(host, port, timeout)
|
20
|
+
|
21
|
+
@bind_host = nil
|
22
|
+
@bind_port = nil
|
23
|
+
end
|
24
|
+
|
25
|
+
# Sets the data string sent to the remote host. This value cannot have
|
26
|
+
# a size greater than MAX_DATA.
|
27
|
+
#
|
28
|
+
def data=(string)
|
29
|
+
if string.size > MAX_DATA
|
30
|
+
err = "cannot set data string larger than #{MAX_DATA} characters"
|
31
|
+
raise ArgumentError, err
|
32
|
+
end
|
33
|
+
|
34
|
+
@data = string
|
35
|
+
end
|
36
|
+
|
37
|
+
# Associates the local end of the UDP connection with the given +host+
|
38
|
+
# and +port+. This is essentially a wrapper for UDPSocket#bind.
|
39
|
+
#
|
40
|
+
def bind(host, port)
|
41
|
+
@bind_host = host
|
42
|
+
@bind_port = port
|
43
|
+
end
|
44
|
+
|
45
|
+
# Sends a simple text string to the host and checks the return string. If
|
46
|
+
# the string sent and the string returned are a match then the ping was
|
47
|
+
# successful and true is returned. Otherwise, false is returned.
|
48
|
+
#
|
49
|
+
def ping(host = @host)
|
50
|
+
super(host)
|
51
|
+
|
52
|
+
bool = false
|
53
|
+
udp = UDPSocket.open
|
54
|
+
array = []
|
55
|
+
|
56
|
+
if @bind_host
|
57
|
+
udp.bind(@bind_host, @bind_port)
|
58
|
+
end
|
59
|
+
|
60
|
+
start_time = Time.now
|
61
|
+
|
62
|
+
begin
|
63
|
+
Timeout.timeout(@timeout){
|
64
|
+
udp.connect(host, @port)
|
65
|
+
udp.send(@data, 0)
|
66
|
+
array = udp.recvfrom(MAX_DATA)
|
67
|
+
}
|
68
|
+
rescue Exception => err
|
69
|
+
@exception = err
|
70
|
+
else
|
71
|
+
if array[0] == @data
|
72
|
+
bool = true
|
73
|
+
end
|
74
|
+
ensure
|
75
|
+
udp.close if udp
|
76
|
+
end
|
77
|
+
|
78
|
+
# There is no duration if the ping failed
|
79
|
+
@duration = Time.now - start_time if bool
|
80
|
+
|
81
|
+
bool
|
82
|
+
end
|
83
|
+
|
84
|
+
alias ping? ping
|
85
|
+
alias pingecho ping
|
86
|
+
end
|
87
|
+
|
88
|
+
# Class alias for backwards compatibility
|
89
|
+
PingUDP = Ping::UDP
|
90
|
+
end
|
data/test/tc_pingexternal.rb
CHANGED
@@ -11,26 +11,26 @@ if base == "test" || base =~ /net-pingsimple.*/
|
|
11
11
|
end
|
12
12
|
|
13
13
|
require "test/unit"
|
14
|
-
require "net/ping"
|
14
|
+
require "net/ping/external"
|
15
15
|
include Net
|
16
16
|
|
17
17
|
class TC_PingExternal < Test::Unit::TestCase
|
18
18
|
def setup
|
19
19
|
@host = "www.ruby-lang.org"
|
20
20
|
@bogus = "foo.bar.baz"
|
21
|
-
@pe =
|
22
|
-
@bad =
|
21
|
+
@pe = Ping::External.new(@host)
|
22
|
+
@bad = Ping::External.new(@bogus)
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_version
|
26
|
-
assert_equal("1.
|
26
|
+
assert_equal("1.2.0", PingExternal::VERSION)
|
27
27
|
end
|
28
28
|
|
29
29
|
def test_ping
|
30
30
|
assert_respond_to(@pe, :ping)
|
31
31
|
assert_respond_to(@pe, :ping?)
|
32
32
|
assert_nothing_raised{ @pe.ping }
|
33
|
-
|
33
|
+
assert_nothing_raised{ @pe.ping(@host) }
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_good_ping
|
@@ -42,14 +42,39 @@ class TC_PingExternal < Test::Unit::TestCase
|
|
42
42
|
assert_equal(false, @bad.exception.nil?, "Bad exception data")
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
45
|
+
def test_duration
|
46
|
+
assert_nothing_raised{ @pe.ping }
|
47
|
+
assert_respond_to(@pe, :duration)
|
48
|
+
assert_kind_of(Float, @pe.duration)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_host
|
46
52
|
assert_respond_to(@pe, :host)
|
47
53
|
assert_respond_to(@pe, :host=)
|
54
|
+
assert_equal('www.ruby-lang.org', @pe.host)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_port
|
48
58
|
assert_respond_to(@pe, :port)
|
49
59
|
assert_respond_to(@pe, :port=)
|
60
|
+
assert_equal(7, @pe.port)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_timeout
|
50
64
|
assert_respond_to(@pe, :timeout)
|
51
65
|
assert_respond_to(@pe, :timeout=)
|
66
|
+
assert_equal(5, @pe.timeout)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_exception
|
52
70
|
assert_respond_to(@pe, :exception)
|
71
|
+
assert_nothing_raised{ @pe.ping }
|
72
|
+
assert_nothing_raised{ @bad.ping }
|
73
|
+
assert_nil(@pe.exception)
|
74
|
+
assert_not_nil(@bad.exception)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_warning
|
53
78
|
assert_respond_to(@pe, :warning)
|
54
79
|
end
|
55
80
|
|
data/test/tc_pinghttp.rb
CHANGED
@@ -11,18 +11,18 @@ if base == "test" || base =~ /net-pingsimple.*/
|
|
11
11
|
end
|
12
12
|
|
13
13
|
require "test/unit"
|
14
|
-
require "net/ping"
|
14
|
+
require "net/ping/http"
|
15
15
|
include Net
|
16
16
|
|
17
17
|
class TC_PingHTTP < Test::Unit::TestCase
|
18
18
|
def setup
|
19
19
|
@uri = "http://www.pragmaticprogrammer.com/index.html"
|
20
|
-
@http =
|
21
|
-
@bad =
|
20
|
+
@http = Ping::HTTP.new(@uri)
|
21
|
+
@bad = Ping::HTTP.new("http://www.blabfoobarurgh.com") # One hopes not
|
22
22
|
end
|
23
23
|
|
24
24
|
def test_version
|
25
|
-
assert_equal("1.
|
25
|
+
assert_equal("1.2.0", PingHTTP::VERSION)
|
26
26
|
end
|
27
27
|
|
28
28
|
def test_ping
|
@@ -38,17 +38,42 @@ class TC_PingHTTP < Test::Unit::TestCase
|
|
38
38
|
assert_not_nil(@bad.exception)
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
41
|
+
def test_duration
|
42
|
+
assert_nothing_raised{ @http.ping }
|
43
|
+
assert_respond_to(@http, :duration)
|
44
|
+
assert_kind_of(Float, @http.duration)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_host
|
42
48
|
assert_respond_to(@http, :host)
|
43
49
|
assert_respond_to(@http, :host=)
|
50
|
+
assert_respond_to(@http, :uri) # Alias
|
51
|
+
assert_respond_to(@http, :uri=) # Alias
|
52
|
+
assert_equal('http://www.pragmaticprogrammer.com/index.html', @http.host)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_port
|
44
56
|
assert_respond_to(@http, :port)
|
45
57
|
assert_respond_to(@http, :port=)
|
58
|
+
assert_equal(80, @http.port)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_timeout
|
46
62
|
assert_respond_to(@http, :timeout)
|
47
63
|
assert_respond_to(@http, :timeout=)
|
64
|
+
assert_equal(5, @http.timeout)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_exception
|
48
68
|
assert_respond_to(@http, :exception)
|
69
|
+
assert_nothing_raised{ @http.ping }
|
70
|
+
assert_nothing_raised{ @bad.ping }
|
71
|
+
assert_nil(@http.exception)
|
72
|
+
assert_not_nil(@bad.exception)
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_warning
|
49
76
|
assert_respond_to(@http, :warning)
|
50
|
-
assert_respond_to(@http, :uri)
|
51
|
-
assert_respond_to(@http, :uri=)
|
52
77
|
end
|
53
78
|
|
54
79
|
def teardown
|
data/test/tc_pingicmp.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
#######################################################################
|
2
|
+
# tc_pingicmp.rb
|
3
|
+
#
|
4
|
+
# Test case for the Net::PingICMP class. You must run this test case
|
5
|
+
# with root privileges on UNIX systems.
|
6
|
+
#######################################################################
|
7
|
+
base = File.basename(Dir.pwd)
|
8
|
+
|
9
|
+
if base == "test" || base =~ /net-pingsimple.*/
|
10
|
+
Dir.chdir("..") if base == "test"
|
11
|
+
$LOAD_PATH.unshift(Dir.pwd + "/lib")
|
12
|
+
end
|
13
|
+
|
14
|
+
require "test/unit"
|
15
|
+
require "net/ping/icmp"
|
16
|
+
include Net
|
17
|
+
|
18
|
+
class TC_PingICMP < Test::Unit::TestCase
|
19
|
+
def setup
|
20
|
+
@host = "www.ruby-lang.org"
|
21
|
+
@icmp = Ping::ICMP.new(@host)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_version
|
25
|
+
assert_equal("1.2.0", PingICMP::VERSION)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_ping
|
29
|
+
assert_respond_to(@icmp, :ping)
|
30
|
+
assert_respond_to(@icmp, :ping?)
|
31
|
+
assert_nothing_raised{ @icmp.ping }
|
32
|
+
assert_nothing_raised{ @icmp.ping(@host) }
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_bind
|
36
|
+
assert_respond_to(@icmp, :bind)
|
37
|
+
assert_nothing_raised{ @icmp.bind(Socket.gethostname) }
|
38
|
+
assert_nothing_raised{ @icmp.bind(Socket.gethostname, 80) }
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_duration
|
42
|
+
assert_nothing_raised{ @icmp.ping }
|
43
|
+
assert_respond_to(@icmp, :duration)
|
44
|
+
assert_kind_of(Float, @icmp.duration)
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_duration
|
48
|
+
assert_nothing_raised{ @icmp.ping }
|
49
|
+
assert_respond_to(@icmp, :duration)
|
50
|
+
assert_kind_of(Float, @icmp.duration)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_host
|
54
|
+
assert_respond_to(@icmp, :host)
|
55
|
+
assert_respond_to(@icmp, :host=)
|
56
|
+
assert_equal('www.ruby-lang.org', @icmp.host)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_port
|
60
|
+
assert_respond_to(@icmp, :port)
|
61
|
+
assert_equal(nil, @icmp.port)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_timeout
|
65
|
+
assert_respond_to(@icmp, :timeout)
|
66
|
+
assert_respond_to(@icmp, :timeout=)
|
67
|
+
assert_equal(5, @icmp.timeout)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_exception
|
71
|
+
assert_respond_to(@icmp, :exception)
|
72
|
+
assert_nothing_raised{ @icmp.ping }
|
73
|
+
assert_nil(@icmp.exception)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_warning
|
77
|
+
assert_respond_to(@icmp, :warning)
|
78
|
+
end
|
79
|
+
|
80
|
+
def teardown
|
81
|
+
@host = nil
|
82
|
+
@icmp = nil
|
83
|
+
end
|
84
|
+
end
|
data/test/tc_pingtcp.rb
CHANGED
@@ -11,24 +11,24 @@ if base == "test" || base =~ /net-pingsimple.*/
|
|
11
11
|
end
|
12
12
|
|
13
13
|
require "test/unit"
|
14
|
-
require "net/ping"
|
14
|
+
require "net/ping/tcp"
|
15
15
|
include Net
|
16
16
|
|
17
17
|
class TC_PingTCP < Test::Unit::TestCase
|
18
18
|
def setup
|
19
19
|
@host = "www.ruby-lang.org"
|
20
|
-
@tcp =
|
20
|
+
@tcp = Ping::TCP.new(@host)
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_version
|
24
|
-
assert_equal("1.
|
24
|
+
assert_equal("1.2.0", PingTCP::VERSION, "Bad version constant")
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_ping
|
28
28
|
assert_respond_to(@tcp, :ping)
|
29
29
|
assert_respond_to(@tcp, :ping?)
|
30
30
|
assert_nothing_raised{ @tcp.ping }
|
31
|
-
|
31
|
+
assert_nothing_raised{ @tcp.ping(@host) }
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_ping_ecr_false
|
@@ -52,14 +52,38 @@ class TC_PingTCP < Test::Unit::TestCase
|
|
52
52
|
assert_raises(ArgumentError){ PingTCP.ecr = "blah" }
|
53
53
|
end
|
54
54
|
|
55
|
-
def
|
55
|
+
def test_duration
|
56
|
+
assert_nothing_raised{ @tcp.ping }
|
57
|
+
assert_respond_to(@tcp, :duration)
|
58
|
+
assert_kind_of(Float, @tcp.duration)
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_host
|
56
62
|
assert_respond_to(@tcp, :host)
|
57
63
|
assert_respond_to(@tcp, :host=)
|
64
|
+
assert_equal('www.ruby-lang.org', @tcp.host)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_port
|
58
68
|
assert_respond_to(@tcp, :port)
|
59
69
|
assert_respond_to(@tcp, :port=)
|
70
|
+
assert_equal(7, @tcp.port)
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_timeout
|
60
74
|
assert_respond_to(@tcp, :timeout)
|
61
75
|
assert_respond_to(@tcp, :timeout=)
|
76
|
+
assert_equal(5, @tcp.timeout)
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_exception
|
80
|
+
msg = "+this test may fail depending on your network environment+"
|
62
81
|
assert_respond_to(@tcp, :exception)
|
82
|
+
assert_nothing_raised{ @tcp.ping }
|
83
|
+
assert_nil(@tcp.exception, msg)
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_warning
|
63
87
|
assert_respond_to(@tcp, :warning)
|
64
88
|
end
|
65
89
|
|
data/test/tc_pingudp.rb
CHANGED
@@ -14,41 +14,67 @@ if base == "test" || base =~ /net-pingsimple.*/
|
|
14
14
|
end
|
15
15
|
|
16
16
|
require "test/unit"
|
17
|
-
require "net/ping"
|
17
|
+
require "net/ping/udp"
|
18
18
|
include Net
|
19
19
|
|
20
20
|
class TC_PingUDP < Test::Unit::TestCase
|
21
21
|
def setup
|
22
22
|
@host = "www.ruby-lang.org"
|
23
|
-
@udp =
|
23
|
+
@udp = Ping::UDP.new(@host)
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_version
|
27
|
-
assert_equal("1.
|
27
|
+
assert_equal("1.2.0", PingUDP::VERSION)
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_ping
|
31
31
|
assert_respond_to(@udp, :ping)
|
32
32
|
assert_respond_to(@udp, :ping?)
|
33
33
|
assert_nothing_raised{ @udp.ping }
|
34
|
-
|
34
|
+
assert_nothing_raised{ @udp.ping(@host) }
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_ping_standard
|
38
38
|
assert_equal(false, @udp.ping?)
|
39
39
|
assert_equal(false, @udp.exception.nil?, "Bad exception data")
|
40
40
|
end
|
41
|
+
|
42
|
+
def test_bind
|
43
|
+
assert_respond_to(@udp, :bind)
|
44
|
+
assert_nothing_raised{ @udp.bind('www.ruby-lang.org', 80) }
|
45
|
+
end
|
41
46
|
|
42
|
-
def
|
47
|
+
def test_duration
|
48
|
+
assert_nothing_raised{ @udp.ping }
|
49
|
+
assert_respond_to(@udp, :duration)
|
50
|
+
assert_kind_of(Float, @udp.duration)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_host
|
43
54
|
assert_respond_to(@udp, :host)
|
44
55
|
assert_respond_to(@udp, :host=)
|
56
|
+
assert_equal('www.ruby-lang.org', @udp.host)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_port
|
45
60
|
assert_respond_to(@udp, :port)
|
46
61
|
assert_respond_to(@udp, :port=)
|
62
|
+
assert_equal(7, @udp.port)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_timeout
|
47
66
|
assert_respond_to(@udp, :timeout)
|
48
67
|
assert_respond_to(@udp, :timeout=)
|
49
|
-
|
50
|
-
|
68
|
+
assert_equal(5, @udp.timeout)
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_exception
|
51
72
|
assert_respond_to(@udp, :exception)
|
73
|
+
assert_nothing_raised{ @udp.ping }
|
74
|
+
assert_nil(@udp.exception)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_warning
|
52
78
|
assert_respond_to(@udp, :warning)
|
53
79
|
end
|
54
80
|
|