fakeldap er en Python-modul, der giver en enkel måde at håne LDAP backend servere til dine unittests. & Nbsp; Det gør det muligt at definere på forhånd et sæt opslag, der kan forespørges eller sat fast afkast værdier LDAP-forespørgsler. Det fungerer som et fald i erstatning for LDAPObject klasse i python-ldap modul. Det gennemfører en delmængde af de tilladte metoder i denne klasse.
Dette modul gennemfører MockLDAP klasse, der både fungerer som den LDAPObject samt ldap modulet. Det meste af koden og design er taget fra Peter Sagerson fremragende Django-auth-ldap modul.
Installation
Få og installere koden:
& Nbsp; git klon git: //github.com/30loops/fakeldap.git
& Nbsp; cd fakeldap
& Nbsp; python setup.py installere
Hvis du ønsker, kan du køre testene:
& nbsp; python setup.py nosetests
Anvendelse
Bemærk: Denne kode er stadig eksperimenterende og ikke meget testet som af endnu. Så er dokumentationen
Den MockLDAP klassen erstatter LDAPObject af python-ldap modul. Den nemmeste måde at bruge det, er at overskrive ldap.initialize at returnere MockLDAP stedet for LDAPObject. Nedenstående eksempel bruger Michael foord s Mock bibliotek for at nå dette:
import unittest
fra mock import patch
fra fakeldap import MockLDAP
_mock_ldap = MockLDAP ()
klasse YourTestCase (unittest.TestCase):
& Nbsp; def opsætning (selv-):
& Nbsp; # Patch hvor ldap biblioteket bliver brugt:
& 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 (selv-):
& Nbsp; _mock_ldap.reset ()
& Nbsp; self.mock_ldap.stop ()
Mock ldap objekt implementerer følgende LDAP operationer:
- Simple_bind_s
- search_s
- compare_s
- modify_s
- delete_s
- add_s
- rename_s
Dette er et eksempel, hvordan man bruger MockLDAP med faste afkast værdier:
def test_some_ldap_group_stuff (selv-):
& Nbsp; # Definer det forventede afkast værdi for ldap operation
& Nbsp; return_value = ("cn = testgroup, ou = gruppe, dc = 30loops, dc = netto", {
& Nbsp; "objectClass«: ['posixGroup'],
& Nbsp; "cn«: »testgroup«,
& Nbsp; "gidNumber«: »2030«,
& Nbsp;})
& Nbsp; # Registrer en returværdi med MockLDAP objektet
& Nbsp; _mock_ldap.set_return_value ('add_s «,
& Nbsp; ("cn = testgroup, ou = grupper, dc = 30loops, dc = netto", (
& Nbsp; ('objectClass «(' posixGroup«)),
& Nbsp; ('cn', 'testgroup'),
& Nbsp; ('gidNumber', '2030'))),
& Nbsp; (105, [], 10, []))
& Nbsp; # Kør din faktiske kode, det er bare et eksempel
& Nbsp; group_manager = GroupManager ()
& Nbsp; resultat = group_manager.add ("testgroup")
& Nbsp; # hævde, at returværdien af din metode og MockLDAP
& Nbsp; # er som forventet, her ved hjælp af python-næse er eq () testværktøj:
& Nbsp; eq_ (return_value, resultat)
& Nbsp; # Hver faktiske ldap ringe til din software gør bliver registreret. Du kunne
& Nbsp; # udarbejde en liste over opkald, du forventer at blive udstedt og sammenligne det:
& nbsp; called_records = []
& Nbsp; called_records.append (('simple_bind_s «,
& Nbsp; {'hvem «:» cn = admin, dc = 30loops, dc = net "," cred «:» ldaptest'}))
& Nbsp; called_records.append (('add_s «{
& Nbsp; "dn«: »cn = testgroup, ou = grupper, dc = 30loops, dc = net",
& Nbsp; "record": [
& Nbsp; ('objectClass', ['posixGroup']),
& Nbsp; ('gidNumber', '2030'),
& Nbsp; ('cn', 'testgroup'),
& Nbsp;]}))
& Nbsp; # Og igen teste forventede adfærd
& Nbsp; eq_ (called_records, _mock_ldap.ldap_methods_called_with_arguments ())
Udover at fastsætte returværdier for bestemte opkald, kan du også efterligne en fuld ldap server med et bibliotek af poster:
# Opret en forekomst af MockLDAP med en forudindstillet bibliotek
træ = {
& Nbsp; "cn = admin, dc = 30loops, dc = netto": {
& Nbsp; "userPassword": "ldaptest"
& Nbsp;}
}
mock_ldap = MockLDAP (træ)
record = [
& Nbsp; ('uid', 'Kriton'),
& Nbsp; ('userPassword', 'hemmelige'),
]
# Afkastet værdi, jeg forvente, når jeg tilføjer en anden post til den mappe
eq_ (
& Nbsp; (105, [], 1, []),
& nbsp; mock_ldap.add_s ("uid = Kriton, ou = folk, dc = 30loops, dc = netto", optage)
)
# Den forventede mappe
directory = {
& Nbsp; "cn = admin, dc = 30loops, dc = netto": {"userPassword": "ldaptest"},
& Nbsp; "uid = Kriton, ou = folk, dc = 30loops, dc = netto": {
& Nbsp; "uid": "Kriton", "userPassword": "hemmelige"}
}
# Sammenligne den forventede mappe med MockLDAP biblioteket
eq_ (bibliotek, mock_ldap.directory)
Krav :
- Python
Kommentarer ikke fundet