fakeldap is een Python module die een eenvoudige manier om LDAP backend servers bespotten voor uw unittests biedt & nbsp;. Het maakt het mogelijk om vooraf een set van directory inzendingen die kunnen worden opgevraagd of stel vast rendement waarden queries definiëren van LDAP. Het fungeert als een daling van de vervanging van de LDAPObject klasse van de python-ldap module. Het implementeert een subset van de toegestane methoden van deze klasse.
Deze module implementeert de MockLDAP klasse die zowel fungeert als LDAPObject en de LDAP module. De meeste van de code en het ontwerp is overgenomen uit Peter Sagerson uitstekende django-auth-ldap module.
installatie
Verkrijg en installeer de code:
& Nbsp; git clone git: //github.com/30loops/fakeldap.git
& Nbsp; cd fakeldap
& Nbsp; python setup.py installeren
Als u wilt, kunt u de tests uit te voeren:
& Nbsp; python setup.py nosetests
Gebruik
Opmerking: Deze code is nog experimenteel en niet erg getest als nog. Dus is de documentatie
De MockLDAP klasse vervangt de LDAPObject van de python-ldap module. De makkelijkste manier om het te gebruiken, is om ldap.initialize om MockLDAP terugkeren in plaats van LDAPObject overschrijven. Het onderstaande voorbeeld gebruikt Mock bibliotheek Michael Foord's om dat te bereiken:
import unittest
van mock import patch
van fakeldap import MockLDAP
_mock_ldap = MockLDAP ()
klasse YourTestCase (unittest.TestCase):
& Nbsp; def setup (zelf):
& Nbsp; # Patch waar de LDAP-bibliotheek wordt gebruikt:
& 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 demontage (zelf):
& Nbsp; _mock_ldap.reset ()
& Nbsp; self.mock_ldap.stop ()
De mock ldap object implementeert de volgende ldap operaties:
- Simple_bind_s
- Search_s
- Compare_s
- Modify_s
- Delete_s
- Add_s
- Rename_s
Dit is een voorbeeld hoe MockLDAP gebruiken met vaste return waarden:
def test_some_ldap_group_stuff (zelf):
& Nbsp; # Definieer het verwachte rendement waarde voor de ldap operatie
& Nbsp; return_value = ("cn = TestGroup, ou = groep, dc = 30loops, dc = net", {
& Nbsp; 'objectClass': ['posixGroup'],
& Nbsp; 'cn': 'TestGroup',
& Nbsp; 'gidNumber': '2030',
& Nbsp;})
& Nbsp; # Registreer een return waarde met de MockLDAP object
& Nbsp; _mock_ldap.set_return_value ('add_s',
& Nbsp; ("cn = TestGroup, ou = groepen, dc = 30loops, dc = net", (
& Nbsp; ('objectClass', ('posixGroup')),
& Nbsp; ('cn', 'TestGroup'),
& Nbsp; ('gidNumber', '2030'))),
& Nbsp; (105, [], 10 []))
& Nbsp; # Run je eigenlijke code, dit is slechts een voorbeeld
& Nbsp; group_manager = GroupManager ()
& Nbsp; resultaat = group_manager.add ("TestGroup")
& Nbsp; # beweren dat de return waarde van uw werkwijze en van de MockLDAP
& Nbsp; # zijn zoals verwacht, hier met behulp van python-neus eq () test tool:
& Nbsp; eq_ (return_value, resultaat)
& Nbsp; # Elke werkelijke ldap bel uw software maakt wordt vastgelegd. Je kon
& Nbsp; # bereiden een lijst van gesprekken die u verwacht te worden uitgegeven en vergelijken:
& Nbsp; called_records = []
& Nbsp; called_records.append (('simple_bind_s',
& Nbsp; {'wie': 'cn = admin, dc = 30loops, dc = net', 'cred': 'ldaptest'}))
& Nbsp; called_records.append (('add_s', {
& Nbsp; 'dn': 'cn = TestGroup, ou = groepen, dc = 30loops, dc = net ",
& Nbsp; 'opname': [
& Nbsp; ('objectClass', ['posixGroup']),
& Nbsp; ('gidNumber', '2030'),
& Nbsp; ('cn', 'TestGroup'),
& Nbsp;]}))
& Nbsp; # En weer het verwachte gedrag te testen
& Nbsp; eq_ (called_records, _mock_ldap.ldap_methods_called_with_arguments ())
Behalve van de vaststelling van de terugkeer waarden voor specifieke oproepen, kunt u ook imiteren een volledige LDAP-server met een directory van de inzendingen:
# Maak een instantie van MockLDAP met een vooraf ingestelde directory
boom = {
& Nbsp; "cn = admin, dc = 30loops, dc = net": {
& Nbsp; "userPassword": "ldaptest"
& Nbsp;}
}
mock_ldap = MockLDAP (boom)
opnemen = [
& Nbsp; ('uid', 'Crito'),
& Nbsp; ('userPassword', 'geheim'),
]
# De return waarde verwacht ik toen ik een ander record toevoegen aan de directory
eq_ (
& Nbsp; (105, [], 1, []),
& Nbsp; mock_ldap.add_s ("uid = Crito, ou = mensen, dc = 30loops, dc = net", record)
)
# De verwachte directory
directory = {
& Nbsp; "cn = admin, dc = 30loops, dc = net": {"userPassword": "ldaptest"},
& Nbsp; "uid = Crito, ou = mensen, dc = 30loops, dc = net": {
& Nbsp; "uid": "Crito", "userPassword": "geheime"}
}
# Vergelijk de verwachte directory met de MockLDAP directory
eq_ (directory, mock_ldap.directory)
Eisen
- Python
Reacties niet gevonden