【问题标题】:Integration Testing with MongoDB - Authentication使用 MongoDB 进行集成测试 - 身份验证
【发布时间】:2013-03-18 21:51:56
【问题描述】:

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

当我调用conn.database_names() 时,我看到的错误是OperationFailure: command SON([('listDatabases', 1)]) failed: need to login

问题是我不确定如何登录。我尝试将 --username 和 --password 参数添加到 subprocess.Popen,但没有成功,并且 pymongo.Connection 对象没有身份验证方法,尽管 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

【问题讨论】:

  • pymongo.Connection('mongodb://<username>:<password>@localhost', MONGODB_TEST_PORT) 有效吗? pymongo.Connection 似乎接受 mongodb URIs(根据 API)。
  • 命令行中没有任何需要身份验证的内容。事实上 --noauth 恰恰相反。您是否已验证没有正在运行的旧monogd 进程正在运行“MONGODB_TEST_PORT”上的身份验证?

标签: python mongodb flask


【解决方案1】:

问题正如@RobMoore 所建议的那样 - 有一个旧的 mongodb 进程在该端口上使用身份验证运行。我更改了端口,它起作用了!

【讨论】:

    猜你喜欢
    • 2013-11-22
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2020-12-08
    相关资源
    最近更新 更多