net-ping 1.5.3 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,7 @@
1
+ == 1.6.0 - 19-Mar-2013
2
+ * Split out the ldap portion of the code into its own branch.
3
+ * Don't require resolv-replace on Ruby 1.9.3 or later.
4
+
1
5
  == 1.5.3 - 29-Feb-2012
2
6
  * Removed the Windows::Console dependency and replaced it with FFI since there
3
7
  were only two functions needed. This had the nice side effect of making it
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source :rubygems
2
+ gemspec
data/Rakefile CHANGED
@@ -39,11 +39,6 @@ namespace 'example' do
39
39
  task :udp do
40
40
  ruby '-Ilib examples/example_pingudp.rb'
41
41
  end
42
-
43
- desc 'Run the ldap ping example program'
44
- task :ldap do
45
- ruby '-Ilib examples/example_pingldap.rb'
46
- end
47
42
  end
48
43
 
49
44
  Rake::TestTask.new do |t|
@@ -89,12 +84,6 @@ namespace 'test' do
89
84
  t.verbose = true
90
85
  t.test_files = FileList['test/test_net_ping_wmi.rb']
91
86
  end
92
-
93
- Rake::TestTask.new('ldap') do |t|
94
- t.warning = true
95
- t.verbose = true
96
- t.test_files = FileList['test/test_net_ping_ldap.rb']
97
- end
98
87
  end
99
88
 
100
89
  task :default => :test
data/lib/net/ping.rb CHANGED
@@ -9,10 +9,9 @@ require File.join(File.dirname(__FILE__), 'ping/udp')
9
9
  require File.join(File.dirname(__FILE__), 'ping/icmp')
10
10
  require File.join(File.dirname(__FILE__), 'ping/external')
11
11
  require File.join(File.dirname(__FILE__), 'ping/http')
12
- require File.join(File.dirname(__FILE__), 'ping/ldap')
13
12
 
14
13
  RbConfig = Config unless Object.const_defined?(:RbConfig)
15
14
 
16
- if RbConfig::CONFIG['host_os'] =~ /msdos|mswin|cygwin|mingw|win32|windows/i
15
+ if File::ALT_SEPARATOR
17
16
  require File.join(File.dirname(__FILE__), 'ping/wmi')
18
17
  end
data/lib/net/ping/http.rb CHANGED
@@ -2,10 +2,11 @@ require File.join(File.dirname(__FILE__), 'ping')
2
2
  require 'net/http'
3
3
  require 'net/https'
4
4
  require 'uri'
5
+ require 'open-uri'
5
6
 
6
7
  # Force non-blocking Socket.getaddrinfo on Unix systems. Do not use on
7
8
  # Windows because it (ironically) causes blocking problems.
8
- unless File::ALT_SEPARATOR
9
+ unless File::ALT_SEPARATOR or RUBY_VERSION >= "1.9.3"
9
10
  require 'resolv-replace'
10
11
  end
11
12
 
@@ -33,6 +34,9 @@ module Net
33
34
  # Use GET request instead HEAD. The default is false.
34
35
  attr_accessor :get_request
35
36
 
37
+ # was this ping proxied?
38
+ attr_accessor :proxied
39
+
36
40
  # Creates and returns a new Ping::HTTP object. The default port is the
37
41
  # port associated with the URI. The default timeout is 5 seconds.
38
42
  #
@@ -40,7 +44,7 @@ module Net
40
44
  @follow_redirect = true
41
45
  @redirect_limit = 5
42
46
  @ssl_verify_mode = OpenSSL::SSL::VERIFY_NONE
43
- @get_request = false
47
+ @get_request = false
44
48
 
45
49
  port ||= URI.parse(uri).port if uri
46
50
 
@@ -64,7 +68,7 @@ module Net
64
68
  def ping(host = @host)
65
69
  super(host)
66
70
  bool = false
67
- uri = URI.parse(host)
71
+ uri = URI.parse(host)
68
72
 
69
73
  start_time = Time.now
70
74
 
@@ -75,7 +79,7 @@ module Net
75
79
  elsif redirect?(response) # Check code, HTTPRedirection does not always work
76
80
  if @follow_redirect
77
81
  @warning = response.message
78
- rlimit = 0
82
+ rlimit = 0
79
83
 
80
84
  while redirect?(response)
81
85
  if rlimit >= redirect_limit
@@ -85,13 +89,13 @@ module Net
85
89
  redirect = URI.parse(response['location'])
86
90
  redirect = uri + redirect if redirect.relative?
87
91
  response = do_ping(redirect)
88
- rlimit += 1
92
+ rlimit += 1
89
93
  end
90
94
 
91
95
  if response.is_a?(Net::HTTPSuccess)
92
96
  bool = true
93
97
  else
94
- @warning = nil
98
+ @warning = nil
95
99
  @exception ||= response.message
96
100
  end
97
101
 
@@ -120,25 +124,26 @@ module Net
120
124
 
121
125
  def do_ping(uri)
122
126
  response = nil
127
+ proxy = uri.find_proxy || URI.parse("")
123
128
  begin
124
129
  uri_path = uri.path.empty? ? '/' : uri.path
125
- headers = { }
130
+ headers = { }
126
131
  headers["User-Agent"] = user_agent unless user_agent.nil?
127
132
  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
-
133
+ http = Net::HTTP::Proxy(proxy.host, proxy.port, proxy.user, proxy.password).new(uri.host, uri.port)
134
+ @proxied = http.proxy?
135
135
  if @get_request == true
136
136
  request = Net::HTTP::Get.new(uri_path)
137
137
  else
138
138
  request = Net::HTTP::Head.new(uri_path)
139
139
  end
140
140
 
141
- response = http.start{ |h| h.request(request) }
141
+ if uri.scheme == 'https'
142
+ http.use_ssl = true
143
+ http.verify_mode = @ssl_verify_mode
144
+ end
145
+
146
+ response = http.start { |h| h.request(request) }
142
147
  end
143
148
  rescue Exception => err
144
149
  @exception = err.message
data/lib/net/ping/ping.rb CHANGED
@@ -10,7 +10,7 @@ module Net
10
10
  #
11
11
  class Ping
12
12
  # The version of the net-ping library.
13
- VERSION = '1.5.2'
13
+ VERSION = '1.6.0'
14
14
 
15
15
  # The host to ping. In the case of Ping::HTTP, this is the URI.
16
16
  attr_accessor :host
data/net-ping.gemspec CHANGED
@@ -3,11 +3,11 @@ require 'rbconfig'
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'net-ping'
6
- spec.version = '1.5.3'
6
+ spec.version = '1.6.0'
7
7
  spec.license = 'Artistic 2.0'
8
8
  spec.author = 'Daniel J. Berger'
9
9
  spec.email = 'djberg96@gmail.com'
10
- spec.homepage = 'http://www.rubyforge.org/projects/shards'
10
+ spec.homepage = 'https://github.com/djberg96/net-ping'
11
11
  spec.summary = 'A ping interface for Ruby.'
12
12
  spec.test_file = 'test/test_net_ping.rb'
13
13
  spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
@@ -15,12 +15,10 @@ Gem::Specification.new do |spec|
15
15
  spec.rubyforge_project = 'shards'
16
16
  spec.extra_rdoc_files = ['README', 'CHANGES', 'doc/ping.txt']
17
17
 
18
- spec.add_dependency('net-ldap', '~> 0.2.2')
19
18
  spec.add_dependency('ffi', '>= 1.0.0')
20
19
 
21
- spec.add_development_dependency('test-unit', '>= 2.1.2')
20
+ spec.add_development_dependency('test-unit', '>= 2.5.0')
22
21
  spec.add_development_dependency('fakeweb', '>= 1.3.0')
23
- spec.add_development_dependency('fakeldap', '~> 0.0.1')
24
22
 
25
23
  if File::ALT_SEPARATOR && RUBY_PLATFORM != 'java'
26
24
  spec.platform = Gem::Platform::CURRENT
@@ -28,7 +26,7 @@ Gem::Specification.new do |spec|
28
26
  spec.platform.version = nil
29
27
 
30
28
  # Used primarily for icmp pings.
31
- spec.add_development_dependency('win32-security', '>= 1.0.8')
29
+ spec.add_development_dependency('win32-security', '>= 0.2.0')
32
30
 
33
31
  if RUBY_VERSION.to_f < 1.9
34
32
  spec.add_dependency('win32-open3', '>= 0.3.1')
@@ -12,10 +12,8 @@ require 'fakeweb'
12
12
 
13
13
  if File::ALT_SEPARATOR
14
14
  require 'win32/security'
15
- require 'windows/system_info'
16
- include Windows::SystemInfo
17
15
 
18
- if windows_version >= 6 && Win32::Security.elevated_security?
16
+ if Win32::Security.elevated_security?
19
17
  require 'test_net_ping_icmp'
20
18
  end
21
19
  else
@@ -30,7 +28,7 @@ end
30
28
 
31
29
  class TC_Net_Ping < Test::Unit::TestCase
32
30
  def test_net_ping_version
33
- assert_equal('1.5.2', Net::Ping::VERSION)
31
+ assert_equal('1.6.0', Net::Ping::VERSION)
34
32
  end
35
33
  end
36
34
 
@@ -4,10 +4,7 @@
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 'rubygems'
8
- gem 'test-unit'
9
-
10
- require 'test/unit'
7
+ require 'test-unit'
11
8
  require 'net/ping/external'
12
9
 
13
10
  class TC_Net_Ping_External < Test::Unit::TestCase
@@ -4,25 +4,29 @@
4
4
  # Test case for the Net::PingHTTP class. This should be run via the 'test' or
5
5
  # 'test:http' Rake task.
6
6
  #################################################################################
7
- require 'rubygems'
8
- gem 'test-unit'
9
-
10
- require 'test/unit'
7
+ require 'test-unit'
8
+ require 'fakeweb'
11
9
  require 'net/ping/http'
12
10
 
13
11
  class TC_Net_Ping_HTTP < Test::Unit::TestCase
14
12
  def setup
13
+ ENV['http_proxy'] = ENV['https_proxy'] = ENV['no_proxy'] = nil
15
14
  @uri = 'http://www.google.com/index.html'
16
15
  @uri_https = 'https://encrypted.google.com'
16
+ @proxy = 'http://username:password@proxymoxie:3128'
17
+ FakeWeb.allow_net_connect = false
17
18
 
18
19
  FakeWeb.register_uri(:get, @uri, :body => "PONG")
19
20
  FakeWeb.register_uri(:head, @uri, :body => "PONG")
20
21
  FakeWeb.register_uri(:head, @uri_https, :body => "PONG")
22
+ FakeWeb.register_uri(:get, @uri_https, :body => "PONG")
21
23
  FakeWeb.register_uri(:head, "http://jigsaw.w3.org/HTTP/300/302.html",
22
24
  :body => "PONG",
23
25
  :location => "#{@uri}",
24
26
  :status => ["302", "Found"])
25
27
 
28
+ FakeWeb.register_uri(:any, 'http://www.blabfoobarurghxxxx.com', :exception => SocketError)
29
+
26
30
  @http = Net::Ping::HTTP.new(@uri, 80, 30)
27
31
  @bad = Net::Ping::HTTP.new('http://www.blabfoobarurghxxxx.com') # One hopes not
28
32
  end
@@ -175,6 +179,30 @@ class TC_Net_Ping_HTTP < Test::Unit::TestCase
175
179
  assert_true(@http.ping)
176
180
  end
177
181
 
182
+ test 'ping with http proxy' do
183
+ ENV['http_proxy'] = "http://proxymoxie:3128"
184
+ @http = Net::Ping::HTTP.new(@uri)
185
+ @http.get_request = true
186
+ assert_true(@http.ping)
187
+ assert_true(@http.proxied)
188
+ end
189
+
190
+ test 'ping with https proxy' do
191
+ ENV['https_proxy'] = "http://proxymoxie:3128"
192
+ @http = Net::Ping::HTTP.new(@uri_https)
193
+ @http.get_request = true
194
+ assert_true(@http.ping)
195
+ assert_true(@http.proxied)
196
+ end
197
+
198
+ test 'ping with no_proxy' do
199
+ ENV['no_proxy'] = "google.com"
200
+ @http = Net::Ping::HTTP.new(@uri)
201
+ @http.get_request = true
202
+ assert_true(@http.ping)
203
+ assert_false(@http.proxied)
204
+ end
205
+
178
206
  def teardown
179
207
  @uri = nil
180
208
  @http = nil
@@ -5,10 +5,7 @@
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 'rubygems'
9
- gem 'test-unit'
10
-
11
- require 'test/unit'
8
+ require 'test-unit'
12
9
  require 'net/ping/icmp'
13
10
  include Net
14
11
 
@@ -4,10 +4,7 @@
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 'rubygems'
8
- gem 'test-unit'
9
-
10
- require 'test/unit'
7
+ require 'test-unit'
11
8
  require 'net/ping/tcp'
12
9
  include Net
13
10
 
@@ -7,10 +7,7 @@
7
7
  # If someone could provide me a host where a udp ping actually
8
8
  # works (with a service check), I would appreciate it. :)
9
9
  ########################################################################
10
- require 'rubygems'
11
- gem 'test-unit'
12
-
13
- require 'test/unit'
10
+ require 'test-unit'
14
11
  require 'net/ping/udp'
15
12
 
16
13
  class TC_Net_Ping_UDP < Test::Unit::TestCase
@@ -5,10 +5,7 @@
5
5
  # run MS Windows. You should run this test via the 'test' or
6
6
  # 'test:wmi' Rake task.
7
7
  #######################################################################
8
- require 'rubygems'
9
- gem 'test-unit'
10
-
11
- require 'test/unit'
8
+ require 'test-unit'
12
9
  require 'net/ping/wmi'
13
10
  include Net
14
11
 
metadata CHANGED
@@ -1,173 +1,124 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: net-ping
3
- version: !ruby/object:Gem::Version
4
- hash: 5
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.6.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 5
9
- - 3
10
- version: 1.5.3
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Daniel J. Berger
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-02-29 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: net-ldap
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2013-03-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ffi
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 19
29
- segments:
30
- - 0
31
- - 2
32
- - 2
33
- version: 0.2.2
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.0
34
22
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: ffi
38
23
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
40
25
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 23
45
- segments:
46
- - 1
47
- - 0
48
- - 0
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
49
29
  version: 1.0.0
50
- type: :runtime
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
30
+ - !ruby/object:Gem::Dependency
53
31
  name: test-unit
54
- prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
56
33
  none: false
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- hash: 15
61
- segments:
62
- - 2
63
- - 1
64
- - 2
65
- version: 2.1.2
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 2.5.0
66
38
  type: :development
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- name: fakeweb
70
39
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
72
41
  none: false
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- hash: 27
77
- segments:
78
- - 1
79
- - 3
80
- - 0
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 2.5.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: fakeweb
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
81
53
  version: 1.3.0
82
54
  type: :development
83
- version_requirements: *id004
84
- - !ruby/object:Gem::Dependency
85
- name: fakeldap
86
55
  prerelease: false
87
- requirement: &id005 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
88
57
  none: false
89
- requirements:
90
- - - ~>
91
- - !ruby/object:Gem::Version
92
- hash: 29
93
- segments:
94
- - 0
95
- - 0
96
- - 1
97
- version: 0.0.1
98
- type: :development
99
- version_requirements: *id005
100
- description: " The net-ping library provides a ping interface for Ruby. It includes\n separate TCP, HTTP, LDAP, ICMP, UDP, WMI (for Windows) and external ping\n classes.\n"
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.3.0
62
+ description: ! " The net-ping library provides a ping interface for Ruby. It includes\n
63
+ \ separate TCP, HTTP, LDAP, ICMP, UDP, WMI (for Windows) and external ping\n classes.\n"
101
64
  email: djberg96@gmail.com
102
65
  executables: []
103
-
104
66
  extensions: []
105
-
106
- extra_rdoc_files:
67
+ extra_rdoc_files:
107
68
  - README
108
69
  - CHANGES
109
70
  - doc/ping.txt
110
- files:
111
- - CHANGES
71
+ files:
112
72
  - doc/ping.txt
113
- - examples/example_pingexternal.rb
114
- - examples/example_pinghttp.rb
115
- - examples/example_pingldap.rb
116
- - examples/example_pingtcp.rb
117
- - examples/example_pingudp.rb
118
- - lib/net/ping/external.rb
119
- - lib/net/ping/http.rb
73
+ - test/test_net_ping_tcp.rb
74
+ - test/test_net_ping_http.rb
75
+ - test/test_net_ping_udp.rb
76
+ - test/test_net_ping_external.rb
77
+ - test/test_net_ping_icmp.rb
78
+ - test/test_net_ping.rb
79
+ - test/test_net_ping_wmi.rb
80
+ - Gemfile
81
+ - Rakefile
82
+ - net-ping.gemspec
83
+ - MANIFEST
84
+ - CHANGES
85
+ - lib/net/ping.rb
86
+ - lib/net/ping/tcp.rb
120
87
  - lib/net/ping/icmp.rb
121
- - lib/net/ping/ldap.rb
122
88
  - lib/net/ping/ping.rb
123
- - lib/net/ping/tcp.rb
124
- - lib/net/ping/udp.rb
125
89
  - lib/net/ping/wmi.rb
126
- - lib/net/ping.rb
127
- - MANIFEST
128
- - net-ping.gemspec
129
- - Rakefile
90
+ - lib/net/ping/external.rb
91
+ - lib/net/ping/http.rb
92
+ - lib/net/ping/udp.rb
130
93
  - README
131
- - test/test_net_ping.rb
132
- - test/test_net_ping_external.rb
133
- - test/test_net_ping_http.rb
134
- - test/test_net_ping_icmp.rb
135
- - test/test_net_ping_ldap.rb
136
- - test/test_net_ping_tcp.rb
137
- - test/test_net_ping_udp.rb
138
- - test/test_net_ping_wmi.rb
139
- homepage: http://www.rubyforge.org/projects/shards
140
- licenses:
94
+ - examples/example_pingtcp.rb
95
+ - examples/example_pingexternal.rb
96
+ - examples/example_pingudp.rb
97
+ - examples/example_pinghttp.rb
98
+ homepage: https://github.com/djberg96/net-ping
99
+ licenses:
141
100
  - Artistic 2.0
142
101
  post_install_message:
143
102
  rdoc_options: []
144
-
145
- require_paths:
103
+ require_paths:
146
104
  - lib
147
- required_ruby_version: !ruby/object:Gem::Requirement
105
+ required_ruby_version: !ruby/object:Gem::Requirement
148
106
  none: false
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- hash: 3
153
- segments:
154
- - 0
155
- version: "0"
156
- required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
112
  none: false
158
- requirements:
159
- - - ">="
160
- - !ruby/object:Gem::Version
161
- hash: 3
162
- segments:
163
- - 0
164
- version: "0"
113
+ requirements:
114
+ - - ! '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
165
117
  requirements: []
166
-
167
118
  rubyforge_project: shards
168
- rubygems_version: 1.8.10
119
+ rubygems_version: 1.8.23
169
120
  signing_key:
170
121
  specification_version: 3
171
122
  summary: A ping interface for Ruby.
172
- test_files:
123
+ test_files:
173
124
  - test/test_net_ping.rb
@@ -1,22 +0,0 @@
1
- ########################################################################
2
- # example_pingldap.rb
3
- #
4
- # A short sample program demonstrating an ldap ping. You can run
5
- # this program via the example:ldap task. Modify as you see fit.
6
- ########################################################################
7
- require 'net/ping/ldap'
8
-
9
- good = 'ldap://localhost'
10
- bad = 'ldap://example.com'
11
-
12
- puts "== Good ping (if you have an ldap server at #{good})"
13
-
14
- p1 = Net::Ping::LDAP.new(good)
15
- p p1.ping?
16
-
17
- puts "== Bad ping"
18
-
19
- p2 = Net::Ping::LDAP.new(bad)
20
- p p2.ping?
21
- p p2.warning
22
- p p2.exception
data/lib/net/ping/ldap.rb DELETED
@@ -1,107 +0,0 @@
1
- require File.join(File.dirname(__FILE__), 'ping')
2
- require 'net/ldap'
3
- require 'uri'
4
-
5
-
6
- # The Net module serves as a namespace only.
7
- module Net
8
-
9
- # The Ping::LDAP class encapsulates methods for LDAP pings.
10
- class Ping::LDAP < Ping
11
-
12
- # uri contains the URI object for the request
13
- #
14
- attr_accessor :uri
15
-
16
- # username and password may be set for ping using
17
- # an authenticated LDAP bind
18
- #
19
- attr_accessor :username
20
- attr_accessor :password
21
-
22
- # set/get the encryption method. By default nil,
23
- # but may be set to :simple_tls
24
- #
25
- attr_accessor :encryption
26
- def encryption=(value)
27
- @encryption = (value.is_a? Symbol) ? value : value.to_sym
28
- end
29
-
30
- # Creates and returns a new Ping::LDAP object.
31
- # The default +timeout+ is 5 seconds.
32
- #
33
- # +uri+ string is expected to be a full URI with scheme (ldap/ldaps)
34
- # and optionally the port (else default port is assumed) e.g.
35
- # ldap://my.ldap.host.com
36
- # ldap://my.ldap.host.com:1389
37
- # ldaps://my.ldap.host.com
38
- # ldaps://my.ldap.host.com:6636
39
- #
40
- # If a plain hostname is provided as the +uri+, a default port of 389 is assumed
41
- #
42
- def initialize(uri=nil, timeout=5)
43
- host, port = decode_uri(uri)
44
- super(host, port, timeout)
45
- end
46
-
47
- # method used to decode uri string
48
- #
49
- def decode_uri(value)
50
- @uri = URI.parse(value)
51
- if uri.scheme =~ /ldap/
52
- p = @port = uri.port
53
- h = @host = uri.host
54
- @encryption = uri.scheme=='ldaps' ? :simple_tls : nil
55
- else
56
- h = value
57
- p = 389
58
- end
59
- [h, p]
60
- end
61
-
62
- # constructs the LDAP configuration structure
63
- #
64
- def config
65
- {
66
- :host => uri.host,
67
- :port => uri.port,
68
- :encryption => encryption
69
- }.merge(
70
- (username && password) ?
71
- { :auth => {:method => :simple, :username => username, :password => password} } :
72
- { :auth => {:method => :anonymous} }
73
- )
74
- end
75
-
76
- # perform ping, optionally providing the ping destination uri
77
- #
78
- def ping(host = nil)
79
- decode_uri(host) if host
80
- super(@host)
81
-
82
- bool = false
83
-
84
- start_time = Time.now
85
-
86
- begin
87
- Timeout.timeout(@timeout) do
88
- Net::LDAP.new( config ).bind
89
- end
90
- rescue Net::LDAP::LdapError => e
91
- @exception = e.message
92
- rescue Exception => e
93
- @exception = e.message
94
- else
95
- bool = true
96
- end
97
-
98
- # There is no duration if the ping failed
99
- @duration = Time.now - start_time if bool
100
-
101
- bool
102
- end
103
-
104
- alias ping? ping
105
- alias pingecho ping
106
- end
107
- end
@@ -1,200 +0,0 @@
1
- #################################################################################
2
- # test_net_ping_http.rb
3
- #
4
- # Test case for the Net::PingHTTP class. This should be run via the 'test' or
5
- # 'test:http' Rake task.
6
- #################################################################################
7
- require 'rubygems'
8
- gem 'test-unit'
9
-
10
- require 'test/unit'
11
- require 'net/ping/ldap'
12
- require 'fakeldap'
13
-
14
- class TC_Net_Ping_LDAP < Test::Unit::TestCase
15
- class << self
16
- def startup
17
- @@host = 'localhost'
18
- @@port = 2389
19
- @@uri = "ldap://#{@@host}:#{@@port}"
20
- @@timeout = 30
21
- @@cn = 'el.Daper'
22
- @@password = 'ldappassword'
23
-
24
- @@ldap_server = FakeLDAP::Server.new(:port => @@port)
25
- @@ldap_server.run_tcpserver
26
- @@ldap_server.add_user("cn=#{@@cn},ou=USERS,dc=example,dc=com", @@password)
27
- end
28
- def shutdown
29
- @@ldap_server.stop
30
- end
31
- end
32
- def setup
33
- @ldap = Net::Ping::LDAP.new(@@uri, @@timeout)
34
- @ldap.username = @@cn
35
- @ldap.password = @@password
36
- @bogus = 'ldap://blabfoobarurghxxxx.com' # One hopes so
37
- @bad = Net::Ping::LDAP.new(@bogus)
38
- end
39
-
40
- def teardown
41
- @ldap = nil
42
- end
43
-
44
- test 'ping basic functionality' do
45
- assert_respond_to(@ldap, :ping)
46
- assert_nothing_raised{ @ldap.ping }
47
- end
48
-
49
- test 'ping returns a boolean value' do
50
- assert_boolean(@ldap.ping?)
51
- assert_boolean(@bad.ping?)
52
- end
53
-
54
- test 'ping? is an alias for ping' do
55
- assert_alias_method(@ldap, :ping?, :ping)
56
- end
57
-
58
- test 'pingecho is an alias for ping' do
59
- assert_alias_method(@ldap, :pingecho, :ping)
60
- end
61
-
62
- test 'ping should succeed for a valid website' do
63
- assert_true(@ldap.ping?)
64
- end
65
-
66
- test 'ping should fail for an invalid website' do
67
- assert_false(@bad.ping?)
68
- end
69
-
70
- test 'duration basic functionality' do
71
- assert_respond_to(@ldap, :duration)
72
- assert_nothing_raised{ @ldap.ping }
73
- end
74
-
75
- test 'duration returns a float value on a successful ping' do
76
- assert_true(@ldap.ping)
77
- assert_kind_of(Float, @ldap.duration)
78
- end
79
-
80
- test 'duration is nil on an unsuccessful ping' do
81
- assert_false(@bad.ping)
82
- assert_nil(@ldap.duration)
83
- end
84
-
85
- test "duration is unset if a bad ping follows a good ping" do
86
- assert_true{ @ldap.ping }
87
- assert_not_nil(@ldap.duration)
88
- assert_false(@ldap.ping?(@bogus))
89
- assert_nil(@ldap.duration)
90
- end
91
-
92
- test 'host attribute basic functionality' do
93
- assert_respond_to(@ldap, :host)
94
- assert_respond_to(@ldap, :host=)
95
- assert_equal(@@host, @ldap.host)
96
- end
97
-
98
- test 'port attribute basic functionality' do
99
- assert_respond_to(@ldap, :port)
100
- assert_respond_to(@ldap, :port=)
101
- end
102
-
103
- test 'port attribute expected value' do
104
- assert_equal(@@port, @ldap.port)
105
- end
106
-
107
- test 'timeout attribute basic functionality' do
108
- assert_respond_to(@ldap, :timeout)
109
- assert_respond_to(@ldap, :timeout=)
110
- end
111
-
112
- test 'timeout attribute expected values' do
113
- assert_equal(@@timeout, @ldap.timeout)
114
- assert_equal(5, @bad.timeout)
115
- end
116
-
117
- test 'exception attribute basic functionality' do
118
- assert_respond_to(@ldap, :exception)
119
- assert_nil(@ldap.exception)
120
- end
121
-
122
- test 'exception attribute is nil if the ping is successful' do
123
- assert_true(@ldap.ping)
124
- assert_nil(@ldap.exception)
125
- end
126
-
127
- test 'exception attribute is not nil if the ping is unsuccessful' do
128
- assert_false(@bad.ping)
129
- assert_not_nil(@bad.exception)
130
- end
131
-
132
- test 'warning attribute basic functionality' do
133
- assert_respond_to(@ldap, :warning)
134
- assert_nil(@ldap.warning)
135
- end
136
-
137
- test 'uri attribute basic functionality' do
138
- assert_respond_to(@ldap, :uri)
139
- assert_respond_to(@ldap, :uri=)
140
- end
141
-
142
- test 'username attribute basic functionality' do
143
- assert_respond_to(@ldap, :username)
144
- assert_respond_to(@ldap, :username=)
145
- end
146
-
147
- test 'password attribute basic functionality' do
148
- assert_respond_to(@ldap, :password)
149
- assert_respond_to(@ldap, :password=)
150
- end
151
-
152
- test 'encryption attribute basic functionality' do
153
- assert_respond_to(@ldap, :encryption)
154
- assert_respond_to(@ldap, :encryption=)
155
- end
156
-
157
- test 'encryption defaults to nil for ldap' do
158
- assert_nil(Net::Ping::LDAP.new('ldap://somehost.example.net').encryption)
159
- end
160
-
161
- test 'encryption defaults to simple_tls for ldaps' do
162
- assert_equal(:simple_tls, Net::Ping::LDAP.new('ldaps://somehost.example.net').encryption)
163
- end
164
-
165
- test 'port defaults to 389 for ldap' do
166
- assert_equal(389, Net::Ping::LDAP.new('ldap://somehost.example.net').port)
167
- end
168
-
169
- test 'port defaults to 636 for ldaps' do
170
- assert_equal(636, Net::Ping::LDAP.new('ldaps://somehost.example.net').port)
171
- end
172
-
173
- test 'port extracted from uri if provided' do
174
- assert_equal(12345, Net::Ping::LDAP.new('ldap://somehost.example.net:12345').port)
175
- assert_equal(12345, Net::Ping::LDAP.new('ldaps://somehost.example.net:12345').port)
176
- end
177
-
178
- test 'encryption setting is forced to symbol' do
179
- @ldap.encryption = 'simple_tls'
180
- assert_true( @ldap.encryption.is_a? Symbol )
181
- assert_true( @ldap.config[:encryption].is_a? Symbol )
182
- end
183
-
184
- test 'username/password set in config auth section' do
185
- @ldap.username, @ldap.password = 'fred', 'derf'
186
- assert_equal('fred', @ldap.config[:auth][:username] )
187
- assert_equal('derf', @ldap.config[:auth][:password] )
188
- end
189
-
190
- test 'auth method defaults to simple if username/password set' do
191
- @ldap.username, @ldap.password = 'fred', 'derf'
192
- assert_equal(:simple, @ldap.config[:auth][:method] )
193
- end
194
-
195
- test 'if no username/password then defaults to auth anonymous' do
196
- @ldap.username = @ldap.password = nil
197
- assert_equal({:method => :anonymous}, @ldap.config[:auth] )
198
- end
199
-
200
- end