def test_auto_unsubscribe(subject, client): subscription = subject.subscribe(client) subject.publish( event=MessageEvent("disconnect", timestamp=0) ) # throws disconnected error, should unsubscribe subject.publish(event=MessageEvent("test", timestamp=0)) assert client.events == [] assert subscription.closed assert len(subject.subscriptions) == 0
def test_subscription_both(messaging_subject, client): assert not messaging_subject.publish(event=MessageEvent("test1", timestamp=0)) subscription = messaging_subject.subscribe(client) assert messaging_subject.publish(event=MessageEvent("test2", timestamp=0)) id = subscription.id missed_messages = messaging_subject.get_missed_messages() assert len(missed_messages) == 1 assert missed_messages[0].message == "test1" item = client.events[0] assert item.id == id assert item.event.message == "test2" assert not subscription.closed
def test_not_reading_client_does_not_mark_as_read(messaging_subject, client): # A silent client should not mark messages as read messaging_subject.subscribe(client, silent=True) assert messaging_subject.publish(event=MessageEvent("test2", timestamp=0)) == 0 missed_messages = messaging_subject.get_missed_messages() assert len(missed_messages) == 1 # A normal client should mark messages as read messaging_subject.subscribe(client, silent=False) assert messaging_subject.publish(event=MessageEvent("test2", timestamp=0)) == 1 missed_messages = messaging_subject.get_missed_messages() assert len(missed_messages) == 0
def test_unsubscription_race_condition(subject): """Tests for race condition when client can unschedule greenlet and thus delay unsubscription""" client1 = GeventClient() subject.subscribe(client1) # publish will unsubscribe because client is disconnected. Because it is delayed it will try to unsubscribe twice gevent.joinall( ( gevent.spawn(subject.publish, MessageEvent("test1", timestamp=0)), gevent.spawn(subject.publish, MessageEvent("test2", timestamp=0)), ), raise_error=True, ) assert subject.subscriptions == []
def test_cancel_subscription(subject, client): subscription = subject.subscribe(client) subscription.unsubscribe() subject.publish(event=MessageEvent("test", timestamp=0)) assert client.events == [] assert subscription.closed assert len(subject.subscriptions) == 0
def test_subscription_after_puplish(messaging_subject, client): assert not messaging_subject.publish(event=MessageEvent("test", timestamp=0)) subscription = messaging_subject.subscribe(client) missed_messages = messaging_subject.get_missed_messages() assert len(missed_messages) == 1 assert missed_messages[0].message == "test" assert not subscription.closed
def test_subscription(subject, client): subscription = subject.subscribe(client) subject.publish(event=MessageEvent("test", timestamp=0)) id = subscription.id item = client.events[0] assert item.id == id assert item.event.message == "test" assert not subscription.closed assert len(subject.subscriptions) == 1
def test_subscription_after_resubscribe(messaging_subject, client): messaging_subject.publish(event=MessageEvent("test", timestamp=0)) subscription = messaging_subject.subscribe(client) messaging_subject.get_missed_messages() subscription.unsubscribe() client.events.clear() messaging_subject.subscribe(client) assert messaging_subject.get_missed_messages() == [] assert client.events == []
def test_auto_unsubscribe_dont_skip(subject): """test that publishing also works when auto-unsubscribing see https://github.com/trustlines-protocol/relay/issues/85""" clients = [LogClient(), SafeLogClient()] for c in clients: subject.subscribe(c) subject.publish( event=MessageEvent("disconnect", timestamp=0) ) # the first one throws and get's auto-unsubscribed assert clients[1].events, "second client not notified"
def test_build_data_prop_payment_request(): payment_request_event = MessageEvent(message=requestMessagePayload, type="PaymentRequest", timestamp=int(time.time())) data = _build_data_prop(payment_request_event) assert data == { "message": requestMessagePayload, "eventType": "PaymentRequest" }
def post(self, args, user_address: str): self.trustlines.messaging[user_address].publish( MessageEvent(args["message"], type=args["type"], timestamp=int(time.time()))) return "Ok"
from .utils import MockAdapter, MockCredential requestMessagePayload = ( '{"type":"PaymentRequest","networkAddress":"0x12657128d7fa4291647eC3b0147E5fA6EebD388A",' '"from":"0xB6cD40e87d1ED3eCd455cDa0B6EA9FD56F83f0a7",' '"to":"0xE85bd548b2C961A2385628dcbBcc9A2E480dD925","amount":{"decimals":8,"raw":"1000000000",' '"value":"10"},"subject":"test subject","id":"0x5d57fabcc8b6055b",' '"counterParty":"0xB6cD40e87d1ED3eCd455cDa0B6EA9FD56F83f0a7","direction":"received",' '"user":"******"} ') requestDeclineMessagePayload = ( '{"type":"PaymentRequestDecline","id":"0x5d57fabcc8b6055b",' '"subject":"decline subject"} ') payment_request_message_event = MessageEvent(message=requestMessagePayload, type="PaymentRequest", timestamp=int(time.time())) payment_request_decline_message_event = MessageEvent( message=requestDeclineMessagePayload, type="PaymentRequestDecline", timestamp=int(time.time()), ) cred = MockCredential() all_options = {"projectId": "explicit-project-id"} admin_app = firebase_admin.initialize_app(cred, all_options) _DEFAULT_RESPONSE = json.dumps({"name": "message-id"})