django / django/channels

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

Open
#2,007 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
6.4k
Forks
826
PR merge metrics
No merged PRs in 30d

Description

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?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.