def test_expires_after_timeout(self):
     timeout = 1
     self.context.set_env(browserstack_tunnel_timeout=timeout)
     e = WebDriverException(ERROR_MESSAGE)
     self.fake_webdriver.init_exception = e
     clock = TimeController(target=Browser, parent_context=self.context)
     clock.start()
     sleep(0.05)  # Give the SUT a chance to start
     clock.advance(seconds=timeout + 0.01)
     clock.join()
     expect(clock.exception_caught).to(equal(e))
 def test_waits_up_to_configured_limit(self):
     self.webdriver.Remote = func_that_raises(AllBrowsersBusy())
     ctl = TimeController(target=Browser, parent_context=self.context)
     ctl.start()
     sleep(0.05)
     ctl.advance(seconds=self.timeout - 0.01)
     sleep(0.05)
     try:
         expect(ctl.exception_caught).to(equal(None))
     finally:
         ctl.advance(days=180)
         ctl.join()
 def test_re_raises_after_timeout(self):
     raised = AllBrowsersBusy()
     self.webdriver.Remote = func_that_raises(raised)
     ctl = TimeController(target=Browser, parent_context=self.context)
     ctl.start()
     sleep(0.05)
     ctl.advance(seconds=self.timeout + 0.01)
     sleep(0.05)
     try:
         expect(ctl.exception_caught).to(equal(raised))
     finally:
         ctl.advance(days=180)
         ctl.join()
Example #4
0
    def test_waits_up_to_timeout_for_element_to_appear(self):
        timeout = 42

        def find():
            return self.sut.find_unique_element(id="whatever", timeout=timeout)

        clock = TimeController(target=find)
        clock.start()
        clock.advance(seconds=timeout - 0.001)
        element = object()
        self.fake.elements = [element]
        clock.join()
        expect(clock.exception_caught).to(equal(None))
        expect(clock.value_returned).to(equal(element))
Example #5
0
    def test_advance_advances_time_by_specified_delta(self):
        reported_time = None

        def canary():
            nonlocal reported_time
            while True:
                reported_time = dependency(datetime).now()

        sut = TimeController(target=canary, daemon=True)
        sut.start()
        sleep(0.05)  # Give SUT a chance to get started
        start_time = sut.fake_datetime.now()
        advance_delta = 42
        sut.advance(seconds=advance_delta)
        sleep(0.05)  # Give SUT a chance to cycle
        expect(reported_time).to(
            equal(start_time + timedelta(seconds=advance_delta)))
Example #6
0
    def test_wait_for_raises_timeout_error_if_timeout_exceeded(self):
        calls = 0
        timeout = 5
        throttle = 0.1

        def func():
            nonlocal calls
            calls += 1
            return False

        def do_it():
            wait_for(func=func, timeout=timeout, throttle=throttle)

        tc = TimeController(target=do_it)
        tc.start()
        tc.advance(seconds=timeout + 0.1)
        sleep(0.15)  # Give the thread a chance to cycle
        expect(tc.exception_caught).to(be_a(TimeoutError))
Example #7
0
    def test_wait_for_retries(self):
        calls = 0
        timeout = 5
        throttle = 0.1

        def func():
            nonlocal calls
            calls += 1
            return False

        def do_it():
            wait_for(func=func, timeout=timeout, throttle=throttle)

        tc = TimeController(target=do_it)
        tc.start()
        tc.advance(seconds=timeout - 0.1)
        last_check = calls
        sleep(2 * throttle)
        expect(calls).to(be_above(last_check))
    def test_retries_up_to_specified_timeout(self):
        calls = 0
        timeout = 5
        throttle = 0.01

        def func():
            nonlocal calls
            calls += 1
            raise SpamException("intentional")

        def do_it():
            call_with_exception_tolerance(func=func,
                                          tolerate=SpamException,
                                          timeout=timeout,
                                          throttle=throttle)

        tc = TimeController(target=do_it)
        tc.start()
        tc.advance(seconds=timeout - 0.01)
        last_check = calls
        sleep(2 * throttle)
        expect(calls).to(be_above(last_check))