def test_badly_decorated_pass():
    concurrency = 1
    results = call_concurrently(concurrency, 'tests.funcs_to_test:wallpaper', colour='orange')
    pprint([str(r) for r in results])

    for result in results:
        assert result == 'orange stripes'
def test_timeout():
    results = call_concurrently(1, timeout, sleep_for=SUBPROCESS_TIMEOUT + 5)
    pprint([str(r) for r in results])

    for result in results:
        assert isinstance(result, WrappedError)
        assert isinstance(result.error, TerminatedProcessError)
def test_badly_decorated_fail():
    concurrency = 1
    results = call_concurrently(concurrency, wallpaper, colour='orange')
    pprint([str(r) for r in results])

    for result in results:
        assert isinstance(result, AttributeError)
def test_badly_decorated_fail():
    concurrency = 1
    results = call_concurrently(concurrency, wallpaper, colour='orange')
    pprint([str(r) for r in results])

    for result in results:
        assert isinstance(result, WrappedError)
        assert isinstance(result.error, AttributeError)
def test_exception():
    concurrency = 5
    results = call_concurrently(concurrency, raise_exception)
    pprint([str(r) for r in results])

    for result in results:
        assert isinstance(result, CustomError)
        assert result.args == ('WTF',)
def test_badly_decorated_pass():
    concurrency = 1
    results = call_concurrently(concurrency,
                                'tests.funcs_to_test:wallpaper',
                                colour='orange')
    pprint([str(r) for r in results])

    for result in results:
        assert result == 'orange stripes'
def test_environment():
    assert os.getenv('WTF') is None

    with override_environment(WTF='dude'):
        results = call_concurrently(1, environment)

    pprint([str(r) for r in results])

    assert os.getenv('WTF') is None
    assert results[0] == 'dude'
Example #8
0
    def test_invoice_number_monthly_duplicity(self):
        """
        Test for problem where two simultaneously created invoices had duplicate number
        """
        call_concurrently(15, complete_order)
        invoices = Invoice.objects.filter(
            type=Invoice.INVOICE_TYPES.INVOICE).order_by("issued", "number")

        first_december_number = 0
        for i in range(1, 15):
            invoice = invoices[i - 1]
            if invoice.issued.month == 2 and first_december_number == 0:
                first_december_number = i - 1
            invoice_number = i - first_december_number
            self.assertEqual(invoice.number, invoice_number)
            self.assertEqual(
                invoice.full_number,
                f"{invoice_number}/FV/0{1 if first_december_number == 0 else 2}/2012"
            )
def test_exception():
    """
    Exceptions raised by the func being called concurrently are wrapped with
    WrappedError, providing access to the original error and traceback.
    """
    concurrency = 5
    results = call_concurrently(concurrency, raise_exception)
    pprint([str(r) for r in results])

    for result in results:
        assert isinstance(result, WrappedError)
        assert isinstance(result.traceback, types.TracebackType)
        assert isinstance(result.error, CustomError)
        assert result.error.args == ('WTF', )
def test_naive():
    # call_concurrently should reveal the race condition here
    obj = Semaphore.objects.create()

    concurrency = 5
    results = call_concurrently(concurrency, update_count_naive, id_=obj.pk)
    pprint([str(r) for r in results])
    successes = list(filter(is_success, results))

    obj = Semaphore.objects.get(pk=obj.pk)

    # at least one succeeded
    assert len(successes) > 0
    # later successes overwrote each other
    assert len(successes) > obj.count
def test_transactional():
    # there should be no race condition here
    obj = Semaphore.objects.create()

    concurrency = 5
    results = call_concurrently(concurrency, update_count_transactional, id_=obj.pk)
    pprint([str(r) for r in results])
    successes = list(filter(is_success, results))

    obj = Semaphore.objects.get(pk=obj.pk)

    # at least one succeeded
    assert len(successes) > 0
    # all successes correctly incremented
    assert len(successes) == obj.count
def test_naive():
    # call_concurrently should reveal the race condition here
    obj = Semaphore.objects.create()

    concurrency = 5
    results = call_concurrently(concurrency, update_count_naive, id_=obj.pk)
    pprint([str(r) for r in results])
    successes = list(filter(is_success, results))

    obj = Semaphore.objects.get(pk=obj.pk)

    # at least one succeeded
    assert len(successes) > 0
    # later successes overwrote each other
    assert len(successes) > obj.count
def test_transactional():
    # there should be no race condition here
    obj = Semaphore.objects.create()

    concurrency = 5
    results = call_concurrently(concurrency,
                                update_count_transactional,
                                id_=obj.pk)
    pprint([str(r) for r in results])
    successes = list(filter(is_success, results))

    obj = Semaphore.objects.get(pk=obj.pk)

    # at least one succeeded
    assert len(successes) > 0
    # all successes correctly incremented
    assert len(successes) == obj.count
def test_simple():
    concurrency = 2
    results = call_concurrently(concurrency, simple)
    assert results == [True, True]
def test_timeout():
    results = call_concurrently(1, timeout, sleep_for=SUBPROCESS_TIMEOUT + 5)
    pprint([str(r) for r in results])

    for result in results:
        assert isinstance(result, TerminatedProcessError)