fakeldap è un modulo Python che fornisce un modo semplice per prendere in giro i server di backend LDAP per i vostri Unittests. & Nbsp; Permette di definire in anticipo una serie di voci di directory che possono essere interrogati o impostati valori di ritorno fissati a LDAP query. Esso agisce come un rimpiazzo per la classe LDAPObject del modulo python-ldap. Si implementa un sottoinsieme dei metodi consentiti di questa classe.
Questo modulo implementa la classe MockLDAP che funziona sia come LDAPObject nonché il modulo LDAP. La maggior parte del codice e del design è stata presa da eccellente modulo django-auth-ldap di Peter Sagerson.
Installazione
Prendi e installare il codice:
& Nbsp; git clone git: //github.com/30loops/fakeldap.git
& Nbsp; cd fakeldap
& Nbsp; python setup.py install
Se si desidera, è possibile eseguire i test:
& nbsp; nosetests python setup.py
Utilizzo
Nota: Questo codice è ancora sperimentale e poco testato come ancora. Così è la documentazione
La classe MockLDAP sostituisce la LDAPObject del modulo python-ldap. Il modo più semplice da usare, è quello di sovrascrivere ldap.initialize tornare MockLDAP invece di LDAPObject. L'esempio che segue utilizza la libreria Mock di Michael Foord per raggiungere questo:
import unittest
da patch di importazione finto
da fakeldap MockLDAP importazione
_mock_ldap = MockLDAP ()
Classe YourTestCase (unittest.TestCase):
& Nbsp; def setUp (self):
& Nbsp; # Patch in cui viene utilizzata la libreria ldap:
& Nbsp; self.ldap_patcher = patch ('app.module.ldap.initialize')
& Nbsp; self.mock_ldap = self.ldap_patcher.start ()
& Nbsp; self.mock_ldap.return_value = _mock_ldap
& Nbsp; def tearDown (self):
& Nbsp; _mock_ldap.reset ()
& Nbsp; self.mock_ldap.stop ()
L'oggetto LDAP finto implementa le seguenti operazioni LDAP:
- Simple_bind_s
- search_s
- compare_s
- modify_s
- delete_s
- add_s
- rename_s
Questo è un esempio di come utilizzare MockLDAP con valori di ritorno fissi:
def test_some_ldap_group_stuff (self):
& Nbsp; # Definire il valore di rendimento atteso per l'operazione ldap
& Nbsp; return_value = ("cn = TestGroup, ou = gruppo, dc = 30loops, dc = net", {
& Nbsp; 'objectClass': ['posixGroup'],
& Nbsp; 'cn': 'TestGroup',
& Nbsp; 'gidNumber': '2030',
& Nbsp;})
& Nbsp; # Registra un valore di ritorno con l'oggetto MockLDAP
& Nbsp; _mock_ldap.set_return_value ('add_s',
& Nbsp; ("cn = TestGroup, ou = gruppi, dc = 30loops, dc = net", (
& Nbsp; ('objectClass', ('posixGroup')),
& Nbsp; ('cn', 'TestGroup'),
& Nbsp; ('gidNumber', '2030'))),
& Nbsp; (105, [], 10, []))
& Nbsp; # eseguire il codice vero e proprio, questo è solo un esempio
& Nbsp; group_manager = GroupManager ()
& Nbsp; result = group_manager.add ("TestGroup")
& Nbsp; # affermano che il valore di ritorno del metodo e del MockLDAP
& Nbsp; # sono come previsto, qui utilizzando eq () strumento di test di python-naso:
& Nbsp; eq_ (return_value, risultato)
& Nbsp; # Ogni LDAP effettivo chiamare il software fa viene registrato. Potresti
& Nbsp; # preparare una lista di chiamate che ci si aspetta da emettere e confrontarlo:
& nbsp; called_records = []
& Nbsp; called_records.append (('simple_bind_s',
& Nbsp; {'chi': 'cn = admin, dc = 30loops, dc = net', 'cred': 'ldaptest'}))
& Nbsp; called_records.append (('', {add_s
& Nbsp; 'dn': 'CN = TestGroup, ou = gruppi, dc = 30loops, dc = net ",
& Nbsp; 'record': [
& Nbsp; ('objectClass', ['posixGroup']),
& Nbsp; ('gidNumber', '2030'),
& Nbsp; ('cn', 'TestGroup'),
& Nbsp;]}))
& Nbsp; # E ancora testare il comportamento previsto
& Nbsp; eq_ (called_records, _mock_ldap.ldap_methods_called_with_arguments ())
Oltre di fissare i valori di ritorno per le chiamate specifiche, è possibile anche di imitare un server LDAP completo con un elenco di voci:
# Creare un'istanza di MockLDAP con una directory preimpostata
albero = {
& Nbsp; "cn = admin, dc = 30loops, dc = net": {
& Nbsp; "userPassword": "ldaptest"
& Nbsp;}
}
mock_ldap = MockLDAP (albero)
disco = [
& Nbsp; ('uid', 'Critone'),
& Nbsp; ('userPassword', 'segreto'),
]
# Il valore di ritorno mi aspetto quando aggiungo un altro record nella directory
eq_ (
& Nbsp; (105, [], 1, []),
& nbsp; mock_ldap.add_s ("uid = Critone, ou = people, dc = 30loops, dc = net", record)
)
# L'elenco previsto
directory = {
& Nbsp; "cn = admin, dc = 30loops, dc = net": {"userPassword": "ldaptest"},
& Nbsp; "uid = Critone, ou = people, dc = 30loops, dc = net": {
& Nbsp; "uid": "Critone", "userPassword": "segreto"}
}
# Confrontare la directory previsto con la directory MockLDAP
eq_ (directory, mock_ldap.directory)
Requisiti
- Python
I commenti non trovato