Exemple #1
0
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
Exemple #2
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
Exemple #4
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 == []
Exemple #5
0
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
Exemple #6
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
Exemple #7
0
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
Exemple #8
0
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 == []
Exemple #9
0
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"
    }
Exemple #11
0
 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"})