Esempio n. 1
0
def _make_group_strict(ctx):
    if ctx.registered_undefined_hook or (ctx.registered_defined_hook and not ctx.defined_hook):
        raises_context = pytest.raises(UndefinedHook)
    else:
        raises_context = _noop()

    with raises_context:
        gossip.get_or_create_group("group").set_strict()
        ctx.made_strict = True
Esempio n. 2
0
def _make_group_strict(ctx):
    raises_context = _noop()
    if ctx.registered_hook:
        if not ctx.defined_hook:
            raises_context = pytest.raises(UndefinedHook)
        elif not ctx.is_tags_valid_for_strict_group:
            raises_context = pytest.raises(UnsupportedHookTags)
    with raises_context:
        gossip.get_or_create_group("group").set_strict()
    ctx.made_strict = True
Esempio n. 3
0
def _make_group_strict(ctx):
    if ctx.registered_undefined_hook or (ctx.registered_defined_hook
                                         and not ctx.defined_hook):
        raises_context = pytest.raises(UndefinedHook)
    else:
        raises_context = _noop()

    with raises_context:
        gossip.get_or_create_group("group").set_strict()
        ctx.made_strict = True
Esempio n. 4
0
def test_undefined_hooks_have_no_side_effects():
    assert gossip.get_all_registrations() == []
    gossip.get_or_create_group('group').set_strict()

    for _ in range(5): # pylint: disable=redefined-builtin
        with pytest.raises(UndefinedHook):
            @gossip.register('group.hook')
            def handler():  # pylint: disable=unused-variable
                pass
    assert gossip.get_all_registrations() == []
Esempio n. 5
0
def test_undefined_hooks_have_no_side_effects():
    assert gossip.get_all_registrations() == []
    gossip.get_or_create_group('group').set_strict()

    for _ in range(5):  # pylint: disable=redefined-builtin
        with pytest.raises(UndefinedHook):

            @gossip.register('group.hook')
            def handler():  # pylint: disable=unused-variable
                pass

    assert gossip.get_all_registrations() == []
Esempio n. 6
0
def test_make_group_not_strict():
    group = gossip.get_or_create_group('group')
    subgroup = gossip.get_or_create_group('group.sub')
    assert not group.is_strict()
    assert not subgroup.is_strict()

    group.set_strict()
    assert group.is_strict()
    assert subgroup.is_strict()

    group.set_strict(False)
    assert not group.is_strict()
    assert not subgroup.is_strict()
Esempio n. 7
0
def test_make_group_not_strict():
    group = gossip.get_or_create_group('group')
    subgroup = gossip.get_or_create_group('group.sub')
    assert not group.is_strict()
    assert not subgroup.is_strict()

    group.set_strict()
    assert group.is_strict()
    assert subgroup.is_strict()

    group.set_strict(False)
    assert not group.is_strict()
    assert not subgroup.is_strict()
Esempio n. 8
0
def test_exception_on_register(blueprint):

    gossip.get_or_create_group('group').set_strict()

    @blueprint.register('group.a')
    def func():  # pylint: disable=unused-variable
        pass

    @blueprint.register('x')
    def func():  # pylint: disable=function-redefined
        pass

    with pytest.raises(UndefinedHook):
        blueprint.install()

    assert len(gossip.get_all_registrations()) == 0
Esempio n. 9
0
def test_strict_hook_without_argument_defs_doesnt_validate(request):
    group = gossip.get_or_create_group('somegroup')
    group.set_strict()
    request.addfinalizer(group.undefine)
    hook = gossip.define('somegroup.somehook')
    request.addfinalizer(hook.undefine)

    hook.trigger(kwargs={'bla': 2, 'some': 'string', 'and_an': object()})
Esempio n. 10
0
def test_get_or_create_group():
    group_name = "group_name"
    with pytest.raises(GroupNotFound):
        gossip.get_group(group_name)

    group = gossip.get_or_create_group(group_name)
    assert isinstance(group, gossip.groups.Group)
    assert group is gossip.get_group(group_name)
Esempio n. 11
0
def test_strict_hook_without_argument_defs_doesnt_validate(request):
    group = gossip.get_or_create_group('somegroup')
    group.set_strict()
    request.addfinalizer(group.undefine)
    hook = gossip.define('somegroup.somehook')
    request.addfinalizer(hook.undefine)

    hook.trigger(kwargs={'bla': 2, 'some': 'string', 'and_an': object()})
Esempio n. 12
0
def validating_hook(request):

    group = gossip.get_or_create_group('some_strict_group')
    group.set_strict()
    request.addfinalizer(group.undefine)

    hook = gossip.define('some_strict_group.some_hook', arg_names={'x': None, 'y': int, 'z': (str, float)})
    request.addfinalizer(hook.undefine)
    return hook
Esempio n. 13
0
def test_register_custom_hooks_strict_group():

    initially_installed = list(plugins.manager.get_installed_plugins())

    hook_name = "some_group.some_hook"
    gossip.get_or_create_group("some_group").set_strict()

    class MyPlugin(PluginInterface):
        def get_name(self):
            return "plugin"

        @plugins.registers_on(hook_name)
        def unknown(self):
            pass

    with pytest.raises(IncompatiblePlugin):
        plugins.manager.install(MyPlugin(), activate=True)

    assert list(plugins.manager.get_installed_plugins()) == initially_installed
Esempio n. 14
0
def test_register_custom_hooks_strict_group():

    initially_installed = list(plugins.manager.get_installed_plugins())

    hook_name = "some_group.some_hook"
    gossip.get_or_create_group("some_group").set_strict()

    class MyPlugin(PluginInterface):

        def get_name(self):
            return "plugin"

        @plugins.registers_on(hook_name)
        def unknown(self):
            pass

    with pytest.raises(IncompatiblePlugin):
        plugins.manager.install(MyPlugin(), activate=True)

    assert list(plugins.manager.get_installed_plugins()) == initially_installed
Esempio n. 15
0
def test_set_strict_with_subgroups_and_tags(hook_name):
    def handler():
        pass

    main_group_name = hook_name.partition(".")[0]
    gossip.register(handler, hook_name)

    with pytest.raises(UndefinedHook):
        gossip.get_or_create_group(main_group_name).set_strict()
    hook = gossip.define(hook_name, tags=("some_tag", "other_tag"))

    illegal_tags_hook = gossip.define(".".join([hook.group.full_name, "hook_with_illegal_tags"]))
    gossip.register(handler, illegal_tags_hook.full_name, tags=("fake_tag"))
    with pytest.raises(UnsupportedHookTags):
        gossip.get_or_create_group(main_group_name).set_strict()
    illegal_tags_hook.unregister_all()

    gossip.get_or_create_group(main_group_name).set_strict()
    with pytest.raises(UnsupportedHookTags):
        @gossip.register(hook_name, tags=("fake_tag",))
        def handler2():  # pylint: disable=unused-variable
            pass
    with pytest.raises(UnsupportedHookTags):
        gossip.trigger_with_tags(hook_name, tags=("fake_tag",))
    gossip.trigger_with_tags(hook_name, tags=("some_tag", "other_tag"))
Esempio n. 16
0
def validating_hook(request):

    group = gossip.get_or_create_group('some_strict_group')
    group.set_strict()
    request.addfinalizer(group.undefine)

    hook = gossip.define('some_strict_group.some_hook',
                         arg_names={
                             'x': None,
                             'y': int,
                             'z': (str, float)
                         })
    request.addfinalizer(hook.undefine)
    return hook
Esempio n. 17
0
def _install_hooks():
    import gossip

    # Define systems objects operation hooks
    obj_type_name = set(tag for sys in (InfiniBox, IZBox) for obj_cls in sys.OBJECT_TYPES
            for tag in obj_cls._get_tags_for_object_operations(sys))
    for hook_name_template in (_SDK_HOOK('pre_object_{0}'), _SDK_HOOK('post_object_{0}')):
        for operation in ('creation', 'deletion', 'update'):
            full_hook_name = hook_name_template.format(operation)
            gossip.define(full_hook_name, tags=obj_type_name)
    gossip.define(_SDK_HOOK('object_operation_failure'), tags=obj_type_name)
    gossip.define(_SDK_HOOK('object_creation_failure'), tags=obj_type_name)

    gossip.define(_SDK_HOOK("begin_fork"),  tags=['infinibox', 'volume', 'filesystem'])
    gossip.define(_SDK_HOOK("cancel_fork"), tags=['infinibox', 'volume', 'filesystem'])
    gossip.define(_SDK_HOOK("finish_fork"), tags=['infinibox', 'volume', 'filesystem'])

    gossip.define(_SDK_HOOK('pre_data_restore'), tags=['infinibox', 'volume', 'filesystem'])
    gossip.define(_SDK_HOOK('post_data_restore'), tags=['infinibox', 'volume', 'filesystem'])
    gossip.define(_SDK_HOOK('data_restore_failure'), tags=['infinibox', 'volume', 'filesystem'])

    gossip.define(_SDK_HOOK('pre_creation_data_validation'), tags=['infinibox', 'volume', 'filesystem'])

    gossip.define(_SDK_HOOK('pre_fields_update'), tags=['infinibox'])

    gossip.define(_SDK_HOOK('pre_cons_group_add_member'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('post_cons_group_add_member'), tags=['infinibox'])

    gossip.define(_SDK_HOOK('replica_snapshot_created'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('replica_after_change_role'), tags=['infinibox'])

    gossip.define(_SDK_HOOK('before_api_request'))
    gossip.define(_SDK_HOOK('after_api_request'))

    gossip.define(_SDK_HOOK('after_login'))

    gossip.get_or_create_group('infinidat.sdk').set_strict()
Esempio n. 18
0
def _install_hooks():
    import gossip

    # Define systems objects operation hooks. TreeQ is explicitly added separately, as, being a special type of object,
    # it is not in OBJECT_TYPES.
    obj_type_names = set(
        tag for sys in (InfiniBox, ) for obj_cls in sys.OBJECT_TYPES + [TreeQ]
        for tag in obj_cls.get_tags_for_object_operations(sys))
    for hook_name_template in (_SDK_HOOK('pre_object_{}'),
                               _SDK_HOOK('post_object_{}'),
                               _SDK_HOOK('object_{}_failure')):
        for operation in ('creation', 'deletion', 'update'):
            full_hook_name = hook_name_template.format(operation)
            gossip.define(full_hook_name, tags=obj_type_names)
    gossip.define(_SDK_HOOK('object_operation_failure'), tags=obj_type_names)

    gossip.define(_SDK_HOOK('pre_treeq_creation'), tags=['infinibox', 'treeq'])
    gossip.define(_SDK_HOOK('post_treeq_creation'),
                  tags=['infinibox', 'treeq'])
    gossip.define(_SDK_HOOK('treeq_creation_failure'),
                  tags=['infinibox', 'treeq'])

    gossip.define(_SDK_HOOK("begin_fork"),
                  tags=['infinibox', 'volume', 'filesystem'])
    gossip.define(_SDK_HOOK("cancel_fork"),
                  tags=['infinibox', 'volume', 'filesystem'])
    gossip.define(_SDK_HOOK("finish_fork"),
                  tags=['infinibox', 'volume', 'filesystem'])

    gossip.define(_SDK_HOOK('pre_data_restore'),
                  tags=['infinibox', 'volume', 'filesystem'])
    gossip.define(_SDK_HOOK('post_data_restore'),
                  tags=['infinibox', 'volume', 'filesystem'])
    gossip.define(_SDK_HOOK('data_restore_failure'),
                  tags=['infinibox', 'volume', 'filesystem'])

    gossip.define(_SDK_HOOK('pre_object_restore'),
                  tags=['infinibox', 'volume', 'filesystem'])
    gossip.define(_SDK_HOOK('post_object_restore'),
                  tags=['infinibox', 'volume', 'filesystem'])
    gossip.define(_SDK_HOOK('object_restore_failure'),
                  tags=['infinibox', 'volume', 'filesystem'])

    gossip.define(_SDK_HOOK('pre_pool_move'),
                  tags=['infinibox', 'volume', 'filesystem', 'cons_group'])
    gossip.define(_SDK_HOOK('post_pool_move'),
                  tags=['infinibox', 'volume', 'filesystem', 'cons_group'])
    gossip.define(_SDK_HOOK('pool_move_failure'),
                  tags=['infinibox', 'volume', 'filesystem', 'cons_group'])

    gossip.define(_SDK_HOOK('pre_cons_group_deletion'),
                  tags=['infinibox', 'cons_group'])
    gossip.define(_SDK_HOOK('post_cons_group_deletion'),
                  tags=['infinibox', 'cons_group'])
    gossip.define(_SDK_HOOK('cons_group_deletion_failure'),
                  tags=['infinibox', 'cons_group'])

    gossip.define(_SDK_HOOK('pre_entity_child_creation'),
                  tags=['infinibox', 'volume', 'filesystem', 'cons_group'])
    gossip.define(_SDK_HOOK('post_entity_child_creation'),
                  tags=['infinibox', 'volume', 'filesystem', 'cons_group'])
    gossip.define(_SDK_HOOK('entity_child_creation_failure'),
                  tags=['infinibox', 'volume', 'filesystem', 'cons_group'])

    gossip.define(_SDK_HOOK('pre_creation_data_validation'),
                  tags=obj_type_names)

    gossip.define(_SDK_HOOK('pre_fields_update'), tags=obj_type_names)

    gossip.define(_SDK_HOOK('pre_cons_group_add_member'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('post_cons_group_add_member'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('cons_group_add_member_failure'),
                  tags=['infinibox'])

    gossip.define(_SDK_HOOK('pre_cons_group_remove_member'),
                  tags=['infinibox'])
    gossip.define(_SDK_HOOK('post_cons_group_remove_member'),
                  tags=['infinibox'])
    gossip.define(_SDK_HOOK('cons_group_remove_member_failure'),
                  tags=['infinibox'])

    gossip.define(_SDK_HOOK('replica_snapshot_created'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('replica_deleted'), tags=['infinibox'])

    gossip.define(_SDK_HOOK('pre_replication_snapshot_expose'),
                  tags=['volume', 'filesystem', 'cons_group'])
    gossip.define(_SDK_HOOK('post_replication_snapshot_expose'),
                  tags=['volume', 'filesystem', 'cons_group'])
    gossip.define(_SDK_HOOK('replication_snapshot_expose_failure'),
                  tags=['volume', 'filesystem', 'cons_group'])

    gossip.define(_SDK_HOOK('pre_replica_suspend'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('post_replica_suspend'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('replica_suspend_failure'), tags=['infinibox'])

    gossip.define(_SDK_HOOK('pre_replica_resume'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('post_replica_resume'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('replica_resume_failure'), tags=['infinibox'])

    gossip.define(_SDK_HOOK('pre_replica_change_type'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('post_replica_change_type'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('replica_change_type_failure'), tags=['infinibox'])

    gossip.define(_SDK_HOOK('pre_replica_switch_role'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('post_replica_switch_role'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('replica_switch_role_failure'), tags=['infinibox'])

    gossip.define(_SDK_HOOK('pre_replica_change_role'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('post_replica_change_role'), tags=['infinibox'])
    gossip.define(_SDK_HOOK('replica_change_role_failure'), tags=['infinibox'])

    gossip.define(_SDK_HOOK('pre_refresh_snapshot'),
                  tags=['infinibox', 'volume', 'filesystem', 'cons_group'])
    gossip.define(_SDK_HOOK('post_refresh_snapshot'),
                  tags=['infinibox', 'volume', 'filesystem', 'cons_group'])
    gossip.define(_SDK_HOOK('refresh_snapshot_failure'),
                  tags=['infinibox', 'volume', 'filesystem', 'cons_group'])

    gossip.define(_SDK_HOOK('pre_pool_lock'), tags=['infinibox', 'pool'])
    gossip.define(_SDK_HOOK('post_pool_lock'), tags=['infinibox', 'pool'])
    gossip.define(_SDK_HOOK('pool_lock_failure'), tags=['infinibox', 'pool'])

    gossip.define(_SDK_HOOK('pre_pool_unlock'), tags=['infinibox', 'pool'])
    gossip.define(_SDK_HOOK('post_pool_unlock'), tags=['infinibox', 'pool'])
    gossip.define(_SDK_HOOK('pool_unlock_failure'), tags=['infinibox', 'pool'])

    gossip.define(_SDK_HOOK('pre_qos_policy_assign'),
                  tags=['infinibox', 'qos_policy'])
    gossip.define(_SDK_HOOK('post_qos_policy_assign'),
                  tags=['infinibox', 'qos_policy'])
    gossip.define(_SDK_HOOK('qos_policy_assign_failure'),
                  tags=['infinibox', 'qos_policy'])
    gossip.define(_SDK_HOOK('pre_qos_policy_unassign'),
                  tags=['infinibox', 'qos_policy'])
    gossip.define(_SDK_HOOK('post_qos_policy_unassign'),
                  tags=['infinibox', 'qos_policy'])
    gossip.define(_SDK_HOOK('qos_policy_unassign_failure'),
                  tags=['infinibox', 'qos_policy'])

    gossip.define(_SDK_HOOK('before_api_request'))
    gossip.define(_SDK_HOOK('after_api_request'))

    gossip.define(_SDK_HOOK('after_login'))

    gossip.get_or_create_group('infinidat.sdk').set_strict()
Esempio n. 19
0
def _get_or_create_group(is_strict):
    g = gossip.get_or_create_group(_HOOK_NAME.split('.')[0])
    if is_strict:
        g.set_strict()
Esempio n. 20
0
def test_trigger_hook_with_unsupported_tags():
    gossip.define('group.some_hook', tags=("some_tag",))
    gossip.trigger('group.some_hook', tags=("fake_tag",))
    gossip.get_or_create_group('group').set_strict()
    with pytest.raises(UnsupportedHookTags):
        gossip.trigger_with_tags('group.some_hook', tags=("fake_tag",))
Esempio n. 21
0
def _get_or_create_group(is_strict):
    g = gossip.get_or_create_group(_HOOK_NAME.split('.')[0])
    if is_strict:
        g.set_strict()