Skip to content
This repository has been archived by the owner on Jul 18, 2024. It is now read-only.

FAILED tests/integ/test_events.py::test_table_update - AssertionError #203

Open
fintechee opened this issue Apr 7, 2022 · 0 comments
Open

Comments

@fintechee
Copy link

fintechee commented Apr 7, 2022

Hi,

I met this error while running "make all".
"sless_ec" is the root folder.


[*] tests-integ orders
make[3]: Entering directory '/home/ubuntu/sless_ec/orders'
============================= test session starts ==============================
platform linux -- Python 3.9.7, pytest-5.4.3, py-1.11.0, pluggy-0.13.1
rootdir: /home/ubuntu/sless_ec/warehouse
plugins: requests-mock-1.9.3, cov-2.8.1
collected 2 items

tests/integ/test_events.py F [ 50%]
tests/integ/test_on_order_events.py . [100%]

=================================== FAILURES ===================================
______________________________ test_table_update _______________________________

table_name = 'ecommerce-dev-warehouse-Table-1NKQ7PBKTM1VH'
metadata = {'modifiedDate': '2022-04-07T03:24:49.534936', 'orderId': '372337dc-0acf-4aba-9882-e600ec498b7e', 'productId' : '__metadata', 'status': 'COMPLETED'}
products = [{'name': 'PRODUCT_NAME', 'orderId': '372337dc-0acf-4aba-9882-e600ec498b7e', 'package': {'height': 50, 'lengt h': 100, 'weight': 1000, 'width': 200}, 'price': 500, ...}]
listener = <function listener.._listener at 0x7f287b52e700>

def test_table_update(table_name, metadata, products, listener):
    """
    Test that the TableUpdate function reacts to changes to DynamoDB and sends
    events to EventBridge
    """

    metadata = copy.deepcopy(metadata)

    # Create packaging request in DynamoDB
    table = boto3.resource("dynamodb").Table(table_name) # pylint: disable=no-member

    with table.batch_writer() as batch:
        for product in products:
            batch.put_item(Item=product)
        batch.put_item(Item=metadata)

    # Mark the packaging as completed
    metadata["status"] = "COMPLETED"


    # Listen for messages on EventBridge
  listener(
        "ecommerce.warehouse",
        lambda: table.put_item(Item=metadata),
        lambda m: metadata["orderId"] in m["resources"] and m["detail-type"] == "PackageCreated"
    )

tests/integ/test_events.py:84:


../shared/tests/integ/fixtures.py:120: in _listener
return asyncio.run(_listen())
../../.pyenv/versions/3.9.7/lib/python3.9/asyncio/runners.py:44: in run
return loop.run_until_complete(main)
../../.pyenv/versions/3.9.7/lib/python3.9/asyncio/base_events.py:642: in run_until_complete
return future.result()


async def _listen() -> List[dict]:
    # Generate SigV4 headers
    headers = signed_url_headers(listener_api_url)
    # Connects to API
    async with websockets.connect(listener_api_url, extra_headers=headers) as websocket:
        # Send to which service we are subscribing
        await websocket.send(
            json.dumps({"action": "register", "serviceName": service_name})
        )

        # Run the function that will produce messages
        gen_function()

        # Listen to messages through the WebSockets API
        found = False
        messages = []
        # Since asyncio.wait_for timeout parameter takes an integer, we need to
        # calculate the value. For this, we calculate the datetime until we want to
        # wait in the worst case, then calculate the timeout integer value based on
        # that.
        timeout = datetime.datetime.utcnow() + datetime.timedelta(seconds=wait_time)
        while datetime.datetime.utcnow() < timeout:
            try:
                message = json.loads(await asyncio.wait_for(
                    websocket.recv(),
                    timeout=(timeout - datetime.datetime.utcnow()).total_seconds()
                ))
                print(message)
                messages.append(message)
                # Run the user-provided test
                if test_function is not None and test_function(message):
                    found = True
                    break
            except asyncio.exceptions.TimeoutError:
                # Timeout exceeded
                break

        if test_function is not None:
          assert found == True

E AssertionError

../shared/tests/integ/fixtures.py:116: AssertionError
---- generated xml file: /home/ubuntu/sless_ec/reports/warehouse-integ.xml -----
=========================== short test summary info ============================
FAILED tests/integ/test_events.py::test_table_update - AssertionError
========================= 1 failed, 1 passed in 37.07s =========================
make[3]: *** [Makefile:37: tests-integ] Error 1
make[3]: Leaving directory '/home/ubuntu/sless_ec/warehouse'
make[2]: *** [Makefile:103: tests-integ-warehouse] Error 2
make[2]: Leaving directory '/home/ubuntu/sless_ec'
make[1]: *** [Makefile:34: all-warehouse] Error 2
make[1]: *** Waiting for unfinished jobs....
make[3]: Leaving directory '/home/ubuntu/sless_ec/orders'
make[2]: Leaving directory '/home/ubuntu/sless_ec'
make[1]: Leaving directory '/home/ubuntu/sless_ec'
make: *** [Makefile:24: all] Error 1

I'm completely newbie to this repo.
I want to know what caused the failure, how to solve it.

Many thanks.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant