示例#1
0
 def setUp(self):
     ret_chn = ReturnChannel(stdout_callback, {})
     command_list = load_modules()
     self.config = Config('help', '', command_list, [], ret_chn, 'shell')
     self.connector = LDAPConnector(self.config)
     self.config.import_custom_options()
     self.init_config()
示例#2
0
class LDAPConnectorTests(unittest.TestCase):
    def setUp(self):
        ret_chn = ReturnChannel(stdout_callback, {})
        command_list = load_modules()
        self.config = Config('help', '', command_list, [], ret_chn, 'shell')
        self.connector = LDAPConnector(self.config)
        self.config.import_custom_options()
        self.init_config()

    def init_config(self):
        self.config['ldap_method'] = 'LDAP'
        self.config['page_size'] = 1
        self.config['bind_dn'] = 'cn=foo,dc=example,dc=com'
        self.config['group_mapping'] = {
            "scientists": "group1",
            "mathematicians": "group2",
            "analyst": "group3"
        }

        self.david = 'CN=David Hilbert,CN=Users,DC=example,DC=org'
        self.jon = 'CN=Jon Snow,CN=Users,DC=example,DC=org'
        self.james = 'CN=James Bond,CN=Users,DC=example,DC=org'
        self.users = [self.david, self.jon]

    def expected_directory_users(self):
        expected_users = {}
        for user, group in zip(self.users, ['mathematicians', 'scientists']):
            expected_users[DIRECTORY[user]['mail'][0]] = {
                'full_name': DIRECTORY[user]['cn'][0],
                'groups': [group],
                'last_name': DIRECTORY[user]['sn'][0],
                'email': DIRECTORY[user]['mail'][0],
                'exists': False
            }

        return expected_users

    def test_translate_ldap_group_to_sde_group(self):
        self.connector._groups = {
            'g1': [1, 2, 3],
            'g2': [4, 5, 6]
        }
        mapping = {'mathematicians': 'g1', 'scientists': 'g2'}
        ldap_groups = ['mathematicians', 'programmers']
        expected = [[1, 2, 3]]

        actual = self.connector.translate_ldap_group_to_sde_group(ldap_groups, mapping)
        self.assertEqual(actual, expected)

    def test_calculate_name(self):
        user = {
            'first_name': 'John',
            'last_name': 'Smith',
            'full_name': 'John Smith'
        }

        new_user = self.connector.calculate_name(user)
        self.assertEqual(user, new_user)

        # Missing first name and last name is inferred
        for missing_field in ['first_name', 'last_name']:
            other_user = user.copy()
            del other_user[missing_field]
            new_user = self.connector.calculate_name(other_user)
            self.assertEqual(user, new_user)

        # only full name present with space in it
        other_user = {'full_name': 'John Smith'}
        new_user = self.connector.calculate_name(other_user)
        self.assertEqual(user, new_user)

        # only full name present - no spaces
        other_user = {'full_name': 'Aouda'}
        expected_user = {
            'first_name': 'Aouda',
            'last_name': 'Aouda',
            'full_name': 'Aouda'
        }
        new_user = self.connector.calculate_name(other_user)
        self.assertEqual(new_user, expected_user)

        # either first or last name only
        for field in ['first_name', 'last_name']:
            other_user = {field: 'Aouda'}
            new_user = self.connector.calculate_name(other_user)
            self.assertEqual(new_user['first_name'], new_user['last_name'])

    def test_filter_groups(self):
        groups = {
            'g1': ['a', 'b', 'c'],
            'g2': ['d', 'e', 'f']
        }

        # no filtering
        actual = self.connector.filter_groups(groups, {})
        self.assertEqual(actual, groups)

        # only whitelisted groups should appear
        actual = self.connector.filter_groups(groups, {'groups': ['g1']})

    def test_filter_users(self):
        # only those with emails are returned
        groups = {
            'mathematicians': [DIRECTORY[self.david]],
            'scientists': [DIRECTORY[self.jon]],
            'spies': [DIRECTORY[self.james]]
        }

        self.connector.initialize()
        actual = self.connector.filter_users(groups, {})
        expected = self.expected_directory_users()
        self.assertEqual(actual, expected)

        # only whitelisted ones are returned
        user = self.jon
        email = DIRECTORY[user]['mail'][0]
        filters = {'users': [email]}
        actual = self.connector.filter_users(groups, filters)
        expected = {
            email: {
                'full_name': DIRECTORY[user]['cn'][0],
                'groups': ['scientists'],
                'last_name': DIRECTORY[user]['sn'][0],
                'email': DIRECTORY[user]['mail'][0],
                'exists': False
            }
        }
        self.assertEqual(actual, expected)

    def test_get_users_diff(self):
        dict_a = {'a': 1, 'b': 2, 'c': 3}
        dict_b = {'c': 1, 'd': 2, 'e': 3}

        actual = self.connector._get_users_diff(dict_a, dict_b)
        expected = (
            dict_a,
            dict_b,
            set(['c']),
            set(['d', 'e']),
            set(['a', 'b'])
        )

        self.assertEquals(actual, expected)