Newer
Older
ldapcherry / tests / test_BackendDemo.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import with_statement
from __future__ import unicode_literals

import pytest
import sys
from ldapcherry.backend.backendDemo import Backend
from ldapcherry.exceptions import *
from disable import travis_disabled
import cherrypy
import logging
if sys.version < '3':
    from sets import Set as set


cfg = {
    'display_name': 'test',
    'admin.groups': 'grp1, grp2',
    'basic.groups': 'grp1, grp2, grp3',
    'pwd_attr': 'userPassword',
    'search_attributes': 'uid',
}

def syslog_error(msg='', context='',
        severity=logging.INFO, traceback=False):
    pass

cherrypy.log.error = syslog_error
attr = ['shéll', 'shell', 'cn', 'uid', 'uidNumber', 'gidNumber', 'home', 'userPassword', 'givenName', 'email', 'sn']

default_user = {
'uid': 'default_user',
'sn':  'test',
'cn':  'test',
'userPassword': 'test',
'uidNumber': '42',
'gidNumber': '42',
'homeDirectory': '/home/test/'
}

default_user2 = {
'uid': 'default_user2',
'sn':  'test',
'cn':  'test',
'userPassword': 'test',
'uidNumber': '42',
'gidNumber': '42',
'homeDirectory': '/home/test/'
}



default_groups = ['grp1', 'grp2', 'grp3']


class TestError(object):

    def testNominal(self):
        inv = Backend(cfg, cherrypy.log, 'test', attr, 'uid')
        return True

    def testAuthSuccess(self):
        inv = Backend(cfg, cherrypy.log, 'test', attr, 'uid')
        ret = inv.auth('admin', 'admin')
        assert ret == True

    def testAuthFailure(self):
        inv = Backend(cfg, cherrypy.log, 'test', attr, 'uid')
        res = inv.auth('notauser', 'password') or inv.auth('default_user', 'notapassword')
        assert res == False

    def testGetUser(self):
        inv = Backend(cfg, cherrypy.log, 'test', attr, 'uid')
        inv.add_user(default_user)
        inv.add_to_groups('default_user', default_groups)
        ret = inv.get_user('default_user')
        expected = default_user 
        assert ret == expected

    def testGetGroups(self):
        inv = Backend(cfg, cherrypy.log, 'test', attr, 'uid')
        inv.add_user(default_user)
        inv.add_to_groups('default_user', default_groups)
        ret = inv.get_groups('default_user')
        expected = set(default_groups)
        assert ret == expected

    def testSearchUser(self):
        inv = Backend(cfg, cherrypy.log, 'test', attr, 'uid')
        inv.add_user(default_user)
        inv.add_user(default_user2)
        ret = inv.search('default')
        expected = ['default_user', 'default_user2']
        assert set(ret.keys()) == set(expected)

    def testAddUser(self):
        try:
            inv.del_user(u'test☭')
        except:
            pass
        inv = Backend(cfg, cherrypy.log, 'test', attr, 'uid')
        user = {
        'uid': u'test☭',
        'sn':  'test',
        'cn':  'test',
        'userPassword': 'test',
        'uidNumber': '42',
        'gidNumber': '42',
        'homeDirectory': '/home/test/'
        }
        inv.add_user(user)
        inv.del_user(u'test☭')

    def testModifyUser(self):
        inv = Backend(cfg, cherrypy.log, 'test', attr, 'uid')
        user = {
        'uid': u'test☭',
        'sn':  'test',
        'cn':  'test',
        'userPassword': 'test',
        'uidNumber': '42',
        'gidNumber': '42',
        'homeDirectory': '/home/test/'
        }
        inv.add_user(user)
        inv.set_attrs(u'test☭', {'gecos': 'test2', 'homeDirectory': '/home/test/'})
        inv.del_user(u'test☭')

    def testAddUserDuplicate(self):
        inv = Backend(cfg, cherrypy.log, 'test', attr, 'uid')
        user = {
        'uid': 'test',
        'sn':  'test',
        'cn':  'test',
        'uidNumber': '42',
        'userPassword': 'test',
        'gidNumber': '42',
        'homeDirectory': '/home/test/'
        }
        try:
            inv.add_user(user)
            inv.add_user(user)
        except UserAlreadyExists:
            inv.del_user('test')
            return
        else:
            inv.del_user('test')
            raise AssertionError("expected an exception")

    def testDelUserDontExists(self):
        inv = Backend(cfg, cherrypy.log, 'test', attr, 'uid')
        try:
            inv.del_user('test')
            inv.del_user('test')
        except UserDoesntExist:
            return
        else:
            raise AssertionError("expected an exception")