Rieles de Pepino Pruebas Con un Servidor LDAP
-
12-09-2019 - |
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.)
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í"
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