コード例 #1
0
def test_the_instance_should_be_able_to_update_a_registered_realm():
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.register_realm("TEST123", max_requests=100, timespan=300)
    driver.update_realm("TEST123", max_requests=1000, timespan=3000)

    assert driver.realm_max_requests("TEST123") == 1000
    assert driver.realm_timespan("TEST123") == 3000

    driver.unregister_realm("TEST123")
コード例 #2
0
def test_the_instance_should_not_overwrite_when_registering_a_realm():
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.register_realm("TEST123", max_requests=100, timespan=300)
    driver.register_realm("TEST123", max_requests=1000, timespan=3000)

    assert driver.realm_max_requests("TEST123") == 100
    assert driver.realm_timespan("TEST123") == 300

    driver.unregister_realm("TEST123")
コード例 #3
0
def test_the_instance_should_ignore_invalid_values_when_updating_a_realm():
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.register_realm("TEST123", max_requests=100, timespan=300)
    driver.update_realm("TEST123",
                        max_requests="FOO",
                        timespan="BAR",
                        fake=True)

    assert driver.realm_max_requests("TEST123") == 100
    assert driver.realm_timespan("TEST123") == 300

    driver.unregister_realm("TEST123")
コード例 #4
0
def test_the_instance_should_be_able_to_determine_if_it_can_perform_a_request_for_a_registered_realm(
):
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.register_realm("TEST123", max_requests=1000, timespan=5)

    assert driver._can_perform_get("TEST123")

    driver.update_realm("TEST123", max_requests=0)

    assert not driver._can_perform_get("TEST123")

    driver.unregister_realm("TEST123")
コード例 #5
0
def test_the_instance_should_be_able_to_fetch_the_information_of_a_registered_realm(
):
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.register_realm("TEST123", max_requests=100, timespan=300)

    assert b"max_requests" in driver._fetch_realm_info("TEST123")
    assert driver._fetch_realm_info("TEST123")[b"max_requests"] == b"100"

    assert b"timespan" in driver._fetch_realm_info("TEST123")
    assert driver._fetch_realm_info("TEST123")[b"timespan"] == b"300"

    driver.unregister_realm("TEST123")
コード例 #6
0
def test_the_instance_should_perform_the_request_if_it_is_allowed_to_on_a_registered_realm(
):
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.register_realm("TEST123", max_requests=1000, timespan=5)

    driver.get("http://google.com", realms=["TEST123"])
    assert driver.find_element_by_tag_name("body") is not None

    driver.unregister_realm("TEST123")
コード例 #7
0
def test_the_instance_should_ignore_invalid_realms_when_attempting_to_unregister(
):
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.unregister_realm("TEST123")
    driver.unregister_realm("TEST")
    driver.unregister_realm("TEST12345")
コード例 #8
0
def test_the_instance_should_be_able_to_register_a_realm():
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.register_realm("TEST123", max_requests=100, timespan=300)

    assert driver.realm_max_requests("TEST123") == 100
    assert driver.realm_timespan("TEST123") == 300
    assert driver.redis.sismember("%s:REALMS" % driver.redis_prefix, "TEST123")

    driver.unregister_realm("TEST123")
コード例 #9
0
def test_the_instance_should_return_a_rate_limit_exception_if_the_request_is_not_allowed_on_a_registered_realm(
):
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.register_realm("TEST123", max_requests=0, timespan=5)

    with pytest.raises(SeleniumRespectfulRateLimitedError):
        driver.get("http://google.com", realms=["TEST123"])

    driver.unregister_realm("TEST123")
コード例 #10
0
def test_the_instance_should_be_able_to_unregister_a_realm():
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.register_realm("TEST123", max_requests=100, timespan=300)

    driver.get("http://google.com", realms=["TEST123"])

    driver.unregister_realm("TEST123")

    assert driver.redis.get(driver._realm_redis_key("TEST123")) is None
    assert not driver.redis.sismember("%s:REALMS" % driver.redis_prefix,
                                      "TEST123")
    assert not len(
        driver.redis.keys("%s:REQUESTS:%s:*" %
                          (driver.redis_prefix, "TEST123")))
コード例 #11
0
def test_the_instance_should_be_able_to_fetch_a_list_of_registered_realms():
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.register_realm("TEST123", max_requests=100, timespan=300)

    assert "TEST123" in driver.fetch_registered_realms()

    driver.unregister_realm("TEST123")
コード例 #12
0
def test_the_instance_should_validate_that_the_get_lambda_is_actually_a_call_to_self_webdriver(
):
    driver = RespectfulWebdriver(webdriver=webdriver)

    with pytest.raises(SeleniumRespectfulError):
        driver._validate_get_func("Totally a lambda!")

    with pytest.raises(SeleniumRespectfulError):
        driver._validate_get_func(lambda: 1 + 1)

    self = driver
    driver._validate_get_func(lambda: self.webdriver.get("http://google.com"))
コード例 #13
0
def test_the_instance_should_recognize_the_webdriver_proxy_methods():
    driver = RespectfulWebdriver(webdriver=webdriver)

    getattr(driver, "get")

    getattr(driver, "find_element_by_tag_name")
    getattr(driver, "quit")

    with pytest.raises(AttributeError):
        getattr(driver, "i_totally_exist")
コード例 #14
0
def test_the_instance_should_be_able_to_generate_a_redis_key_when_provided_with_a_realm(
):
    driver = RespectfulWebdriver(webdriver=webdriver)

    assert driver._realm_redis_key(
        "TEST") == "%s:REALMS:TEST" % driver.redis_prefix
    assert driver._realm_redis_key(
        "TEST2") == "%s:REALMS:TEST2" % driver.redis_prefix
    assert driver._realm_redis_key(
        "TEST SPACED") == "%s:REALMS:TEST SPACED" % driver.redis_prefix
    assert driver._realm_redis_key(
        "TEST ÉÉÉ") == "%s:REALMS:TEST ÉÉÉ" % driver.redis_prefix
コード例 #15
0
def test_the_safety_threshold_configuration_value_should_have_the_expected_effect(
):
    driver = RespectfulWebdriver(webdriver=webdriver)
    driver.config["safety_threshold"] = 10

    driver.register_realm("TEST123", max_requests=11, timespan=300)

    driver.get("http://google.com", realms=["TEST123"])

    with pytest.raises(SeleniumRespectfulRateLimitedError):
        driver.get("http://google.com", realms=["TEST123"])

    driver.unregister_realm("TEST123")
コード例 #16
0
def test_the_instance_should_be_able_to_unregister_multiple_realms():
    driver = RespectfulWebdriver(webdriver=webdriver)

    realm_tuples = [
        ["TEST123", 100, 300],
        ["TEST234", 200, 600],
        ["TEST345", 300, 900],
    ]

    driver.register_realms(realm_tuples)

    driver.get("http://google.com", realms=["TEST123", "TEST234", "TEST345"])

    driver.unregister_realms(["TEST123", "TEST234", "TEST345"])

    assert driver.redis.get(driver._realm_redis_key("TEST123")) is None
    assert not driver.redis.sismember("%s:REALMS" % driver.redis_prefix,
                                      "TEST123")
    assert not len(
        driver.redis.keys("%s:REQUESTS:%s:*" %
                          (driver.redis_prefix, "TEST123")))

    assert driver.redis.get(driver._realm_redis_key("TEST234")) is None
    assert not driver.redis.sismember("%s:REALMS" % driver.redis_prefix,
                                      "TEST234")
    assert not len(
        driver.redis.keys("%s:REQUESTS:%s:*" %
                          (driver.redis_prefix, "TEST234")))

    assert driver.redis.get(driver._realm_redis_key("TEST345")) is None
    assert not driver.redis.sismember("%s:REALMS" % driver.redis_prefix,
                                      "TEST345")
    assert not len(
        driver.redis.keys("%s:REQUESTS:%s:*" %
                          (driver.redis_prefix, "TEST345")))
コード例 #17
0
def test_the_instance_should_have_a_property_that_holds_a_redis_object():
    driver = RespectfulWebdriver(webdriver=webdriver)
    assert isinstance(driver.redis, redis.StrictRedis)
コード例 #18
0
def test_the_instance_should_be_able_to_wait_for_a_request_to_be_allowed_on_multiple_registered_realms(
):
    driver = RespectfulWebdriver(webdriver=webdriver)
    driver.config["safety_threshold"] = 0

    driver.register_realm("TEST123", max_requests=1, timespan=5)
    driver.register_realm("TEST234", max_requests=1, timespan=2)

    driver.get("http://google.com", realms=["TEST123", "TEST234"], wait=True)
    driver.get("http://google.com", realms=["TEST123", "TEST234"], wait=True)
    driver.get("http://google.com", realms=["TEST123", "TEST234"], wait=True)

    driver.unregister_realm("TEST123")
    driver.unregister_realm("TEST234")
コード例 #19
0
def test_the_instance_should_reject_invalid_webdrivers():
    with pytest.raises(SeleniumRespectfulError):
        driver = RespectfulWebdriver(webdriver="Totally a webdriver!")
コード例 #20
0
def test_the_instance_should_have_a_property_that_holds_the_config():
    driver = RespectfulWebdriver(webdriver=webdriver)
    assert isinstance(driver.config, dict)
コード例 #21
0
def test_the_instance_should_be_able_to_determine_the_amount_of_requests_performed_in_a_timespan_for_a_registered_realm(
):
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.register_realm("TEST123", max_requests=1000, timespan=5)

    assert driver._requests_in_timespan("TEST123") == 0

    self = driver
    get_func = lambda: self.webdriver.get("http://google.com")

    driver._perform_webdriver_get(get_func, realms=["TEST123"])
    driver._perform_webdriver_get(get_func, realms=["TEST123"])
    driver._perform_webdriver_get(get_func, realms=["TEST123"])

    assert driver._requests_in_timespan("TEST123") == 3

    driver.unregister_realm("TEST123")
コード例 #22
0
def test_the_instance_should_have_a_property_that_holds_a_redis_prefix():
    driver = RespectfulWebdriver(webdriver=webdriver)
    assert driver.redis_prefix == "SeleniumRequester"
コード例 #23
0
def test_the_instance_should_have_a_property_that_holds_a_valid_webdriver():
    driver = RespectfulWebdriver(webdriver=webdriver)
    assert BaseWebDriver in driver.webdriver.__class__.__bases__
コード例 #24
0
def test_setup():
    driver = RespectfulWebdriver(webdriver=webdriver)
    driver.unregister_realm("TEST123")
コード例 #25
0
def test_the_instance_should_be_able_to_register_multiple_realms():
    driver = RespectfulWebdriver(webdriver=webdriver)

    driver.register_realm("TEST123", max_requests=100, timespan=300)

    realm_tuples = [
        ["TEST123", 100, 300],
        ["TEST234", 200, 600],
        ["TEST345", 300, 900],
    ]

    driver.register_realms(realm_tuples)

    assert driver.realm_max_requests("TEST123") == 100
    assert driver.realm_timespan("TEST123") == 300
    assert driver.redis.sismember("%s:REALMS" % driver.redis_prefix, "TEST123")

    assert driver.realm_max_requests("TEST234") == 200
    assert driver.realm_timespan("TEST234") == 600
    assert driver.redis.sismember("%s:REALMS" % driver.redis_prefix, "TEST234")

    assert driver.realm_max_requests("TEST345") == 300
    assert driver.realm_timespan("TEST345") == 900
    assert driver.redis.sismember("%s:REALMS" % driver.redis_prefix, "TEST345")

    driver.unregister_realm("TEST123")
    driver.unregister_realm("TEST234")
    driver.unregister_realm("TEST345")
コード例 #26
0
def test_the_instance_should_not_allow_a_request_to_be_made_on_an_unregistered_realm(
):
    driver = RespectfulWebdriver(webdriver=webdriver)

    with pytest.raises(SeleniumRespectfulError):
        driver.get("http://google.com", realms=["TEST123"])