LDAPObject的实现,用于在unittests中模拟ldap服务器。
项目描述
本模块的目的是为您的单元测试提供一个简单的方式来模拟ldap后端服务器。它允许您预先定义一组可查询或为ldap查询设置固定返回值的目录条目。它作为python-ldap模块中的LDAPObject类的直接替换。它实现了该类允许的方法的一个子集。
本模块实现了MockLDAP类,该类既充当LDAPObject又充当ldap模块。大部分代码和设计都取自Peter Sagerson的优秀的django-auth-ldap模块。
安装
从PyPI安装最新版本
$ pip install fakeldap
在开发中运行测试
如果您已本地克隆了存储库
$ git clone git://github.com/zulip/fakeldap.git
并对代码进行了修改,请确保已安装pytest
$ pip install pytest
并且您可以使用以下命令运行测试
$ pytest tests.py
用法
MockLDAP类替换了python-ldap模块中的LDAPObject。使用它的最简单方法是覆盖ldap.initialize以返回MockLDAP而不是LDAPObject。下面的示例使用Michael Foord的Mock库来实现这一点
import unittest from mock import patch from fakeldap import MockLDAP _mock_ldap = MockLDAP() class YourTestCase(unittest.TestCase): def setUp(self): # Patch where the ldap library is used: self.ldap_patcher = patch('app.module.ldap.initialize') self.mock_ldap = self.ldap_patcher.start() self.mock_ldap.return_value = _mock_ldap def tearDown(self): _mock_ldap.reset() self.mock_ldap.stop()
mock ldap对象实现了以下ldap操作
simple_bind_s
search_s
compare_s
modify_s
delete_s
add_s
rename_s
以下是如何使用MockLDAP与固定返回值的示例
def test_some_ldap_group_stuff(self): # Define the expected return value for the ldap operation return_value = ("cn=testgroup,ou=group,dc=30loops,dc=net", { 'objectClass': ['posixGroup'], 'cn': 'testgroup', 'gidNumber': '2030', }) # Register a return value with the MockLDAP object _mock_ldap.set_return_value('add_s', ("cn=testgroup,ou=groups,dc=30loops,dc=net", ( ('objectClass', ('posixGroup')), ('cn', 'testgroup'), ('gidNumber', '2030'))), (105,[], 10, [])) # Run your actual code, this is just an example group_manager = GroupManager() result = group_manager.add("testgroup") # assert that the return value of your method and of the MockLDAP # are as expected, here using python-nose's eq() test tool: self.assertEqual(return_value, result) # Each actual ldap call your software makes gets recorded. You could # prepare a list of calls that you expect to be issued and compare it: called_records = [] called_records.append(('simple_bind_s', {'who': 'cn=admin,dc=30loops,dc=net', 'cred': 'ldaptest'})) called_records.append(('add_s', { 'dn': 'cn=testgroup,ou=groups,dc=30loops,dc=net", 'record': [ ('objectClass', ['posixGroup']), ('gidNumber', '2030'), ('cn', 'testgroup'), ]})) # And again test the expected behaviour self.assertEqual(called_records, _mock_ldap.ldap_methods_called_with_arguments())
除了为特定调用固定返回值之外,您还可以使用条目目录来模拟完整的ldap服务器
# Create an instance of MockLDAP with a preset directory tree = { "cn=admin,dc=30loops,dc=net": { "userPassword": "ldaptest" } } mock_ldap = MockLDAP(tree) record = [ ('uid', 'crito'), ('userPassword', 'secret'), ] # The return value I expect when I add another record to the directory self.assertEqual( (105,[],1,[]), mock_ldap.add_s("uid=crito,ou=people,dc=30loops,dc=net", record) ) # The expected directory directory = { "cn=admin,dc=30loops,dc=net": {"userPassword": "ldaptest"}, "uid=crito,ou=people,dc=30loops,dc=net": { "uid": "crito", "userPassword": "secret"} } # Compare the expected directory with the MockLDAP directory self.assertEqual(directory, mock_ldap.directory)
项目详情
下载文件
下载适合您平台的项目文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
fakeldap-0.6.6.tar.gz (8.4 kB 查看哈希值)
构建分发
fakeldap-0.6.6-py2.py3-none-any.whl (8.3 kB 查看哈希值)