Skip to content

Accessing Database while testing Consumer with WebsocketCommunicator blocks running of test suite on Ubuntu (works on MacOS) #2007

Open
@Milutinke92

Description

@Milutinke92

Sorry, I know this is not a place for "debuging" and asking questions, but there isn't too big community on Stack Overflow for this.

  • Your OS and runtime environment, and browser if applicable:
    OS: MacOS and Linux

  • pip freeze:

Django==4.2
channels==4.0.0

Consumer connect

class EditResourceConsumer(JsonWebsocketConsumer):
    def connect(self):
        self.accept()

        draft_id = self.scope["url_route"]["kwargs"]["id"]

        draft.edited_by = self.scope["user"]
        draft.save()
        self.send_message("success")
  • What you expected to happen vs. what actually happened:
    I want to access object from the database after calling .connect() method on WebsocketCommunicator., but instead, running is blocked on the line mentioned bellow.
    Code example:
@freeze_time("2023-03-07 13:06:00")
class ResourceWSTestCase(TransactionTestCase):
    @aioresponses()
    async def test_connect_with_correct_token_edit_resource_draft(
        self, mocked_io_request
    ):
        communicator = WebsocketCommunicator(
            application, f"/ws/draft/1/?token={self.token_john}"
        )
        connected, subprotocol = await communicator.connect()
        self.assertTrue(connected)

        event = await communicator.receive_output()
        draft = (
            await ResourceDraft.objects.filter(pk=self.draft.pk)
            .select_related("edited_by")
            .afirst()
        )
        self.assertEqual(draft.edited_by, self.user_john)
        self.assertEqual(event["type"], "websocket.send")
        self.assertDictEqual(
            json.loads(event["text"]), {"code": "success", "message": "Success"}
        )

Code gets stuck on:

        draft = await ResourceDraft.objects.filter(pk=self.draft.pk).select_related("edited_by").afirst()

There is no logs.

This code and tests runs successfully on MacOS but it fails on Ubuntu. We are running our app using docker image python:3.11

Am I doing something wrong?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions