使用MongoDB进行集成测试 - 身份验证

时间:2013-03-18 21:51:56

标签: python mongodb flask

我有一个使用mongodb的模块,我正在为它编写集成测试。我的测试基于here示例。

当我致电OperationFailure: command SON([('listDatabases', 1)]) failed: need to login

时,我看到的错误是conn.database_names()

问题是我不确定如何登录。我已经尝试将--username和--password参数添加到subprocess.Popen,没有运气,而pymongo.Connection对象没有authenticate方法,尽管pymongo数据库对象有。

当我从Popen启动mongo时,是否有一种方法可以进行身份​​验证,或者重新构建它以便我可以访问数据库对象?

class MongoTemporaryInstance(object):

    _instance = None

    @classmethod
    def get_instance(cls):
        if cls._instance is None:
            cls._instance = cls()
            atexit.register(cls._instance.shutdown)
        return cls._instance

    def __init__(self):
        self._tmpdir = tempfile.mkdtemp()
        self._process = subprocess.Popen(['mongod', '--bind_ip', 'localhost',
                                      '--port', str(MONGODB_TEST_PORT),
                                      '--dbpath', self._tmpdir,
                                      '--nojournal', '--nohttpinterface',
                                      '--noauth', '--smallfiles',
                                      '--syncdelay', '0',
                                      '--maxConns', '10',
                                      '--nssize', '1', ],
                                         stdout=open(os.devnull, 'wb'),
                                         stderr=subprocess.STDOUT)

        for i in range(3):
            time.sleep(0.1)
            try:
                self._conn = pymongo.Connection('localhost', MONGODB_TEST_PORT)
            except pymongo.errors.ConnectionFailure:
                continue
            else:
                break

1 个答案:

答案 0 :(得分:0)

问题出现在@RobMoore建议的地方 - 有一个旧的mongodb进程在该端口上使用身份验证运行。我改变了端口,它有效!