Exemple #1
0
def test_removed():
    monitor = mpathhealth.Monitor()
    event = udev.MultipathEvent(udev.PATH_FAILED, "uuid-1", "sda", 1, 10)
    monitor.handle(event)
    event = udev.MultipathEvent(udev.MPATH_REMOVED, "uuid-1", None, None, None)
    monitor.handle(event)
    assert monitor.status() == {}
Exemple #2
0
def test_multiple_mpath_paths_unordered_with_initial_status(monkeypatch):
    def fake_status():
        return {
            'uuid-1': [
                PathStatus('sda', 'F'),
                PathStatus('sdb', 'A'),
                PathStatus('sdc', 'A'),
                PathStatus('sdd', 'A'),
            ]
        }

    monkeypatch.setattr(devicemapper, 'multipath_status', fake_status)

    monitor = mpathhealth.Monitor()
    monitor.start()

    events = [
        udev.MultipathEvent(udev.PATH_FAILED, "uuid-1", "sdb", 1, 13),
        udev.MultipathEvent(udev.PATH_FAILED, "uuid-1", "sdb", 2, 12),
    ]
    for e in events:
        monitor.handle(e)
    expected = {
        "uuid-1": {
            "valid_paths": 1,
            "failed_paths": [
                "sda",
                "sdb",
            ]
        }
    }
    assert monitor.status() == expected
Exemple #3
0
def test_reinstated_last_path():
    monitor = mpathhealth.Monitor()
    events = [
        udev.MultipathEvent(udev.PATH_FAILED, "uuid-1", "sdaa", 1, 10),
        udev.MultipathEvent(udev.PATH_REINSTATED, "uuid-1", "sdaa", 2, 11)
    ]
    for e in events:
        monitor.handle(e)
    assert monitor.status() == {}
Exemple #4
0
def test_reinstated__path():
    monitor = mpathhealth.Monitor()
    events = [
        udev.MultipathEvent(udev.PATH_FAILED, "uuid-1", "sdaa", 2, 10),
        udev.MultipathEvent(udev.PATH_FAILED, "uuid-1", "sdab", 1, 11),
        udev.MultipathEvent(udev.PATH_REINSTATED, "uuid-1", "sdaa", 2, 12)
    ]
    for e in events:
        monitor.handle(e)
    expected = {"uuid-1": {"valid_paths": 2, "failed_paths": ["sdab"]}}
    assert monitor.status() == expected
Exemple #5
0
def test_multiple_mpath_paths_unordered():
    monitor = mpathhealth.Monitor()
    events = [
        udev.MultipathEvent(udev.PATH_FAILED, "uuid-1", "sda", 2, 13),
        udev.MultipathEvent(udev.PATH_FAILED, "uuid-1", "sdb", 3, 12),
    ]
    for e in events:
        monitor.handle(e)
    expected = {
        "uuid-1": {
            "valid_paths": 2,
            "failed_paths": [
                "sda",
                "sdb",
            ]
        }
    }
    assert monitor.status() == expected
Exemple #6
0
def test_multiple_mpath():
    monitor = mpathhealth.Monitor()
    events = [
        udev.MultipathEvent(udev.PATH_FAILED, "uuid-1", "sdaa", 1, 10),
        udev.MultipathEvent(udev.PATH_FAILED, "uuid-2", "sdba", 2, 11)
    ]
    for e in events:
        monitor.handle(e)
    expected = {
        "uuid-2": {
            "valid_paths": 2,
            "failed_paths": ["sdba"]
        },
        "uuid-1": {
            "valid_paths": 1,
            "failed_paths": ["sdaa"]
        }
    }
    assert monitor.status() == expected
Exemple #7
0
def test_events_after_start(monkeypatch):
    def fake_status():
        return {
            'uuid-1': [
                PathStatus('sda', 'F'),
                PathStatus('sdb', 'A'),
                PathStatus('sdc', 'A')
            ]
        }

    monkeypatch.setattr(devicemapper, 'multipath_status', fake_status)

    monitor = mpathhealth.Monitor()
    monitor.start()

    events = [
        udev.MultipathEvent(udev.PATH_FAILED, "uuid-1", "sdb", 1, 10),
        udev.MultipathEvent(udev.PATH_FAILED, "uuid-1", "sdc", 0, 11),
        udev.MultipathEvent(udev.PATH_REINSTATED, "uuid-1", "sda", 1, 12)
    ]
    for e in events:
        monitor.handle(e)
    expected = {"uuid-1": {"valid_paths": 1, "failed_paths": ["sdb", "sdc"]}}
    assert monitor.status() == expected
Exemple #8
0
import os
import pprint
import threading

import pytest

from vdsm.storage import devicemapper
from vdsm.storage import udev
from vdsm.utils import running

from . import loopback

EVENT = udev.MultipathEvent(type=udev.MPATH_REMOVED,
                            mpath_uuid="fake-uuid-3",
                            path=None,
                            valid_paths=None,
                            dm_seqnum=None)


class FakeDevice(dict):
    @property
    def action(self):
        return self["ACTION"]


DEVICE = FakeDevice(DM_UUID="mpath-fake-uuid-3", ACTION="remove")


class Monitor(udev.MultipathMonitor):
    """
Exemple #9
0
def test_removed_not_existing():
    monitor = mpathhealth.Monitor()
    event = udev.MultipathEvent(udev.MPATH_REMOVED, "uuid-1", None, None, None)
    monitor.handle(event)
    assert monitor.status() == {}
Exemple #10
0
def test_failed_path():
    monitor = mpathhealth.Monitor()
    event = udev.MultipathEvent(udev.PATH_FAILED, "uuid-1", "sda", 1, 10)
    monitor.handle(event)
    expected = {"uuid-1": {"valid_paths": 1, "failed_paths": ["sda"]}}
    assert monitor.status() == expected
Exemple #11
0
def test_reinstated_path_no_mpath():
    monitor = mpathhealth.Monitor()
    event = udev.MultipathEvent(udev.PATH_REINSTATED, "uuid-1", "sdaa", 1, 10)
    monitor.handle(event)
    assert monitor.status() == {}