문제

인증을 위해 AuthLogic을 사용하는 응용 프로그램에 대한 오이 테스트를 작성하려고하지만 실제로 LDAP 서버에 사용자를 저장합니다.

응용 프로그램은 잘 작동하는 것처럼 보이지만 문제가 발생하는 곳은 테스트를 작성하는 것입니다 (테스트를 먼저 작성해야한다는 것을 알고 있습니다.) LDAP 서버는 각 실행이지만 쉽지는 않습니다.

내 아이디어는 레이크 작업 (예 : 레이크 LDAP : 테스트 : 준비)을 작성하여 각 실행 전에 LDAP 서버를 새로 고치는 것 (또는 종속성을 만들기 위해)이지만 테스트 작업을 수행 할 때는 시간이 많이 걸리는 것 같습니다 (그리고 Autotest를 가까이하게 만드는 것 같습니다. 불가능한.)

더 좋은 방법이 있습니까? 사전 정의 된 비품으로 바인딩 할 수있는 루비 기반 가짜 LDAP 서버가 있습니까? 내가 생각하지 않는 다른 더 우아한 솔루션이 있습니까? (LDAP를 사용하지 않는 것은 옵션이 아닙니다.)

도움이 되었습니까?

해결책

따라서 일반적으로 오이 테스트는 통합 및 수락 테스트를위한 것입니다. 이 경우 시스템 엔드 투 엔드를 테스트해야하므로 LDAP 통합도 테스트해야합니다. 내 제안은 당신이 그것을 스윙 할 수 있다면, 다른 LDAP 서버를 설정하고 라이브 서버에서 주기적 덤프를 수행하여 필요한 테스트 데이터로 설정하는 것입니다.

나는 각 실행 전에 LDAP DB를 새로 고치는 의존성을 갖는 첫 번째 아이디어가 "올바른"방법이라고 말할 것입니다. 통합/수락 테스트입니다 추정된 오랜 시간이 걸립니다. 작은 (단위) 조각뿐만 아니라 시스템의 기능 전체를 테스트하고 있습니다.

오이는 단위 테스트 프레임 워크가 아니므로 그런 식으로 사용해서는 안됩니다. 테스트가 없었기 때문에 2.3.4로 마이그레이션 한 후 신청서가 끊어지면 거기에 들어가서 단위 테스트를 시작해야한다고 생각합니다 ...

이제 이것은 내 개인적인 편견이지만, 단위 테스트가 없다면 RSPEC를 살펴 보겠습니다. 오이의 영어와 같은 구문이 마음에 들면 RSPEC은 분명히 비슷하게 느껴질 것입니다. Test :: Unit에서 이미 다소 테스트 된 경우 Test :: Unit Framework 내에서 RSPEC 느낌을 얻기 위해 Doolsa를 파티에 가져 오거나 컨텍스트/일성 (GitHub에서 사용할 수 있음)을 확실히 제안합니다.

다른 팁

Ladle을 테스트 LDAP 서버로 사용하십시오. "Ladle은 RSPEC, 오이 또는 기타 Ruby 테스트 프레임 워크와 함께 테스트하는 데 사용하기위한 LDAP (Lightweight Directory Access)의 도움을 줄 것입니다."

https://github.com/nubic/ladle

마침내 각 오이 시나리오가 실행되기 전에 기본적으로 LDAP 서버를 청소할 수있었습니다. 나는 오이에 고리를 추가하여 이것을했다

Before do |scenario|
  puts "Cleaning Up LDAP Server"
  LdapConnect.new(:admin => true).clear_users!
end

그런 다음 LDAPConnect 클래스 (여러 모델이 LDAP 서버를 터치해야 하므로이 개체를 전달할 수 있습니다). LDAP 상호 작용을 위해 Ruby-Net-Ldap 보석을 사용하고 있습니다

class LdapConnect

  def initialize(params = {})
    ldap_config = YAML.load_file("#{RAILS_ROOT}/config/ldap.yml")[RAILS_ENV]
    ldap_options = params.merge({:encryption => :simple_tls})

    @ldap = Net::LDAP.new(ldap_options)
    @ldap.host = ldap_config["host"]
    @ldap.port = ldap_config["port"]
    @ldap.base = ldap_config["base"]
    @ldap.auth ldap_config["admin_user"], ldap_config["admin_password"] if params[:admin] 
  end

  def ldap
    @ldap
  end

  def clear_users!(base = "ou=people,dc=test,dc=com")
    raise "You should ONLY do this on the test enviornment! It will clear out all of the users in the LDAP server" if RAILS_ENV != "test"
    if @ldap.bind
      @ldap.search(:filter => "cn=*", :base => base) do |entry|
        @ldap.delete(:dn => entry.dn)
      end
    end
  end

end

그래서 내 오이 기능은 다음과 같습니다.

Feature: Check to make sure users can login
  In order to make sure users can login with the LDAP server
  As a user
  I want to make sure the user can login

  Background:
    Given I have the following users
    | email | password | user_class | first_name | last_name |
    | external@test.com | right_password | externalPerson | external | person |
    | internal@test.com | right_password | internalPerson | internal | person |
    | admin@test.com | right_password | adminPerson | admin | person |

  Scenario: Success Login Check
    Given I am logged in as "external@test.com" with password "right_password"
    Then I should be on the homepage

그리고 마지막으로 단계

Given /^I have the following users$/ do |table|
  # table is a Cucumber::Ast::Table
  table.hashes.each do |hash|
    hash[:password_confirmation] == hash[:password] unless hash[:password_confirmation]
    User.create(hash)
  end
end

Given /^I am logged in as "([^\"]*)" with password "([^\"]*)"$/ do |email, password|
  visit login_url  
  fill_in "Email", :with => email  
  fill_in "Password", :with => password  
  click_button "Login" 
end

나는 방금 이것을 직접 조사해 왔으며, 다소 라다 파 켈 딥 보석을 가로 질러왔다.

http://github.com/aanand/fakeldaphttp://rubygems.org/gems/fakeldap

나는 그것을 사용한 후에이 답변을 약간의 경험으로 추가 할 수 있습니다.

실제로 대답은 아니지만 ... 오이로 LDAP 인증 및 조회 코드를 테스트하는 매우 유사한 문제를 해결하고 있습니다. 테스트에서 스터브를 사용해 보셨습니까? 나는 내 LDAP 응답을 스터브 할 생각을하고 있었다. 단지 아직 어떻게 해야할지 모른다.

매트

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top