示例#1
0
def test_georep_checkpoint_completed(strftime, load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    strftime.return_value = "01 Jan 1970 05:50:34"
    event = {"message": {"master_node": "node1",
                         "master_volume": "v1",
                         "brick_path": "/gluster/b1",
                         "slave_host": "node2",
                         "slave_volume": "volume1",
                         "checkpoint_time": "1234",
                         "checkpoint_completion_time": "2345"
                         },
             "event": "GEOREP",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().georep_checkpoint_completed(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'georep_checkpoint_completed|node1:v1:/gluster'
        '/b1--->node2:volume1',
        alert_notify=True,
        current_value='georep_checkpoint_completed',
        message='Georeplication checkpoint completed for pair '
                'node1:v1:/gluster/b1--->node2:volume1. '
                'Check point creation time 01 Jan 1970 05:50:34. '
                'Check point completion time 01 Jan 1970 05:50:34.'
                ' in cluster 77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='info'
    )
示例#2
0
def test_posix_health_check_failed(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"brick": "b1",
                         "path": "/gluster",
                         "error": "test_error",
                         "op": "testing"
                         },
             "event": "POSIX_HEALTH_CHECK_FAILED",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().posix_health_check_failed(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'posix_health_check_failed|b1/gluster',
        alert_notify=True,
        current_value='posix_health_check_failed',
        message='Posix health check failed for brick: b1. Path: '
                '/gluster in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a. Error: '
                'test_error. op: testing',
        severity='warning'
    )
示例#3
0
def test_georep_checkpoint_completed(strftime, load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a")
    strftime.return_value = "01 Jan 1970 05:50:34"
    event = {
        "message": {
            "master_node": "node1",
            "master_volume": "v1",
            "brick_path": "/gluster/b1",
            "slave_host": "node2",
            "slave_volume": "volume1",
            "checkpoint_time": "1234",
            "checkpoint_completion_time": "2345"
        },
        "event": "GEOREP",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().georep_checkpoint_completed(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'georep_checkpoint_completed|node1:v1:/gluster'
        '/b1--->node2:volume1',
        alert_notify=True,
        current_value='georep_checkpoint_completed',
        message='Georeplication checkpoint completed for pair '
        'node1:v1:/gluster/b1--->node2:volume1. '
        'Check point creation time 01 Jan 1970 05:50:34. '
        'Check point completion time 01 Jan 1970 05:50:34.'
        ' in cluster 77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='info')
示例#4
0
def test_posix_health_check_failed(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a")
    event = {
        "message": {
            "brick": "b1",
            "path": "/gluster",
            "error": "test_error",
            "op": "testing"
        },
        "event": "POSIX_HEALTH_CHECK_FAILED",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().posix_health_check_failed(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'posix_health_check_failed|b1/gluster',
        alert_notify=True,
        current_value='posix_health_check_failed',
        message='Posix health check failed for brick: b1. Path: '
        '/gluster in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a. Error: '
        'test_error. op: testing',
        severity='warning')
示例#5
0
def test_volume_delete(load, save, load_all, sleep):
    init()
    keys = maps.NamedDict(key="sub_vol1/dhcp123-12.lab.abc.com:|gluster|b1")
    load.return_value = maps.NamedDict(
        brick_path="/gluster/b1",
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a")
    save.return_value = True
    obj = NS.gluster.objects.Volume()
    obj.name = "v1"
    obj.vol_id = "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    load_all.return_value = [obj]
    sleep.return_value = True
    monitoring_utils.update_dashboard = MagicMock()
    monitoring_utils.delete_resource_from_graphite = MagicMock()
    event = {
        "message": {
            "name": "v1"
        },
        "event": "VOLUME_DELETE",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    with patch.object(etcd_utils, "read") as read:
        read.return_value = maps.NamedDict(leaves=[keys], value="/gluster/b1")
        with patch.object(etcd_utils, "delete") as delete:
            delete.return_value = True
            Callback().volume_delete(event)
            monitoring_utils.delete_resource_from_graphite.assert_called_with(
                'v1', 'volume', '77deef29-b8e5-4dc5-8247-21e2a409a66a',
                'delete')
            monitoring_utils.update_dashboard.assert_called_with(
                'v1', 'volume', '77deef29-b8e5-4dc5-8247-21e2a409a66a',
                'delete')
def test_emit_event_with_brick_resource():
    init()
    setattr(NS, "tendrl_context", maps.NamedDict())
    NS.tendrl_context["integration_id"] = "int-id"
    NS.tendrl_context["cluster_name"] = "cluster1"
    NS.tendrl_context["sds_name"] = "gluster"
    NS.publisher_id = "gluster-integration"
    setattr(NS, "node_context", maps.NamedDict())
    NS.node_context["node_id"] = "node-id"
    NS.node_context["fqdn"] = "fqdn"

    from tendrl.gluster_integration.sds_sync import event_utils
    event_utils.emit_event(
        "brick_status",
        "stopped",
        "Status of brick1 of vol1 changed to stopped from started",
        "volume_vol1|brick_path1",
        "WARNING",
        tags={
            "entity_type": "brick",
            "volume_name": "vol1"
        })

    with mock.patch.object(log_utils, 'log') as logger:
        logger.assert_called
def test_sync_volumes(refresh, emit_event, compare, save, load, blivet):
    init()
    refresh.return_value = True
    compare.return_value = True
    save.return_value = True
    emit_event.return_value = True
    NS.node_context = node_context.NodeContext
    obj = node_context.NodeContext(
        node_id="eeebe9f5-6e43-4cf8-b321-37d648eb0510",
        fqdn="dhcp12-12.lab.abc.com",
        tags=["provisioner/%s" % NS.tendrl_context.integration_id],
        ipv4_addr="127.0.0.1")
    NS.node_context = obj
    load.return_value = obj
    sds_sync = importlib.import_module('tendrl.gluster_integration.sds_sync')
    raw_data = ini2json.ini_to_dict(
        os.path.join(os.path.dirname(__file__), "gluster-state.yaml"))
    raw_data_options = ini2json.ini_to_dict(
        os.path.join(os.path.dirname(__file__), "gluster-volume-option.yaml"))
    sds_sync.Event = MagicMock()
    sds_sync.Message = MagicMock()
    with patch.object(NS._int.client, "read", read):
        with patch.object(brick_device_details,
                          "update_brick_device_details") as update:
            update.return_value = True
            with patch.object(brick_utilization,
                              "brick_utilization") as utilization:
                utilization.return_value = 10
                sds_sync.sync_volumes(raw_data['Volumes'], 1,
                                      raw_data_options.get('Volume Options'),
                                      10)
示例#8
0
def test_geo_replication_pair():
    init()
    obj = GeoReplicationPair(vol_id="58b1283f-fde6-4abf-8d57-b17bb22f0922",
                             session_id="123",
                             pair="testing")
    obj.render()
    result = 'clusters/77deef29-b8e5-4dc5-8247-21e2a409a66a' + \
        '/Volumes/58b1283f-fde6-4abf-8d57-b17bb22f0922/' + \
        'GeoRepSessions/123/pairs/testing'
    if obj.value != result:
        raise AssertionError(obj.value)
示例#9
0
def test_sync_volume_connections(blivet, save, load):
    init()
    client_connections = importlib.import_module(
        'tendrl.gluster_integration.sds_sync.client_connections')
    init()
    obj = NS.gluster.objects.Brick("dhcp123-12.lab.abc.com", "_gluster_b1")
    obj.client_count = 1
    load.return_value = obj
    with patch.object(NS._int.client, "read", read):
        client_connections.sync_volume_connections(
            [NS.gluster.objects.Volume()])
        save.assert_called()
def test_geo_replication_session():
    init()
    obj = geo_replication_session.GeoReplicationSession(
        vol_id="58b1283f-fde6-4abf-8d57-b17bb22f0922",
        session_id="123",
        session_status="up",
        pair="testing"
    )
    obj.render()
    result = 'clusters/77deef29-b8e5-4dc5-8247-21e2a409a66a' + \
        '/Volumes/58b1283f-fde6-4abf-8d57-b17bb22f0922/' + \
        'GeoRepSessions/123'
    if obj.value != result:
        raise AssertionError(obj.value)
def test_peer_detach(sleep):
    init()
    sleep.return_value = True
    event = {
        "message": {
            "host": "dhcp123-12.lab.abc.com"
        },
        "event": "PEER_DISCONNECT",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    monitoring_utils.update_dashboard = MagicMock()
    Callback().peer_detach(event)
    monitoring_utils.update_dashboard.assert_called_with(
        'dhcp123-12.lab.abc.com', 'host',
        '77deef29-b8e5-4dc5-8247-21e2a409a66a', 'delete')
def test_sync_volume_connections(save, load):
    init()
    client_connections = importlib.import_module(
        'tendrl.gluster_integration.sds_sync.client_connections'
    )
    init()
    obj = NS.tendrl.objects.GlusterBrick(
        "dhcp123-12.lab.abc.com",
        "_gluster_b1"
    )
    obj.client_count = 1
    load.return_value = obj
    with patch.object(etcd_utils, "read", read):
        client_connections.sync_volume_connections(
            [NS.gluster.objects.Volume()]
        )
        save.assert_called()
示例#13
0
def test_peer_detach(sleep, load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    sleep.return_value = True
    event = {"message": {"host": "dhcp123-12.lab.abc.com"},
             "event": "PEER_DISCONNECT",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    monitoring_utils.update_dashboard = MagicMock()
    Callback().peer_detach(event)
    monitoring_utils.update_dashboard.assert_called_with(
        'dhcp123-12.lab.abc.com',
        'host', '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        'delete'
    )
示例#14
0
def test_process_events(save, load_all):
    init()
    save.return_value = True
    obj = NS.gluster.objects.NativeEvents(
        'svc_reconfigure_failed|testingv1',
        alert_notify=True,
        current_value='svc_reconfigure_failed',
        message='Service reconfigure failed for service: test',
        severity='warning',
    )
    load_all.return_value = [obj]
    with patch.object(event_utils, "emit_event") as emit_event:
        process_events.process_events()
        emit_event.assert_called_with(
            'svc_reconfigure_failed',
            'svc_reconfigure_failed',
            'Service reconfigure failed for service: test',
            'svc_reconfigure_failed|testingv1',
            'WARNING',
            alert_notify=True,
            tags={})
    obj = NS.gluster.objects.NativeEvents(
        'quorum|v1',
        current_value='quorum_gained',
        message='Quorum of volume: v1 is regained in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='recovery',
        tags={
            'volume_name': 'v1',
            'entity_type': 'volume'
        })
    load_all.return_value = [obj]
    with patch.object(event_utils, "emit_event") as emit_event:
        process_events.process_events()
        emit_event.assert_called_with(
            'quorum',
            'quorum_gained', 'Quorum of volume: v1 is regained in cluster '
            '77deef29-b8e5-4dc5-8247-21e2a409a66a',
            'quorum|v1',
            'INFO',
            tags={
                'entity_type': 'volume',
                'volume_name': 'v1'
            })
def test_process_events(save, load_all):
    init()
    save.return_value = True
    obj = NS.gluster.objects.NativeEvents(
        'svc_reconfigure_failed|testingv1',
        alert_notify=True,
        current_value='svc_reconfigure_failed',
        message='Service reconfigure failed for service: test',
        severity='warning',
    )
    load_all.return_value = [obj]
    with patch.object(event_utils, "emit_event") as emit_event:
        process_events.process_events()
        emit_event.assert_called_with(
            'svc_reconfigure_failed',
            'svc_reconfigure_failed',
            'Service reconfigure failed for service: test',
            'svc_reconfigure_failed|testingv1',
            'WARNING',
            alert_notify=True,
            tags={}
        )
    obj = NS.gluster.objects.NativeEvents(
        'quorum|v1',
        current_value='quorum_gained',
        message='Quorum of volume: v1 is regained in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='recovery',
        tags={'volume_name': 'v1',
              'entity_type': 'volume'
              }
    )
    load_all.return_value = [obj]
    with patch.object(event_utils, "emit_event") as emit_event:
        process_events.process_events()
        emit_event.assert_called_with(
            'quorum',
            'quorum_gained',
            'Quorum of volume: v1 is regained in cluster '
            '77deef29-b8e5-4dc5-8247-21e2a409a66a',
            'quorum|v1',
            'INFO',
            tags={'entity_type': 'volume', 'volume_name': 'v1'}
        )
def test_svc_disconnected():
    init()
    event = {
        "message": {
            "volume": "v1",
            "svc_name": "test"
        },
        "event": "SVC_DISCONNECTED",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().svc_disconnected(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'svc_connection|testv1',
        current_value='service_disconnected',
        message='Service: test is disconnected in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning')
def test_peer_reject():
    init()
    event = {
        "message": {
            "peer": "dhcp123-12.lab.abc.com"
        },
        "event": "PEER_REJECT",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().peer_reject(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'peer_reject|dhcp123-12.lab.abc.com',
        alert_notify=True,
        current_value='peer_reject',
        message='Peer: dhcp123-12.lab.abc.com is rejected in '
        'cluster 77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning')
示例#18
0
def test_svc_disconnected(load):
    init()
    NS.node_context.fqdn = "node-test"
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"volume": "v1", "svc_name": "test"},
             "event": "SVC_DISCONNECTED",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().svc_disconnected(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'svc_connection|test_node-testv1',
        current_value='service_disconnected',
        message='Service: test is disconnected on node node-test '
                'of cluster 77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning'
    )
示例#19
0
def test_afr_subvols_down(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"subvol": "volume1-replica-2"},
             "event": "AFR_SUBVOLS_DOWN",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().afr_subvols_down(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'afr_subvol_state|volume1-replica-2',
        current_value='afr_subvol_down',
        message='Afr subvolume: volume1-replica-2 is down in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning',
        tags={'volume_name': 'volume1', 'entity_type': 'volume'}
    )
示例#20
0
def test_afr_subvol_up(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"subvol": "sub_vol"},
             "event": "AFR_SUBVOL_UP",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().afr_subvol_up(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'afr_subvol_state|sub_vol',
        current_value='afr_subvol_up',
        message='Afr subvolume: sub_vol is back up in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='recovery',
        tags={'entity_type': 'volume', 'volume_name': 'sub_vol'}
    )
示例#21
0
def test_afr_quorum_fail(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"subvol": "sub_vol"},
             "event": "AFR_QUORUM_FAIL",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().afr_quorum_fail(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'afr_quorum_state|sub_vol',
        current_value='afr_quorum_failed',
        message='Afr quorum has failed for subvolume: sub_vol in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning',
        tags={'entity_type': 'volume', 'volume_name': 'sub_vol'}
    )
示例#22
0
def test_ec_min_bricks_up(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"subvol": "sub_vol"},
             "event": "EC_MIN_BRICKS_UP",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().ec_min_bricks_up(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'ec_min_bricks_up|sub_vol',
        current_value='ec_min_bricks_up',
        message='Minimum number of bricks back online in EC subvolume: '
                'sub_vol in cluster 77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='recovery',
        tags={'entity_type': 'volume', 'volume_name': 'sub_vol'}
    )
def test_unknown_peer():
    init()
    event = {
        "message": {
            "peer": "dhcp123-12.lab.abc.com"
        },
        "event": "UNKNOWN_PEER",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().unknown_peer(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'unknown_peer|dhcp123-12.lab.abc.com',
        alert_notify=True,
        current_value='unknown_peer',
        message='Peer dhcp123-12.lab.abc.com has moved to '
        'unknown state in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning')
def test_svc_reconfigure_failed():
    init()
    event = {
        "message": {
            "service": "testing",
            "volume": "v1",
            "svc_name": "test"
        },
        "event": "SVC_MANAGER_FAILED",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().svc_reconfigure_failed(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'svc_reconfigure_failed|testingv1',
        alert_notify=True,
        current_value='svc_reconfigure_failed',
        message='Service reconfigure failed for service: test',
        severity='warning')
def test_rebalance_status_update_failed():
    init()
    event = {
        "message": {
            "volume": "v1"
        },
        "event": "REBALANCE_STATUS_UPDATE_FAILED",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().rebalance_status_update_failed(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'rebalance_status_update_failed|v1',
        alert_notify=True,
        current_value='rebalance_status_update_failed',
        message='Rebalance status update failed for volume: '
        'v1 in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning')
def test_compare_friend_volume_failed():
    init()
    event = {
        "message": {
            "volume": "volume1"
        },
        "event": "COMPARE_FRIEND_VOLUME_FAILED",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().compare_friend_volume_failed(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'compare_friend_volume_failed|volume1',
        alert_notify=True,
        current_value='compare_friend_volume_failed',
        message='Compare friend volume failed for volume: '
        'volume1 in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning')
def test_snapshot_hard_limit_reached():
    init()
    event = {
        "message": {
            "volume_name": "volume1"
        },
        "event": "SNAPSHOT_HARD_LIMIT_REACHED",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().snapshot_hard_limit_reached(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'snapshot_hard_limit_reached|volume1',
        alert_notify=True,
        current_value='snapshot_hard_limit_reached',
        message='Snapshot hard limit reached for volume: '
        'volume1 in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning')
示例#28
0
def test_peer_reject(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"peer": "dhcp123-12.lab.abc.com"},
             "event": "PEER_REJECT",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().peer_reject(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'peer_reject|dhcp123-12.lab.abc.com',
        alert_notify=True,
        current_value='peer_reject',
        message='Peer: dhcp123-12.lab.abc.com is rejected in '
                'cluster 77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning'
    )
示例#29
0
def test_unknown_peer(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"peer": "dhcp123-12.lab.abc.com"},
             "event": "UNKNOWN_PEER",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().unknown_peer(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'unknown_peer|dhcp123-12.lab.abc.com',
        alert_notify=True,
        current_value='unknown_peer',
        message='Peer dhcp123-12.lab.abc.com has moved to '
                'unknown state in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning'
    )
示例#30
0
def test_snapshot_hard_limit_reached(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"volume_name": "volume1"},
             "event": "SNAPSHOT_HARD_LIMIT_REACHED",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().snapshot_hard_limit_reached(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'snapshot_hard_limit_reached|volume1',
        alert_notify=True,
        current_value='snapshot_hard_limit_reached',
        message='Snapshot hard limit reached for volume: '
                'volume1 in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning'
    )
示例#31
0
def test_compare_friend_volume_failed(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"volume": "volume1"},
             "event": "COMPARE_FRIEND_VOLUME_FAILED",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().compare_friend_volume_failed(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'compare_friend_volume_failed|volume1',
        alert_notify=True,
        current_value='compare_friend_volume_failed',
        message='Compare friend volume failed for volume: '
                'volume1 in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning'
    )
示例#32
0
def test_svc_reconfigure_failed(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"service": "testing",
                         "volume": "v1",
                         "svc_name": "test"},
             "event": "SVC_MANAGER_FAILED",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().svc_reconfigure_failed(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'svc_reconfigure_failed|testingv1',
        alert_notify=True,
        current_value='svc_reconfigure_failed',
        message='Service reconfigure failed for service: test',
        severity='warning'
    )
示例#33
0
def test_rebalance_status_update_failed(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"volume": "v1"},
             "event": "REBALANCE_STATUS_UPDATE_FAILED",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().rebalance_status_update_failed(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'rebalance_status_update_failed|v1',
        alert_notify=True,
        current_value='rebalance_status_update_failed',
        message='Rebalance status update failed for volume: '
                'v1 in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning'
    )
def test_afr_split_brain():
    init()
    event = {
        "message": {
            "subvol": "volume1-replica-2"
        },
        "event": "AFR_SPLIT_BRAIN",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().afr_split_brain(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'afr_split_brain|volume1-replica-2',
        alert_notify=True,
        current_value='afr_split_brain',
        message='Subvolume: volume1-replica-2 is affected by split-brain.'
        ' Some of thereplicated files in the volume might '
        'be divergent in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning')
示例#35
0
def test_volume_delete(load, save, load_all, sleep):
    init()
    keys = maps.NamedDict(
        key="sub_vol1/dhcp123-12.lab.abc.com:|gluster|b1"
    )
    load.return_value = maps.NamedDict(
        brick_path="/gluster/b1",
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    save.return_value = True
    obj = NS.gluster.objects.Volume()
    obj.name = "v1"
    obj.vol_id = "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    load_all.return_value = [obj]
    sleep.return_value = True
    monitoring_utils.update_dashboard = MagicMock()
    monitoring_utils.delete_resource_from_graphite = MagicMock()
    event = {"message": {"name": "v1"},
             "event": "VOLUME_DELETE",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    with patch.object(etcd_utils, "read") as read:
        read.return_value = maps.NamedDict(leaves=[keys], value="/gluster/b1")
        with patch.object(etcd_utils, "delete") as delete:
            delete.return_value = True
            Callback().volume_delete(event)
            monitoring_utils.delete_resource_from_graphite.assert_called_with(
                'v1',
                'volume',
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
                'delete'
            )
            monitoring_utils.update_dashboard.assert_called_with(
                'v1',
                'volume',
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
                'delete'
            )
def test_quorum_regained():
    init()
    event = {
        "message": {
            "volume": "v1"
        },
        "event": "QUORUM_REGAINED",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().quorum_regained(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'quorum|v1',
        current_value='quorum_gained',
        message='Quorum of volume: v1 is regained in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='recovery',
        tags={
            'volume_name': 'v1',
            'entity_type': 'volume'
        })
def test_quota_crossed_soft_limit():
    init()
    event = {
        "message": {
            "path": "/gluster/b1",
            "volume": "v1",
            "usage": "70%"
        },
        "event": "QUOTA_CROSSED_SOFT_LIMIT",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().quota_crossed_soft_limit(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'quota_crossed_soft_limit|v1/gluster/b1',
        alert_notify=True,
        current_value='quota_crossed_soft_limit',
        message='Quota soft limit crossed in volume: v1 for path: '
        '/gluster/b1. Current usage: 70% in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning')
示例#38
0
def test_afr_split_brain(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"subvol": "volume1-replica-2"},
             "event": "AFR_SPLIT_BRAIN",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().afr_split_brain(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'afr_split_brain|volume1-replica-2',
        alert_notify=True,
        current_value='afr_split_brain',
        message='Subvolume: volume1-replica-2 is affected by split-brain.'
                ' Some of thereplicated files in the volume might '
                'be divergent in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning'
    )
def test_brickpath_resolve_failed():
    init()
    event = {
        "message": {
            "peer": "dhcp123-12.lab.abc.com",
            "volume": "v1",
            "brick": "b1"
        },
        "event": "BRICKPATH_RESOLVE_FAILED",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().brickpath_resolve_failed(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'brickpath_resolve_failed|dhcp123-12.lab.abc.comv1b1',
        alert_notify=True,
        current_value='brick_path_resolve_failed',
        message='Brick path resolution failed for brick: b1 . '
        'Volume: v1.Peer: dhcp123-12.lab.abc.com in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning')
示例#40
0
def test_quorum_regained(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"volume": "v1"},
             "event": "QUORUM_REGAINED",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().quorum_regained(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'quorum|v1',
        current_value='quorum_gained',
        message='Quorum of volume: v1 is regained in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='recovery',
        tags={'volume_name': 'v1',
              'entity_type': 'volume'
              }
    )
def test_bitrot_bad_file():
    init()
    event = {
        "message": {
            "path": "/gluster/b1",
            "brick": "b1",
            "gfid": "1"
        },
        "event": "BITROT_BAD_FILE",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().bitrot_bad_file(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'bitrot_bad_file|b1/gluster/b11',
        alert_notify=True,
        current_value='bitrot_bad_file',
        message='File with gfid: 1 is corrupted due to bitrot.  '
        'Brick: b1. Path: /gluster/b1 in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning')
示例#42
0
def test_svc_disconnected(load):
    init()
    NS.node_context.fqdn = "node-test"
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a")
    event = {
        "message": {
            "volume": "v1",
            "svc_name": "test"
        },
        "event": "SVC_DISCONNECTED",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().svc_disconnected(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'svc_connection|test_node-testv1',
        current_value='service_disconnected',
        message='Service: test is disconnected on node node-test '
        'of cluster 77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning')
def test_ec_min_bricks_up():
    init()
    event = {
        "message": {
            "subvol": "sub_vol"
        },
        "event": "EC_MIN_BRICKS_UP",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().ec_min_bricks_up(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'ec_min_bricks_up|sub_vol',
        current_value='ec_min_bricks_up',
        message='Minimum number of bricks back online in EC subvolume: '
        'sub_vol in cluster 77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='recovery',
        tags={
            'entity_type': 'volume',
            'volume_name': 'sub_vol'
        })
def test_afr_subvol_up():
    init()
    event = {
        "message": {
            "subvol": "sub_vol"
        },
        "event": "AFR_SUBVOL_UP",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().afr_subvol_up(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'afr_subvol_state|sub_vol',
        current_value='afr_subvol_up',
        message='Afr subvolume: sub_vol is back up in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='recovery',
        tags={
            'entity_type': 'volume',
            'volume_name': 'sub_vol'
        })
def test_afr_quorum_fail():
    init()
    event = {
        "message": {
            "subvol": "sub_vol"
        },
        "event": "AFR_QUORUM_FAIL",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().afr_quorum_fail(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'afr_quorum_state|sub_vol',
        current_value='afr_quorum_failed',
        message='Afr quorum has failed for subvolume: sub_vol in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning',
        tags={
            'entity_type': 'volume',
            'volume_name': 'sub_vol'
        })
def test_afr_subvols_down():
    init()
    event = {
        "message": {
            "subvol": "volume1-replica-2"
        },
        "event": "AFR_SUBVOLS_DOWN",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().afr_subvols_down(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'afr_subvol_state|volume1-replica-2',
        current_value='afr_subvol_down',
        message='Afr subvolume: volume1-replica-2 is down in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning',
        tags={
            'volume_name': 'volume1',
            'entity_type': 'volume'
        })
示例#47
0
def test_emit_event_with_brick_resource():
    init()
    setattr(NS, "tendrl_context", maps.NamedDict())
    NS.tendrl_context["integration_id"] = "int-id"
    NS.tendrl_context["cluster_name"] = "cluster1"
    NS.tendrl_context["sds_name"] = "gluster"
    NS.publisher_id = "gluster-integration"
    setattr(NS, "node_context", maps.NamedDict())
    NS.node_context["node_id"] = "node-id"
    NS.node_context["fqdn"] = "fqdn"

    from tendrl.gluster_integration.sds_sync import event_utils
    event_utils.emit_event(
        "brick_status",
        "stopped",
        "Brick:brick1 in volume:vol1 has stopped",
        "volume_vol1|brick_path1",
        "WARNING",
        tags={"entity_type": "brick", "volume_name": "vol1"}
    )

    with mock.patch.object(log_utils, 'log') as logger:
        logger.assert_called
示例#48
0
def test_quota_crossed_soft_limit(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"path": "/gluster/b1",
                         "volume": "v1",
                         "usage": "70%"
                         },
             "event": "QUOTA_CROSSED_SOFT_LIMIT",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().quota_crossed_soft_limit(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'quota_crossed_soft_limit|v1/gluster/b1',
        alert_notify=True,
        current_value='quota_crossed_soft_limit',
        message='Quota soft limit crossed in volume: v1 for path: '
                '/gluster/b1. Current usage: 70% in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning'
    )
示例#49
0
def test_quorum_lost(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a")
    event = {
        "message": {
            "volume": "v1"
        },
        "event": "QUORUM_LOST",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().quorum_lost(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'quorum|v1',
        current_value='quorum_lost',
        message='Quorum of volume: v1 is lost in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning',
        tags={
            'volume_name': 'v1',
            'entity_type': 'volume'
        })
示例#50
0
def test_afr_quorum_met(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a")
    event = {
        "message": {
            "subvol": "sub_vol"
        },
        "event": "AFR_QUORUM_MET",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().afr_quorum_met(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'afr_quorum_state|sub_vol',
        current_value='afr_quorum_met',
        message='Afr quorum is met for subvolume: sub_vol in cluster '
        '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='recovery',
        tags={
            'volume_name': 'sub_vol',
            'entity_type': 'volume'
        })
示例#51
0
def test_ec_min_bricks_not_up(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a")
    event = {
        "message": {
            "subvol": "sub_vol"
        },
        "event": "EC_MIN_BRICKS_NOT_UP",
        "ts": 1486634392,
        "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
    }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().ec_min_bricks_not_up(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'ec_min_bricks_up|sub_vol',
        current_value='ec_min_bricks_not_up',
        message='Minimum number of bricks not up in EC subvolume: sub_vol '
        'in cluster 77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning',
        tags={
            'entity_type': 'volume',
            'volume_name': 'sub_vol'
        })
示例#52
0
def test_brickpath_resolve_failed(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"peer": "dhcp123-12.lab.abc.com",
                         "volume": "v1",
                         "brick": "b1"
                         },
             "event": "BRICKPATH_RESOLVE_FAILED",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().brickpath_resolve_failed(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'brickpath_resolve_failed|dhcp123-12.lab.abc.comv1b1',
        alert_notify=True,
        current_value='brick_path_resolve_failed',
        message='Brick path resolution failed for brick: b1 . '
                'Volume: v1.Peer: dhcp123-12.lab.abc.com in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning'
    )
示例#53
0
def test_bitrot_bad_file(load):
    init()
    load.return_value = maps.NamedDict(
        short_name="77deef29-b8e5-4dc5-8247-21e2a409a66a"
    )
    event = {"message": {"path": "/gluster/b1",
                         "brick": "b1",
                         "gfid": "1"
                         },
             "event": "BITROT_BAD_FILE",
             "ts": 1486634392,
             "nodeid": "0f5b4b99-fa4a-4b8f-be52-770b42879d67"
             }
    NS.gluster.objects.NativeEvents = MagicMock()
    Callback().bitrot_bad_file(event)
    NS.gluster.objects.NativeEvents.assert_called_with(
        'bitrot_bad_file|b1/gluster/b11',
        alert_notify=True,
        current_value='bitrot_bad_file',
        message='File with gfid: 1 is corrupted due to bitrot.  '
                'Brick: b1. Path: /gluster/b1 in cluster '
                '77deef29-b8e5-4dc5-8247-21e2a409a66a',
        severity='warning'
    )
 def setup_method(self, method):
     init()
     self.tempdir = tempfile.mkdtemp()