示例#1
0
def test_events_for_close_secret_unknown():
    """ Channel must not be closed when the unsafe region is reached and the
    secret is not known.
    """
    amount = 3
    expire = 10
    initiator = factories.HOP1
    our_address = factories.ADDR

    from_route, from_transfer = factories.make_from(
        amount,
        our_address,
        expire,
        initiator,
    )

    state = TargetState(
        our_address,
        from_route,
        from_transfer,
        block_number=expire,
    )

    events = target.events_for_close(state)
    assert not events

    events = target.events_for_close(state)
    assert not events
    assert from_transfer.secret is None
示例#2
0
def test_events_for_close():
    """ Channel must be closed when the unsafe region is reached and the secret is known. """
    amount = 3
    expire = 10
    initiator = factories.HOP1
    our_address = factories.ADDR
    secret = factories.UNIT_SECRET

    from_route, from_transfer = factories.make_from(
        amount,
        our_address,
        expire,
        initiator,
        secret=secret,
    )

    safe_to_wait = expire - from_route.reveal_timeout - 1
    unsafe_to_wait = expire - from_route.reveal_timeout

    state = TargetState(
        our_address,
        from_route,
        from_transfer,
        block_number=safe_to_wait,
    )
    events = target.events_for_close(state)
    assert not events

    state.block_number = unsafe_to_wait
    events = target.events_for_close(state)
    assert events
    assert isinstance(events[0], ContractSendChannelClose)
    assert from_transfer.secret is not None
    assert events[0].channel_address == from_route.channel_address
示例#3
0
def test_events_for_close_secret_unknown():
    """ Channel must not be closed when the unsafe region is reached and the
    secret is not known.
    """
    amount = 3
    expire = 10
    initiator = factories.HOP1

    transfer = factories.make_transfer(
        amount,
        initiator,
        factories.ADDR,
        expire,
    )
    route = factories.make_route(
        initiator,
        amount,
    )

    safe_block = expire - route.reveal_timeout - 1
    events = target.events_for_close(
        transfer,
        route,
        safe_block,
    )
    assert len(events) == 0

    unsafe_block = expire - route.reveal_timeout
    events = target.events_for_close(
        transfer,
        route,
        unsafe_block,
    )
    assert len(events) == 0
    assert transfer.secret is None
示例#4
0
def test_events_for_close():
    """ Channel must be closed when the unsafe region is reached. """
    amount = 3
    expire = 10

    transfer = factories.make_transfer(
        amount,
        factories.ADDR,
        expire,
    )
    route = factories.make_route(
        factories.HOP1,
        amount,
    )

    safe_block = expire - route.reveal_timeout - 1
    events = target.events_for_close(
        transfer,
        route,
        safe_block,
    )
    assert len(events) == 0

    unsafe_block = expire - route.reveal_timeout
    events = target.events_for_close(
        transfer,
        route,
        unsafe_block,
    )
    assert isinstance(events[0], ContractSendChannelClose)
    assert events[0].channel_address == route.channel_address
def test_events_for_close():
    """ Channel must be closed when the unsafe region is reached and the secret is known. """
    amount = 3
    expire = 10
    initiator = factories.HOP1
    our_address = factories.ADDR
    secret = factories.UNIT_SECRET

    from_route, from_transfer = factories.make_from(
        amount,
        our_address,
        expire,
        initiator,
        secret=secret,
    )

    safe_to_wait = expire - from_route.reveal_timeout - 1
    unsafe_to_wait = expire - from_route.reveal_timeout

    state = TargetState(
        our_address,
        from_route,
        from_transfer,
        block_number=safe_to_wait,
    )
    events = target.events_for_close(state)
    assert not events

    state.block_number = unsafe_to_wait
    events = target.events_for_close(state)
    assert events
    assert isinstance(events[0], ContractSendChannelClose)
    assert from_transfer.secret is not None
    assert events[0].channel_address == from_route.channel_address
def test_events_for_close_secret_unknown():
    """ Channel must not be closed when the unsafe region is reached and the
    secret is not known.
    """
    amount = 3
    expire = 10
    initiator = factories.HOP1
    our_address = factories.ADDR

    from_route, from_transfer = factories.make_from(
        amount,
        our_address,
        expire,
        initiator,
    )

    state = TargetState(
        our_address,
        from_route,
        from_transfer,
        block_number=expire,
    )

    events = target.events_for_close(state)
    assert not events

    events = target.events_for_close(state)
    assert not events
    assert from_transfer.secret is None
示例#7
0
def test_events_for_close_secret_unknown():
    """ Channel must not be closed when the unsafe region is reached and the
    secret is not known.
    """
    amount = 3
    block_number = 10
    expiration = block_number + 30
    initiator = factories.HOP1
    target_address = UNIT_TRANSFER_TARGET

    from_channel = factories.make_channel(
        our_address=target_address,
        partner_address=UNIT_TRANSFER_SENDER,
        partner_balance=amount,
    )
    from_route = factories.route_from_channel(from_channel)

    from_transfer = factories.make_signed_transfer_for(
        from_channel,
        amount,
        initiator,
        target_address,
        expiration,
        UNIT_SECRET,
    )

    channel.handle_receive_lockedtransfer(
        from_channel,
        from_transfer,
    )

    state = TargetTransferState(from_route, from_transfer)

    events = target.events_for_close(state, from_channel, expiration)
    assert not events
示例#8
0
def test_events_for_close_secret_unknown():
    """ Channel must not be closed when the unsafe region is reached and the
    secret is not known.
    """
    amount = 3
    block_number = 10
    expiration = block_number + 30
    initiator = factories.HOP1
    target_address = UNIT_TRANSFER_TARGET

    from_channel = factories.make_channel(
        our_address=target_address,
        partner_address=UNIT_TRANSFER_SENDER,
        partner_balance=amount,
    )
    from_route = factories.route_from_channel(from_channel)

    from_transfer = factories.make_signed_transfer_for(
        from_channel,
        amount,
        initiator,
        target_address,
        expiration,
        UNIT_SECRET,
    )

    channel.handle_receive_lockedtransfer(
        from_channel,
        from_transfer,
    )

    state = TargetTransferState(from_route, from_transfer)

    events = target.events_for_close(state, from_channel, expiration)
    assert not events
示例#9
0
def test_events_for_close():
    """ Channel must be closed when the unsafe region is reached and the secret is known. """
    amount = 3
    block_number = 10
    expiration = block_number + 30
    initiator = HOP1
    target_address = UNIT_TRANSFER_TARGET

    from_channel = factories.make_channel(
        our_address=target_address,
        partner_address=UNIT_TRANSFER_SENDER,
        partner_balance=amount,
    )
    from_route = factories.route_from_channel(from_channel)

    from_transfer = factories.make_signed_transfer_for(
        from_channel,
        amount,
        initiator,
        target_address,
        expiration,
        UNIT_SECRET,
    )

    channel.handle_receive_lockedtransfer(
        from_channel,
        from_transfer,
    )

    channel.register_secret(from_channel, UNIT_SECRET, UNIT_SECRETHASH)

    safe_to_wait = expiration - from_channel.reveal_timeout - 1
    unsafe_to_wait = expiration - from_channel.reveal_timeout

    state = TargetTransferState(from_route, from_transfer)
    events = target.events_for_close(state, from_channel, safe_to_wait)
    assert not events

    events = target.events_for_close(state, from_channel, unsafe_to_wait)
    assert events
    assert isinstance(events[0], ContractSendChannelClose)
    assert events[0].channel_identifier == from_route.channel_identifier
示例#10
0
def test_events_for_close():
    """ Channel must be closed when the unsafe region is reached and the secret is known. """
    amount = 3
    block_number = 10
    expiration = block_number + 30
    initiator = HOP1
    target_address = UNIT_TRANSFER_TARGET

    from_channel = factories.make_channel(
        our_address=target_address,
        partner_address=UNIT_TRANSFER_SENDER,
        partner_balance=amount,
    )
    from_route = factories.route_from_channel(from_channel)

    from_transfer = factories.make_signed_transfer_for(
        from_channel,
        amount,
        initiator,
        target_address,
        expiration,
        UNIT_SECRET,
    )

    channel.handle_receive_lockedtransfer(
        from_channel,
        from_transfer,
    )

    channel.register_secret(from_channel, UNIT_SECRET, UNIT_SECRETHASH)

    safe_to_wait = expiration - from_channel.reveal_timeout - 1
    unsafe_to_wait = expiration - from_channel.reveal_timeout

    state = TargetTransferState(from_route, from_transfer)
    events = target.events_for_close(state, from_channel, safe_to_wait)
    assert not events

    events = target.events_for_close(state, from_channel, unsafe_to_wait)
    assert events
    assert isinstance(events[0], ContractSendChannelClose)
    assert events[0].channel_identifier == from_route.channel_identifier
示例#11
0
def test_events_for_close():
    """ Channel must be closed when the unsafe region is reached and the secret is known. """
    amount = 3
    expire = 10
    initiator = factories.HOP1
    secret = factories.UNIT_SECRET

    transfer = factories.make_transfer(
        amount,
        initiator,
        factories.ADDR,
        expire,
        secret=secret,
    )
    route = factories.make_route(
        initiator,
        amount,
    )

    safe_block = expire - route.reveal_timeout - 1
    events = target.events_for_close(
        transfer,
        route,
        safe_block,
    )
    assert len(events) == 0

    unsafe_block = expire - route.reveal_timeout
    events = target.events_for_close(
        transfer,
        route,
        unsafe_block,
    )
    assert isinstance(events[0], ContractSendChannelClose)
    assert transfer.secret is not None
    assert events[0].channel_address == route.channel_address