Beispiel #1
0
    def test_method_race_with_failing_promises(self):
        class MyException(Exception):
            pass

        _reject_promise = []

        def _failing_async_promise(_ok, error):
            _reject_promise.append(error)

        promises = [Promise(_failing_async_promise) for _ in range(0, 15)]

        p = Promise.race(promises)

        with pytest.raises(TimeoutError):
            p.result(0)

        random.shuffle(_reject_promise)
        reject = _reject_promise.pop(0)
        reject(MyException())
        assert isinstance(p.exception(0.001), MyException)

        # subsequent rejection are ignored
        for reject in _reject_promise:
            reject(ValueError())

        assert isinstance(p.exception(0.001), MyException)
Beispiel #2
0
    def test_method_race_with_several_promises(self):
        _resolve_callback = []

        def _async_promise(ok, _error):
            _resolve_callback.append(ok)

        # Add non-resolving promises.
        promises = [Promise(lambda _ok, _err: None) for _ in range(0, 5)]

        promises.append(Promise(_async_promise))
        promises.append(Promise(_async_promise))

        # Add non-resolving promises.
        promises += [Promise(lambda _ok, _err: None) for _ in range(0, 5)]

        p = Promise.race(promises)

        with pytest.raises(TimeoutError):
            p.result(0)
        _resolve_callback[0]('RESULT')

        # p is resolved after the first Promise resolves.
        assert p.result(0.001) == 'RESULT'

        # subsequent Promises resolutions should have no effect.
        _resolve_callback[1]('RESULT2')
        assert p.result(0.001) == 'RESULT'
Beispiel #3
0
 def test_method_race_with_one_promise(self):
     p1 = Promise.resolve('RESULT')
     p = Promise.race([p1])
     assert p.result(0.001) == 'RESULT'
Beispiel #4
0
 def test_method_race_with_empty_set(self):
     with pytest.raises(ValueError):
         Promise.race([])