def test_liveliness(manual_setup, hitpoint_factory):
    handler = hitpoint_factory()
    alive = hitpoint_factory()
    notalive = hitpoint_factory()

    class MyListenerWriter(Listener):
        def on_liveliness_lost(self, writer, status):
            handler.hit(data=timestamp.now())

    class MyListenerReader(Listener):
        def on_liveliness_changed(self, reader, status):
            if status.alive_count == 1:
                alive.hit(data=status.alive_count_change)
            else:
                notalive.hit(data=status.alive_count_change)

    qos = Qos(Policy.Liveliness.ManualByTopic(duration(seconds=0.2)),
              Policy.Ownership.Exclusive)

    manual_setup.tp(qos=qos)
    manual_setup.dr(listener=MyListenerReader())
    datawriter = manual_setup.dw(listener=MyListenerWriter())

    write_time = timestamp.now()
    datawriter.write(manual_setup.msg)

    assert handler.was_hit()
    assert handler.data - write_time >= duration(seconds=0.2)
    assert alive.was_hit() and alive.data == 1
    assert notalive.was_hit() and notalive.data == -1
def test_on_requested_deadline_missed(manual_setup, hitpoint):
    class MyListener(Listener):
        def on_requested_deadline_missed(self, reader, status):
            hitpoint.hit(data=timestamp.now())

    qos = Qos(Policy.Deadline(duration(seconds=0.2)))
    datawriter = manual_setup.dw(qos=qos)
    manual_setup.dr(qos=qos, listener=MyListener())

    write_time = timestamp.now()
    datawriter.write(manual_setup.msg)

    assert hitpoint.was_hit()
    assert hitpoint.data - write_time >= duration(seconds=0.2)
def test_on_sample_lost(manual_setup, hitpoint):
    class MyListener(Listener):
        def on_sample_lost(self, reader, status):
            hitpoint.hit()

    qos = Qos(Policy.DestinationOrder.BySourceTimestamp)

    datawriter = manual_setup.dw(qos=qos)
    datareader = manual_setup.dr(qos=qos, listener=MyListener())

    t1 = timestamp.now()
    t2 = t1 + duration(seconds=1)

    datawriter.write(manual_setup.msg, timestamp=t2)
    datareader.take()
    datawriter.write(manual_setup.msg, timestamp=t1)

    assert hitpoint.was_hit()
 def on_offered_deadline_missed(self, writer, status):
     hitpoint.hit(data=timestamp.now())
 def on_requested_deadline_missed(self, reader, status):
     hitpoint.hit(data=timestamp.now())
 def on_liveliness_lost(self, writer, status):
     handler.hit(data=timestamp.now())