Pregunta

Estoy tratando de escribir algunas de pepino pruebas para mi aplicación que utiliza Authlogic para la autenticación, pero en realidad las tiendas de los usuarios en un servidor LDAP.

La aplicación parece funcionar bien, pero cuando estoy corriendo en problemas es la escritura de pruebas para que (yo sé, yo sé, yo debería haber escribió el primer examen.) Es muy fácil tener una base de datos de prueba en el que los datos se borra después de cada carrera, pero no es tan fácil con un servidor LDAP.

Mi idea era escribir una tarea rake (como el rastrillo de ldap:prueba:preparar) para actualizar el servidor ldap antes de cada ejecución (o lo hacen de una dependencia), pero que parece bastante consume mucho tiempo cuando estoy trabajando en pruebas (y hace autotest casi imposible.)

Hay una manera mejor de hacer esto?Hay un rubí basado en falso servidor LDAP puedo enlazar con la pre-definido los accesorios?Hay algunos otros incluso más elegante solución que no estoy pensando?(no usar LDAP no es una opción.)

¿Fue útil?

Solución

Así que en general Pepino pruebas de integración y pruebas de aceptación.Siendo ese el caso, se supone que es para poner a prueba el sistema de extremo a extremo, por lo que debe ser la prueba de la integración de LDAP así.Mi sugerencia, si usted puede oscilar, sería para configurar otro servidor LDAP y hacer un periódico de volcado de su vivir, para establecer con cualquiera de los datos de prueba que usted necesita.

He de decir que a pesar de que su primera idea de la dependencia a la que se actualiza el LDAP db antes de cada ejecución es la forma "correcta" de hacerlo.La integración y/o las pruebas de aceptación es supone a tomar mucho tiempo.Es la prueba de la totalidad de la funcionalidad del sistema, no sólo pequeñas (unidad) piezas.

El pepino no es un marco de pruebas unitarias, y no debe ser utilizado de esa manera.Si su aplicación se rompió después de migrar a 2.3.4 porque no tienen pruebas, creo que usted debe llegar allí y empezar a escribir algunas pruebas de unidad...

Ahora este es mi sesgo personal, pero si usted no tiene pruebas de unidad en lugar me gustaría echar un vistazo a RSpec.Si te gusta el inglés-sintaxis similar a la de Pepino, RSpec, sin duda se siente similar.Si usted ya es algo probado en Test::Unit, definitivamente, me gustaría sugerir trayendo Shoulda a la parte o posiblemente Contexto/Matchy (todos los cuales están disponibles en github) para obtener el RSpec se sienten dentro de la Prueba: marco de Unidad.

Otros consejos

Tener un ir utilizando la cuchara como un servidor LDAP prueba:. "Cucharón platos humeantes porciones de ligero de acceso a directorios (LDAP) para su uso en pruebas con rspec, pepino, o cualquier otro marco de pruebas de rubí"

https://github.com/NUBIC/ladle

Por fin pude conseguir alrededor de la limpieza, básicamente, el servidor LDAP antes de ejecutar cada escenario pepino. Hice esto mediante la adición de un gancho en el pepino

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

Y entonces mi clase LdapConnect (ya que hay múltiples modelos podrían tener que tocar el servidor LDAP, sólo puede pasar alrededor de este objeto). Estoy utilizando el rubí joya-net-LDAP para la interacción 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

Por lo tanto, mi función de pepino se ve algo como:

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

Y por último los pasos

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

He estado buscando en este mismo, y he encontrado la gema fakeldap lugar bajo el radar.

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

puedo añadir a esta respuesta con un poco de experiencia después de que he utilizado.

En realidad, no una respuesta, pero ... Estoy trabajando en un problema muy similar, poniendo a prueba la autenticación LDAP y código de búsqueda con el pepino. ¿Has mirado en el uso de un talón en su prueba? Estaba pensando en mis respuestas stubbing LDAP ... simplemente no han descubierto la manera de hacerlo todavía.

Matt

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top