fakeldap je Python modul, který poskytuje jednoduchý způsob, jak vysmívat LDAP backend servery pro vaše unittests. & Nbsp; Tak to je možné definovat upfront sadu záznamů v adresáři, které mohou být dotazovány, nebo stanoveny pevné návratové hodnoty, na dotazy LDAP. Působí jako pokles náhrada za LDAPObject třídě python-ldap modulem. Realizuje podmnožinu povolených způsobů této třídy.
Tento modul implementuje třídu MockLDAP, který funguje jak jako LDAPObject stejně jako LDAP modul. Většina kódu a designu byla převzata z vynikající Django-auth-LDAP modul Petera Sagerson je.
Instalace
Získat a nainstalovat kód:
& Nbsp; git clone git: //github.com/30loops/fakeldap.git
& Nbsp; CD fakeldap
& Nbsp; python setup.py nainstalovat
Chcete-li, můžete spustit testy:
& nbsp; python setup.py nosetests
Použití
Poznámka: Tento kód je stále experimentální a ne moc testován jak přesto. Takže je dokumentace
Třída MockLDAP nahrazuje LDAPObject na python-ldap modulem. Nejjednodušší způsob, jak ji používat, je přepsat ldap.initialize vrátit MockLDAP místo LDAPObject. Níže uvedený příklad používá Mock knihovnu Michaela Foord je dosáhnout toho, aby:
import unittest
od předstíraným import náplasti
od fakeldap import MockLDAP
_mock_ldap = MockLDAP ()
třída YourTestCase (unittest.TestCase):
& Nbsp; def Setup (self):
& Nbsp; # Patch, kde je použita knihovna LDAP:
& Nbsp; self.ldap_patcher = náplast ('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 ()
Mock LDAP objekt implementuje následující Operace LDAP:
- Simple_bind_s
- search_s
- compare_s
- modify_s
- delete_s
- add_s
- rename_s
Toto je příklad, jak používat MockLDAP s pevnými vrácené hodnoty:
def test_some_ldap_group_stuff (self):
& Nbsp; # Definujte očekávanou návratovou hodnotu pro operaci ldap
& Nbsp; return_value = ("cn = testgroup, ou = skupina, dc = 30loops, dc = net", {
& Nbsp; "objectClass": ['posixGroup'],
& Nbsp; "KN": "testgroup",
& Nbsp; "gidNumber ':' 2030 ',
& Nbsp;})
& Nbsp; # Zaregistrujte návratovou hodnotu s objektem MockLDAP
& Nbsp; _mock_ldap.set_return_value ("add_s",
& Nbsp; ("cn = testgroup, ou = skupiny, dc = 30loops, dc = net", (
& Nbsp; ('objectClass ", (" posixGroup')),
& Nbsp; ('KN', 'testgroup "),
& Nbsp; ('gidNumber "," 2030 "))),
& Nbsp; (105, [], 10, []))
& Nbsp; # Spusťte váš skutečný kód, to je jen příklad
& Nbsp; group_manager = GroupManager ()
& Nbsp; result = group_manager.add ("testgroup")
& Nbsp; # tvrdí, že vrácená hodnota metodu a MockLDAP
& Nbsp; #, jsou, jak se očekávalo, se zde pomocí python-nos je eq () Test funkce:
& Nbsp; eq_ (return_value, výsledek)
& Nbsp; # Každá skutečná LDAP volat váš software umožňuje dostane zaznamenána. Mohl bys
& Nbsp; # připravit seznam hovorů, které očekáváte být vydán, a porovnat ji:
& nbsp; called_records = []
& Nbsp; called_records.append (("simple_bind_s",
& Nbsp; {"kdo": "cn = admin, dc = 30loops, dc = net", "cred": "ldaptest '}))
& Nbsp; called_records.append (("add_s", {
& Nbsp; "dn": "CN = testgroup, ou = skupiny, dc = 30loops, dc = net",
& Nbsp; "rekord": [
& Nbsp; ('objectClass ", [' posixGroup ']),
& Nbsp; ('gidNumber "," 2030 "),
& Nbsp; ('KN', 'testgroup "),
& Nbsp;]}))
& Nbsp; # A opět testovat očekávané chování
& Nbsp; eq_ (called_records, _mock_ldap.ldap_methods_called_with_arguments ())
Kromě upevnění návratové hodnoty pro specifické výzvy, můžete také imitovat plnou server LDAP s adresáři záznamů:
# Vytvoření instance MockLDAP s adresářem přednastavenou
strom = {
& Nbsp; "cn = admin, dc = 30loops, dc = net": {
& Nbsp; "userPassword": "ldaptest"
& Nbsp;}
}
mock_ldap = MockLDAP (strom)
Záznam = [
& Nbsp; ('uid', 'Crito "),
& Nbsp; ("userPassword", "tajné"),
]
# Návratová hodnota myslím, že když jsem se přidat další záznam do adresáře
eq_ (
& Nbsp; (105, [], 1, []),
& nbsp; mock_ldap.add_s ("uid = Crito, ou = lidé, dc = 30loops, dc = net", záznam)
)
# Očekávané adresář
directory = {
& Nbsp; "cn = admin, dc = 30loops, dc = net": {"userPassword": "ldaptest"},
& Nbsp; "uid = Crito, ou = lidé, dc = 30loops, dc = net": {
& Nbsp; "uid": "Crito", "userPassword": "tajný"}
}
# Porovnejte očekávanou adresář v adresáři MockLDAP
eq_ (adresář, mock_ldap.directory)
Požadavky na :
- Python
Komentáře nebyl nalezen