Skip to content

Simplify SignalClient #7091

@igor-sirotin

Description

@igor-sirotin

Description

Currently SignalClient has a complex system of caching received signals:

self.received_signals = {
# For each signal type, store:
# - list of received signals
# - expected received event delta count (resets to 1 after each wait_for_event call)
# - expected received event count
# - a function that takes the received signal as an argument and returns True if the signal is accepted (counted) or discarded
signal: {
"received": [],
"delta_count": 1,
"expected_count": 1,
"accept_fn": None,
}
for signal in SignalType
}

In most cases, we expect signals in response to some RPC. And sometimes the signal is received while we are still processing the blocking RPC.

Therefore we mix 2 approaches in tests:

  • waiting for a signal after making an action
  • prepare for signal before the action and check it after the action

And this makes the code very complicated (yet not super reliable).

Proposal

Refactor the thing. SImplify it.

Use with

I would love to see us using with here, smth like this:

def test_foo(backend_new_profile):
    sender = backend_new_profile()
    receiver = backend_new_profile()

    with receiver.expect_signal(SignalType.MESSAGES_NEW, timeout=30):
        message_text = "Hello, World!"
        sender.wakuext_service.send_one_to_one_message(receiver.public_key, message_text)

Though I'm not sure if it will be usable in all cases, we should analyze this carefully first.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions