Created new ActiveDirectory user search class; moved tests
This commit is contained in:
Родитель
9e9f9e961f
Коммит
ad67b78cb4
|
@ -10,6 +10,10 @@ require 'github/ldap/virtual_attributes'
|
||||||
require 'github/ldap/instrumentation'
|
require 'github/ldap/instrumentation'
|
||||||
require 'github/ldap/member_search'
|
require 'github/ldap/member_search'
|
||||||
require 'github/ldap/membership_validators'
|
require 'github/ldap/membership_validators'
|
||||||
|
require 'github/ldap/connection_cache'
|
||||||
|
require 'github/ldap/referral_chaser'
|
||||||
|
require 'github/ldap/url'
|
||||||
|
require 'github/ldap/user_search/active_directory.rb'
|
||||||
|
|
||||||
module GitHub
|
module GitHub
|
||||||
class Ldap
|
class Ldap
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
module GitHub
|
||||||
|
class Ldap
|
||||||
|
module UserSearch
|
||||||
|
class ActiveDirectory < Default
|
||||||
|
|
||||||
|
def initialize(ldap)
|
||||||
|
@ldap = ldap
|
||||||
|
end
|
||||||
|
|
||||||
|
def search(options)
|
||||||
|
# when doing a global search for a user's DN, set the search base to blank
|
||||||
|
options[:base] = ""
|
||||||
|
global_catalog_search(options).first
|
||||||
|
end
|
||||||
|
|
||||||
|
def global_catalog_search(options, &block)
|
||||||
|
Array(global_catalog_connection.search(options, &block))
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns a memoized connection to an Active Directory Global Catalog
|
||||||
|
# if the server is an Active Directory instance, otherwise returns nil.
|
||||||
|
#
|
||||||
|
# See: https://technet.microsoft.com/en-us/library/cc728188(v=ws.10).aspx
|
||||||
|
#
|
||||||
|
def global_catalog_connection
|
||||||
|
@global_catalog_connection ||= Net::LDAP.new({
|
||||||
|
host: ldap.instance_variable_get(:@host),
|
||||||
|
auth: {
|
||||||
|
method: :simple,
|
||||||
|
username: ldap.instance_variable_get(:@admin_user),
|
||||||
|
password: ldap.instance_variable_get(:@admin_password)
|
||||||
|
},
|
||||||
|
instrumentation_service: ldap.instrumentation_service,
|
||||||
|
port: 3268,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
attr_reader :ldap
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -118,71 +118,6 @@ module GitHubLdapTestCases
|
||||||
def test_capabilities
|
def test_capabilities
|
||||||
assert_kind_of Net::LDAP::Entry, @ldap.capabilities
|
assert_kind_of Net::LDAP::Entry, @ldap.capabilities
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_global_catalog_connection_is_null_if_not_active_directory
|
|
||||||
@ldap.expects(:active_directory_capability?).returns(false)
|
|
||||||
assert_nil @ldap.global_catalog_connection
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_global_catalog_connection_is_null_if_not_active_directory
|
|
||||||
@ldap.expects(:active_directory_capability?).returns(true)
|
|
||||||
refute_nil @ldap.global_catalog_connection
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_global_catalog_returns_empty_array_for_no_results
|
|
||||||
@ldap.expects(:active_directory_capability?).returns(true)
|
|
||||||
mock_global_catalog_connection = Object.new
|
|
||||||
mock_global_catalog_connection.expects(:search).returns(nil)
|
|
||||||
Net::LDAP.expects(:new).returns(mock_global_catalog_connection)
|
|
||||||
results = @ldap.global_catalog_search({})
|
|
||||||
assert_equal [], results
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_global_catalog_returns_array_of_results
|
|
||||||
@ldap.expects(:active_directory_capability?).returns(true)
|
|
||||||
mock_global_catalog_connection = Object.new
|
|
||||||
stub_entry = Object.new
|
|
||||||
mock_global_catalog_connection.expects(:search).returns(stub_entry)
|
|
||||||
Net::LDAP.expects(:new).returns(mock_global_catalog_connection)
|
|
||||||
results = @ldap.global_catalog_search({})
|
|
||||||
assert_equal [stub_entry], results
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_global_catalog_default_settings
|
|
||||||
@ldap.expects(:active_directory_capability?).returns(true)
|
|
||||||
global_catalog = @ldap.global_catalog_connection
|
|
||||||
instrumentation_service = global_catalog.instance_variable_get(:@instrumentation_service)
|
|
||||||
|
|
||||||
auth = global_catalog.instance_variable_get(:@auth)
|
|
||||||
assert_equal :simple, auth[:method]
|
|
||||||
assert_equal "localhost", global_catalog.host
|
|
||||||
assert_equal 3268, global_catalog.port
|
|
||||||
assert_equal "MockInstrumentationService", instrumentation_service.class.name
|
|
||||||
end
|
|
||||||
|
|
||||||
module GitHubLdapUnauthenticatedTestCases
|
|
||||||
def test_global_catalog_unauthenticated_default_settings
|
|
||||||
@ldap.expects(:active_directory_capability?).returns(true)
|
|
||||||
global_catalog = @ldap.global_catalog_connection
|
|
||||||
# this is ugly, but currently the only way to test Net::LDAP#auth values
|
|
||||||
auth = global_catalog.instance_variable_get(:@auth)
|
|
||||||
|
|
||||||
assert_equal nil, auth[:password]
|
|
||||||
assert_equal nil, auth[:username]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
module GitHubLdapAuthenticatedTestCases
|
|
||||||
def test_global_catalog_authenticated_default_settings
|
|
||||||
@ldap.expects(:active_directory_capability?).returns(true)
|
|
||||||
global_catalog = @ldap.global_catalog_connection
|
|
||||||
# this is ugly, but currently the only way to test Net::LDAP#auth values
|
|
||||||
auth = global_catalog.instance_variable_get(:@auth)
|
|
||||||
|
|
||||||
assert_equal "passworD1", auth[:password]
|
|
||||||
assert_equal "uid=admin,dc=github,dc=com", auth[:username]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
class GitHubLdapTest < GitHub::Ldap::Test
|
class GitHubLdapTest < GitHub::Ldap::Test
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
require_relative '../test_helper'
|
||||||
|
require 'mocha/mini_test'
|
||||||
|
|
||||||
|
class GitHubLdapActiveDirectoryUserSearchTests < GitHub::Ldap::Test
|
||||||
|
|
||||||
|
def setup
|
||||||
|
@ldap = GitHub::Ldap.new(options)
|
||||||
|
@ad_user_search = GitHub::Ldap::UserSearch::ActiveDirectory.new(@ldap)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_global_catalog_connection_is_null_if_not_active_directory
|
||||||
|
@ad_user_search.expects(:active_directory_capability?).returns(false)
|
||||||
|
assert_nil @ad_user_search.global_catalog_connection
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_global_catalog_connection_is_null_if_not_active_directory
|
||||||
|
refute_nil @ad_user_search.global_catalog_connection
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_global_catalog_returns_empty_array_for_no_results
|
||||||
|
mock_global_catalog_connection = Object.new
|
||||||
|
mock_global_catalog_connection.expects(:search).returns(nil)
|
||||||
|
Net::LDAP.expects(:new).returns(mock_global_catalog_connection)
|
||||||
|
results = @ad_user_search.global_catalog_search({})
|
||||||
|
assert_equal [], results
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_global_catalog_returns_array_of_results
|
||||||
|
mock_global_catalog_connection = Object.new
|
||||||
|
stub_entry = Object.new
|
||||||
|
mock_global_catalog_connection.expects(:search).returns(stub_entry)
|
||||||
|
Net::LDAP.expects(:new).returns(mock_global_catalog_connection)
|
||||||
|
results = @ad_user_search.global_catalog_search({})
|
||||||
|
assert_equal [stub_entry], results
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_global_catalog_default_settings
|
||||||
|
global_catalog = @ad_user_search.global_catalog_connection
|
||||||
|
instrumentation_service = global_catalog.instance_variable_get(:@instrumentation_service)
|
||||||
|
|
||||||
|
auth = global_catalog.instance_variable_get(:@auth)
|
||||||
|
assert_equal :simple, auth[:method]
|
||||||
|
assert_equal "127.0.0.1", global_catalog.host
|
||||||
|
assert_equal 3268, global_catalog.port
|
||||||
|
assert_equal "MockInstrumentationService", instrumentation_service.class.name
|
||||||
|
end
|
||||||
|
|
||||||
|
module GitHubLdapUnauthenticatedTestCases
|
||||||
|
def test_global_catalog_unauthenticated_default_settings
|
||||||
|
@ad_user_search.expects(:active_directory_capability?).returns(true)
|
||||||
|
global_catalog = @ad_user_search.global_catalog_connection
|
||||||
|
# this is ugly, but currently the only way to test Net::LDAP#auth values
|
||||||
|
auth = global_catalog.instance_variable_get(:@auth)
|
||||||
|
|
||||||
|
assert_equal nil, auth[:password]
|
||||||
|
assert_equal nil, auth[:username]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module GitHubLdapAuthenticatedTestCases
|
||||||
|
def test_global_catalog_authenticated_default_settings
|
||||||
|
@ad_user_search.expects(:active_directory_capability?).returns(true)
|
||||||
|
global_catalog = @ad_user_search.global_catalog_connection
|
||||||
|
# this is ugly, but currently the only way to test Net::LDAP#auth values
|
||||||
|
auth = global_catalog.instance_variable_get(:@auth)
|
||||||
|
|
||||||
|
assert_equal "passworD1", auth[:password]
|
||||||
|
assert_equal "uid=admin,dc=github,dc=com", auth[:username]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Загрузка…
Ссылка в новой задаче