def test_remove_user_from_namespace_fail_no_such_namespace(idstorage):
    idstorage.create_namespace(NamespaceID('foo'))
    idstorage.add_user_to_namespace(NamespaceID('foo'),
                                    User(AuthsourceID('as'), Username('u')))
    fail_remove_namespace_user(idstorage, NamespaceID('bar'),
                               User(AuthsourceID('as'), Username('u')),
                               NoSuchNamespaceError('bar'))
Ejemplo n.º 2
0
 def _modify_namespace_users(self, add: bool, namespace_id, admin_user):
     """
     :param add: True to add the user to the namespace, False to remove.
     """
     not_none(namespace_id, 'namespace_id')
     not_none(admin_user, 'admin_user')
     op = '$addToSet' if add else '$pull'
     try:
         res = self._db[_COL_NAMESPACES].update_one(
             {_FLD_NS_ID: namespace_id.id}, {
                 op: {
                     _FLD_USERS: {
                         _FLD_AUTHSOURCE: admin_user.authsource_id.id,
                         _FLD_NAME: admin_user.username.name
                     }
                 }
             })
         if res.matched_count != 1:
             raise NoSuchNamespaceError(namespace_id.id)
         if res.modified_count != 1:
             action = 'already administrates' if add else 'does not administrate'
             ex = UserExistsError if add else NoSuchUserError  # might want diff exceps here
             raise ex('User {}/{} {} namespace {}'.format(
                 admin_user.authsource_id.id, admin_user.username.name,
                 action, namespace_id.id))
     except PyMongoError as e:
         raise IDMappingStorageError('Connection to database failed: ' +
                                     str(e)) from e
Ejemplo n.º 3
0
def test_get_mappings_fail_no_namespace():
    storage = create_autospec(IDMappingStorage, spec_set=True, instance=True)
    handlers = create_autospec(UserLookupSet, spec_set=True, instance=True)

    idm = IDMapper(handlers, set(), storage)

    storage.get_namespaces.side_effect = NoSuchNamespaceError('n3')

    fail_get_mappings(idm, ObjectID(NamespaceID('n'), 'o'), [
                      NamespaceID('n1'), NamespaceID('n2'),
                      NamespaceID('n4'), NamespaceID('n4')],
                      NoSuchNamespaceError('n3'))

    assert storage.get_namespaces.call_args_list == [(([NamespaceID('n'),
                                                        NamespaceID('n1'),
                                                        NamespaceID('n2'),
                                                        NamespaceID('n4'),
                                                        NamespaceID('n4')],), {})]
Ejemplo n.º 4
0
def test_remove_mapping_fail_no_such_other_namespace():
    # since the return value of the 2nd get namespace call isn't used, and the reason for the
    # call is to check the namespace exists, we explicitly test the call is made by throwing
    # an exception.
    storage = create_autospec(IDMappingStorage, spec_set=True, instance=True)
    handlers = create_autospec(UserLookupSet, spec_set=True, instance=True)

    idm = IDMapper(handlers, set(), storage)

    handlers.get_user.return_value = (User(AuthsourceID('a'), Username('n')), False)
    storage.get_namespace.side_effect = [
        Namespace(NamespaceID('n1'), False, set([
            User(AuthsourceID('a'), Username('n')), User(AuthsourceID('a'), Username('n2'))])),
        NoSuchNamespaceError('n2')]

    fail_remove_mapping(idm, AuthsourceID('a'), Token('t'),
                        ObjectID(NamespaceID('n1'), 'o1'),
                        ObjectID(NamespaceID('n2'), 'o2'),
                        NoSuchNamespaceError('n2'))
def test_get_namespaces_fail_no_such_namepsace(idstorage):
    idstorage.create_namespace(NamespaceID('foo'))
    fail_get_namespaces(
        idstorage, {
            NamespaceID('zoo'),
            NamespaceID('foo'),
            NamespaceID('baz'),
            NamespaceID('aioli_compote_drizzled_on_artisian_tater_tots')
        },
        NoSuchNamespaceError(
            "['aioli_compote_drizzled_on_artisian_tater_tots', 'baz', 'zoo']"))
Ejemplo n.º 6
0
    def get_namespace(self, namespace_id: NamespaceID) -> Namespace:
        not_none(namespace_id, 'namespace_id')
        try:
            nsdoc = self._db[_COL_NAMESPACES].find_one(
                {_FLD_NS_ID: namespace_id.id})
        except PyMongoError as e:
            raise IDMappingStorageError('Connection to database failed: ' +
                                        str(e)) from e

        if not nsdoc:
            raise NoSuchNamespaceError(namespace_id.id)
        return self._to_ns(nsdoc)
Ejemplo n.º 7
0
 def set_namespace_publicly_mappable(self, namespace_id: NamespaceID,
                                     publicly_mappable: bool) -> None:
     not_none(namespace_id, 'namespace_id')
     pm = True if publicly_mappable else False  # more readable than 'and True'
     try:
         res = self._db[_COL_NAMESPACES].update_one(
             {_FLD_NS_ID: namespace_id.id}, {'$set': {
                 _FLD_PUB_MAP: pm
             }})
         if res.matched_count != 1:  # don't care if modified or not
             raise NoSuchNamespaceError(namespace_id.id)
     except PyMongoError as e:
         raise IDMappingStorageError('Connection to database failed: ' +
                                     str(e)) from e
Ejemplo n.º 8
0
 def get_namespaces(self,
                    nids: Iterable[NamespaceID] = None) -> Set[Namespace]:
     query = {}
     nidstr: List[str] = []
     if nids:
         no_Nones_in_iterable(nids, 'nids')
         nidstr = [nid.id for nid in nids]
         query[_FLD_NS_ID] = {'$in': nidstr}
     try:
         nsdocs = self._db[_COL_NAMESPACES].find(query)
         nsobjs = {self._to_ns(nsdoc) for nsdoc in nsdocs}
         if nidstr and len(nsobjs) != len(nidstr):
             missing = set(nidstr) - {ns.namespace_id.id for ns in nsobjs}
             raise NoSuchNamespaceError(str(sorted(missing)))
         return nsobjs
     except PyMongoError as e:
         raise IDMappingStorageError('Connection to database failed: ' +
                                     str(e)) from e
def test_set_namespace_publicly_mappable_no_such_namespace(idstorage):
    idstorage.create_namespace(NamespaceID('foo'))
    fail_set_namespace_publicly_mappable(idstorage, NamespaceID('bar'),
                                         NoSuchNamespaceError('bar'))
def test_get_namespace_fail_no_such_namespace(idstorage):
    idstorage.create_namespace(NamespaceID('foo'))
    fail_get_namespace(idstorage, NamespaceID('bar'),
                       NoSuchNamespaceError('bar'))