コード例 #1
0
def test_filter_event(device):
    listener = udev.MultipathListener()
    mon = Monitor()
    listener.register(mon)
    listener._callback(device)

    assert mon.calls == []
コード例 #2
0
def test_loopback_event(tmpdir):
    listener = udev.MultipathListener()
    received = threading.Event()
    devices = []

    def callback(device):
        pprint.pprint({k: device[k] for k in device})
        devices.append(device)
        received.set()

    listener._callback = callback
    with running(listener):
        # Create a backing file
        filename = str(tmpdir.join("file"))
        with open(filename, "wb") as f:
            f.truncate(1024**2 * 10)

        # Create and remove a loop device
        with loopback.Device(filename) as loop:
            print("Created a loop device at %r" % loop.path)
            if not received.wait(1):
                raise RuntimeError("Timeout receiving event")

            # We expect an event about our loop device
            assert devices[0].get("DEVNAME") == loop.path
コード例 #3
0
def test_stop():
    listener = udev.MultipathListener()
    listener.start()
    try:
        listener.stop()
    except Exception as e:
        pytest.fail("Unexpected Exception: %s", e)
コード例 #4
0
def test_monitor_unregistered():
    listener = udev.MultipathListener()
    mon = Monitor()
    listener.register(mon)
    listener._callback(DEVICE)
    assert mon.calls == [EVENT]
    listener.unregister(mon)
    listener._callback(DEVICE)
    assert mon.calls == [EVENT]
コード例 #5
0
def test_hotunplug_monitor():
    # When unregistring a monitor while the listener is running, we should stop
    # it, since the listener started it.
    listener = udev.MultipathListener()
    with running(listener):
        mon = Monitor()
        listener.register(mon)
        listener.unregister(mon)
        assert mon.state == Monitor.STOPPED
コード例 #6
0
def test_report_events(monkeypatch, device, expected):
    # Avoid accessing non-existing devices
    monkeypatch.setattr(devicemapper, "device_name", lambda x: "sda")
    listener = udev.MultipathListener()
    mon = Monitor()
    listener.register(mon)
    listener._callback(device)

    assert mon.calls == [expected]
コード例 #7
0
def test_hotplug_monitor():
    # Registering a monitor after the listenr was started will start the
    # monitor after registering it. The monitor must be able to handle events
    # while the monitor is starting.
    listener = udev.MultipathListener()
    with running(listener):
        mon = Monitor()
        listener.register(mon)
        assert mon.state == Monitor.STARTED

        listener._callback(DEVICE)
        assert mon.calls == [EVENT]
コード例 #8
0
def test_failing_event():
    fd = FakeDevice(ACTION="change",
                    DM_ACTION="PATH_REINSTATED",
                    DM_UUID="mpath-fake-uuid-1",
                    DM_PATH="sda",
                    DM_NR_VALID_PATHS="sfsdfs")
    listener = udev.MultipathListener()
    mon = Monitor()
    listener.register(mon)
    listener._callback(fd)

    listener._callback(DEVICE)
    assert mon.calls == [EVENT]
コード例 #9
0
def test_register_from_callback():
    listener = udev.MultipathListener()
    mon2 = Monitor()

    class Adder(Monitor):
        def handle(self, event):
            listener.register(mon2)

    mon1 = Adder()
    listener.register(mon1)
    listener._callback(DEVICE)
    listener._callback(DEVICE)
    assert mon2.calls == [EVENT]
コード例 #10
0
def test_unregister_from_callback():
    listener = udev.MultipathListener()

    class Remover(Monitor):
        def handle(self, event):
            self.calls.append(event)
            listener.unregister(self)

    mon = Remover()
    listener.register(mon)
    listener._callback(DEVICE)
    listener._callback(DEVICE)

    assert mon.calls == [EVENT]
コード例 #11
0
def test_hotplug_monitor_error():

    listener = udev.MultipathListener()
    with running(listener):
        mon = UnstartableMonitor()
        # Monitor start() error should raised
        with pytest.raises(MonitorError):
            listener.register(mon)

        assert mon.state == Monitor.CREATED

        # Monitor should not be registered.
        listener._callback(DEVICE)
        assert mon.calls == []
コード例 #12
0
def test_monitor_lifecycle():
    listener = udev.MultipathListener()
    monitors = [Monitor(), Monitor()]
    for m in monitors:
        listener.register(m)

    # Starting the listener starts the monitors.
    with running(listener):
        for m in monitors:
            assert m.state == Monitor.STARTED

    # Stopping the listener stops the monitors.
    for m in monitors:
        assert m.state == Monitor.STOPPED
コード例 #13
0
def test_start_twice():
    listener = udev.MultipathListener()
    listener.start()
    with pytest.raises(AssertionError):
        listener.start()
    listener.stop()
コード例 #14
0
 def check(*monitors):
     listener = udev.MultipathListener()
     for m in monitors:
         listener.register(m)
     listener._callback(DEVICE)
コード例 #15
0
def test_monitor_already_registered():
    listener = udev.MultipathListener()
    listener.register(None)
    with pytest.raises(AssertionError):
        listener.register(None)
コード例 #16
0
def test_monitor_not_registered():
    listener = udev.MultipathListener()
    with pytest.raises(AssertionError):
        listener.unregister(None)
コード例 #17
0
 def check(*monitors):
     listener = udev.MultipathListener()
     for m in monitors:
         listener.register(m)
     with running(listener):
         pass
コード例 #18
0
 def check(*monitors):
     listener = udev.MultipathListener()
     for m in monitors:
         listener.register(m)
     with pytest.raises(MonitorError):
         listener.start()