fakeldap er et Python-modul som gir en enkel måte å spotte LDAP backend-servere for dine unittests. & Nbsp; Det gjør det mulig å definere på forhånd et sett av katalogoppføringer som kan spørres eller satt fast avkastning verdier til LDAP-spørringer. Det fungerer som en dråpe i erstatning for LDAPObject klassen av python-ldap modulen. Det implementerer en undergruppe av de tillatte metodene for denne klassen.
Denne modulen implementerer MockLDAP klassen som fungerer både som LDAPObject samt LDAP-modulen. Mesteparten av kode og design har blitt tatt fra Peter Sagerson utmerkede django-auth-ldap modulen.
Installasjon
Få og installere koden:
& Nbsp; git clone git: //github.com/30loops/fakeldap.git
& Nbsp; cd fakeldap
& Nbsp; python setup.py installere
Hvis du vil, kan du kjøre testene:
& nbsp; python setup.py nosetests
Bruk
Merk: Denne koden er fortsatt eksperimentell og ikke veldig testet som foreløpig. Så er dokumentasjonen
Den MockLDAP klassen erstatter LDAPObject av python-ldap modulen. Den enkleste måten å bruke det, er å overskrive ldap.initialize å returnere MockLDAP stedet for LDAPObject. Eksempelet nedenfor bruker Michael Foord sin Mock biblioteket for å oppnå dette:
import unittest
fra mock import patch
fra fakeldap import MockLDAP
_mock_ldap = MockLDAP ()
klasse YourTestCase (unittest.TestCase):
& Nbsp; def Setup (egen-):
& Nbsp; # Patch der ldap biblioteket brukes:
& 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 (egen-):
& Nbsp; _mock_ldap.reset ()
& Nbsp; self.mock_ldap.stop ()
Håne ldap objektet implementerer følgende ldap operasjoner:
- Simple_bind_s
- search_s
- compare_s
- modify_s
- delete_s
- add_s
- rename_s
Dette er et eksempel hvordan du bruker MockLDAP med fast avkastning verdier:
def test_some_ldap_group_stuff (egen-):
& Nbsp; # Definer den forventede avkastningen verdi for ldap drift
& Nbsp; return_value = ("cn = testgroup, ou = gruppe, dc = 30loops, dc = net", {
& Nbsp; 'object': ['posixGroup'],
& Nbsp; 'cn': 'testgroup',
& Nbsp; 'gidNumber': '2030',
& Nbsp;})
& Nbsp; # Registrere en returverdi med MockLDAP objekt
& Nbsp; _mock_ldap.set_return_value ('add_s',
& Nbsp; ("cn = testgroup, ou = grupper, dc = 30loops, dc = net", (
& Nbsp; ('object', ('posixGroup')),
& Nbsp; ('cn', 'testgroup'),
& Nbsp; ('gidNumber', '2030'))),
& Nbsp; (105, [], 10, []))
& Nbsp; # Kjør faktiske koden, dette er bare et eksempel
& Nbsp; group_manager = GroupManager ()
& Nbsp; resultat = group_manager.add ("testgroup")
& Nbsp; # hevde at avkastningen verdien av metode og av MockLDAP
& Nbsp; # er som forventet, her bruker python-nese sin eq () test verktøy:
& Nbsp; eq_ (return_value, resultat)
& Nbsp; # Hver faktiske ldap kaller programvaren gjør blir registrert. Du kan
& Nbsp; # utarbeide en liste over samtaler som du forventer å bli utstedt og sammenligne det:
& nbsp; called_records = []
& Nbsp; called_records.append (('simple_bind_s',
& Nbsp; {'hvem': 'cn = admin, dc = 30loops, dc = netto', 'cred': 'ldaptest'}))
& Nbsp; called_records.append (('add_s', {
& Nbsp; 'dn': 'cn = testgroup, ou = grupper, dc = 30loops, dc = net ",
& Nbsp; 'record': [
& Nbsp; ('object', ['posixGroup']),
& Nbsp; ('gidNumber', '2030'),
& Nbsp; ('cn', 'testgroup'),
& Nbsp;]}))
& Nbsp; # Og igjen teste forventet atferd
& Nbsp; eq_ (called_records, _mock_ldap.ldap_methods_called_with_arguments ())
Foruten å fikse returverdier for bestemte samtaler, kan du også imitere en full ldap server med en katalog av oppføringer:
# Lag en forekomst av MockLDAP med en forhåndsinnstilt katalog
treet = {
& Nbsp; "cn = admin, dc = 30loops, dc = net": {
& Nbsp; "user": "ldaptest"
& Nbsp;}
}
mock_ldap = MockLDAP (tre)
record = [
& Nbsp; ('uid', 'Crito'),
& Nbsp; ('user', 'hemmelige'),
]
# Returverdien jeg forvente når jeg legger en annen post til katalogen
eq_ (
& Nbsp; (105, [], 1, []),
& nbsp; mock_ldap.add_s ("uid = Crito, ou = folk, dc = 30loops, dc = net", rekord)
)
# Den forventede katalog
directory = {
& Nbsp; "cn = admin, dc = 30loops, dc = net": {"user": "ldaptest"},
& Nbsp; "uid = Crito, ou = folk, dc = 30loops, dc = net": {
& Nbsp; "uid": "Crito", "user": "hemmelige"}
}
# Sammenligne forventet katalog med MockLDAP katalog
eq_ (katalog, mock_ldap.directory)
Krav
- Python
Kommentarer ikke funnet