def test_channel_closed_event_handler_closes_existing_channel(context: Context):
    context = setup_state_with_open_channel(context)
    current_block = get_posix_utc_time_now() // 15

    event = ReceiveChannelClosedEvent(
        token_network_address=DEFAULT_TOKEN_NETWORK_ADDRESS,
        channel_identifier=DEFAULT_CHANNEL_IDENTIFIER,
        closing_participant=DEFAULT_PARTICIPANT2,
        block_number=BlockNumber(current_block + 1),
    )

    channel_closed_event_handler(event, context)

    assert context.database.channel_count() == 1
    assert_channel_state(context, ChannelState.CLOSED)
    event = ReceiveChannelClosedEvent(
        token_network_address=DEFAULT_TOKEN_NETWORK_ADDRESS,
        channel_identifier=DEFAULT_CHANNEL_IDENTIFIER,
        closing_participant=DEFAULT_PARTICIPANT2,
        block_number=BlockNumber(current_block),
    )
    channel_closed_event_handler(event, context)

    # ActionMonitoringTriggeredEvent has been triggered
    assert context.database.scheduled_event_count() == 1

    assert context.database.channel_count() == 1
    assert_channel_state(context, ChannelState.CLOSED)
Exemplo n.º 2
0
def test_channel_closed_event_handler_trigger_action_monitor_event_without_monitor_request(
    context: Context, ):
    context = setup_state_with_open_channel(context)

    event = ReceiveChannelClosedEvent(
        token_network_address=DEFAULT_TOKEN_NETWORK_ADDRESS,
        channel_identifier=DEFAULT_CHANNEL_IDENTIFIER,
        closing_participant=DEFAULT_PARTICIPANT2,
        block_number=BlockNumber(52),
    )

    channel_closed_event_handler(event, context)
    assert context.db.scheduled_event_count() == 1
def test_channel_closed_event_handler_leaves_existing_channel(context: Context):
    context = setup_state_with_open_channel(context)

    event = ReceiveChannelClosedEvent(
        token_network_address=DEFAULT_TOKEN_NETWORK_ADDRESS,
        channel_identifier=ChannelID(4),
        closing_participant=DEFAULT_PARTICIPANT2,
        block_number=BlockNumber(52),
    )
    channel_closed_event_handler(event, context)

    assert context.database.channel_count() == 1
    assert_channel_state(context, ChannelState.OPENED)
Exemplo n.º 4
0
def setup_state_with_closed_channel(context: Context) -> Context:
    context = setup_state_with_open_channel(context)

    event2 = ReceiveChannelClosedEvent(
        token_network_address=DEFAULT_TOKEN_NETWORK_ADDRESS,
        channel_identifier=DEFAULT_CHANNEL_IDENTIFIER,
        closing_participant=DEFAULT_PARTICIPANT2,
        block_number=BlockNumber(52),
    )
    channel_closed_event_handler(event2, context)

    assert context.db.channel_count() == 1
    assert_channel_state(context, ChannelState.CLOSED)

    return context
Exemplo n.º 5
0
def test_channel_closed_event_handler_closes_existing_channel(context: Context):
    context = setup_state_with_open_channel(context)
    context.web3.eth.blockNumber = BlockNumber(60)
    event = ReceiveChannelClosedEvent(
        token_network_address=DEFAULT_TOKEN_NETWORK_ADDRESS,
        channel_identifier=DEFAULT_CHANNEL_IDENTIFIER,
        closing_participant=DEFAULT_PARTICIPANT2,
        block_number=BlockNumber(52),
    )
    channel_closed_event_handler(event, context)

    # ActionMonitoringTriggeredEvent has been triggered
    assert context.db.scheduled_event_count() == 1

    assert context.db.channel_count() == 1
    assert_channel_state(context, ChannelState.CLOSED)
def test_channel_closed_event_handler_trigger_action_monitor_event_with_monitor_request(
    context: Context,
):
    context = setup_state_with_open_channel(context)
    # add MR to DB
    context.database.upsert_monitor_request(create_signed_monitor_request())
    current_block_number = get_posix_utc_time_now() // 15

    event = ReceiveChannelClosedEvent(
        token_network_address=DEFAULT_TOKEN_NETWORK_ADDRESS,
        channel_identifier=DEFAULT_CHANNEL_IDENTIFIER,
        closing_participant=DEFAULT_PARTICIPANT2,
        block_number=BlockNumber(current_block_number + 1),
    )

    channel_closed_event_handler(event, context)
    assert context.database.scheduled_event_count() == 1
def setup_state_with_closed_channel(context: Context) -> Context:
    context = setup_state_with_open_channel(context)

    event = ReceiveChannelClosedEvent(
        token_network_address=DEFAULT_TOKEN_NETWORK_ADDRESS,
        channel_identifier=DEFAULT_CHANNEL_IDENTIFIER,
        closing_participant=DEFAULT_PARTICIPANT2,
        block_number=BlockNumber(52),
    )
    channel_closed_event_handler(event, context)

    assert context.database.channel_count() == 1
    assert_channel_state(context, ChannelState.CLOSED)
    context.web3.eth.get_block = lambda x: Mock(
        timestamp=context.web3.eth.block_number * 15 if x == "latest" else x * 15
    )

    return context
Exemplo n.º 8
0
def test_channel_closed_event_handler_ignores_existing_channel_after_timeout(
    context: Context, ):
    context = setup_state_with_open_channel(context)
    context.last_known_block = 200

    event = ReceiveChannelClosedEvent(
        token_network_address=DEFAULT_TOKEN_NETWORK_ADDRESS,
        channel_identifier=DEFAULT_CHANNEL_IDENTIFIER,
        closing_participant=DEFAULT_PARTICIPANT2,
        block_number=52,
    )
    channel_closed_event_handler(event, context)

    # no ActionMonitoringTriggeredEvent has been triggered
    assert context.db.scheduled_event_count() == 0

    assert context.db.channel_count() == 1
    assert_channel_state(context, ChannelState.CLOSED)
Exemplo n.º 9
0
def test_channel_closed_event_handler_channel_not_in_database(
        context: Context):
    metrics_state = save_metrics_state(metrics.REGISTRY)
    # only setup the token network without channels
    create_default_token_network(context)

    event = ReceiveChannelClosedEvent(
        token_network_address=DEFAULT_TOKEN_NETWORK_ADDRESS,
        channel_identifier=ChannelID(4),
        closing_participant=DEFAULT_PARTICIPANT2,
        block_number=BlockNumber(52),
    )
    assert context.database.channel_count() == 0
    channel_closed_event_handler(event, context)
    assert context.database.channel_count() == 0

    assert (metrics_state.get_delta(
        "events_log_errors_total",
        labels=metrics.ErrorCategory.STATE.to_label_dict()) == 1.0)