def test_ensure_installed_twice(caplog):
    ensure_installed()
    ensure_installed()

    assert caplog.record_tuples == 2 * [
        ("scout_apm.instruments.redis", logging.DEBUG, "Instrumenting redis.",)
    ]
def redis_conn():
    # Copied from test_redis.py
    ensure_installed()
    # e.g. export REDIS_URL="redis://localhost:6379/0"
    if "REDIS_URL" not in os.environ:
        raise pytest.skip("Redis isn't available")
    yield redis.Redis.from_url(os.environ["REDIS_URL"])
def test_ensure_installed_twice(caplog):
    ensure_installed()
    ensure_installed()

    assert caplog.record_tuples == 2 * [
        (
            "scout_apm.instruments.redis",
            logging.INFO,
            "Ensuring redis instrumentation is installed.",
        )
    ]
def test_install_fail_no_redis(caplog):
    mock_no_redis = mock.patch("scout_apm.instruments.redis.redis", new=None)
    with mock_no_redis:
        ensure_installed()

    assert caplog.record_tuples == [
        ("scout_apm.instruments.redis", logging.DEBUG, "Instrumenting redis.",),
        (
            "scout_apm.instruments.redis",
            logging.DEBUG,
            "Couldn't import redis - probably not installed.",
        ),
    ]
def test_install_fail_no_redis(caplog):
    mock_no_redis = mock.patch("scout_apm.instruments.redis.redis", new=None)
    with mock_no_redis:
        ensure_installed()

    assert caplog.record_tuples == [
        (
            "scout_apm.instruments.redis",
            logging.INFO,
            "Ensuring redis instrumentation is installed.",
        ),
        ("scout_apm.instruments.redis", logging.INFO, "Unable to import redis"),
    ]
def test_ensure_installed_fail_no_pipeline_execute(caplog):
    mock_not_patched = mock.patch(
        "scout_apm.instruments.redis.have_patched_pipeline_execute", new=False
    )
    mock_pipeline = mock.patch("scout_apm.instruments.redis.Pipeline")
    with mock_not_patched, mock_pipeline as mocked_pipeline:
        del mocked_pipeline.execute

        ensure_installed()

    assert len(caplog.record_tuples) == 2
    assert caplog.record_tuples[0] == (
        "scout_apm.instruments.redis",
        logging.DEBUG,
        "Instrumenting redis.",
    )
    logger, level, message = caplog.record_tuples[1]
    assert logger == "scout_apm.instruments.redis"
    assert level == logging.WARNING
    assert message.startswith(
        "Failed to instrument redis.Pipeline.execute: AttributeError"
    )
def test_ensure_installed_fail_no_redis_execute_command(caplog):
    mock_not_patched = mock.patch(
        "scout_apm.instruments.redis.have_patched_redis_execute_command", new=False
    )
    mock_redis = mock.patch("scout_apm.instruments.redis.Redis")
    with mock_not_patched, mock_redis as mocked_redis:
        del mocked_redis.execute_command

        ensure_installed()

    assert len(caplog.record_tuples) == 2
    assert caplog.record_tuples[0] == (
        "scout_apm.instruments.redis",
        logging.INFO,
        "Ensuring redis instrumentation is installed.",
    )
    logger, level, message = caplog.record_tuples[1]
    assert logger == "scout_apm.instruments.redis"
    assert level == logging.WARNING
    assert message.startswith(
        "Unable to instrument redis.Redis.execute_command: AttributeError"
    )