SSSDConfigTest.py revision edaa983d094c239c3e1ba667bcd20ed3934be3b8
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo SirainenCreated on Sep 18, 2009
fab850a6aee4aaef4f4795bd7946807a3ba45041Timo Sirainen@author: sgallagh
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf",
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen sssdconfig.import_config(srcdir + "/testconfigs/sssd-valid.conf")
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen # Validate services
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen #Verify service attributes
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen self.assertTrue('services' in service_opts.keys())
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen service_list = sssd_service.get_option('services')
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen self.assertTrue('reconnection_retries' in service_opts)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf",
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen new_sssd_service = sssdconfig.new_service('sssd');
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen new_options = new_sssd_service.list_options();
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertEquals(new_options['debug_level'][0], int)
27a44fcfd8d19bffe0f267f20a2b5d3fe7600fddTimo Sirainen self.assertEquals(new_options['command'][0], str)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertTrue('reconnection_retries' in new_options)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertEquals(new_options['reconnection_retries'][0], int)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertEquals(new_options['debug_level'][0], int)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertEquals(new_options['domains'][0], list)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertEquals(new_options['domains'][1], str)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertTrue('sbus_timeout' in new_options)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertEquals(new_options['sbus_timeout'][0], int)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertTrue('re_expression' in new_options)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertEquals(new_options['re_expression'][0], str)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertTrue('full_name_format' in new_options)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertEquals(new_options['full_name_format'][0], str)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertTrue('default_domain_suffix' in new_options)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertEquals(new_options['default_domain_suffix'][0], str)
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf",
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen sssdconfig.import_config(srcdir + "/testconfigs/sssd-valid.conf")
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen #Validate domain list
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen #Verify domain attributes
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertTrue('debug_level' in domain_opts.keys())
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen self.assertTrue('id_provider' in domain_opts.keys())
767431e5084a037c4dbefdf30ebfa03c84b1f449Timo Sirainen self.assertTrue('auth_provider' in domain_opts.keys())
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf",
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf",
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen local_domain.set_option('default_shell', '/bin/tcsh')
9f3bb0e10835efb0c9b1eb9e09e16b614ec41b97Timo Sirainen #Ensure the output file doesn't exist
9f3bb0e10835efb0c9b1eb9e09e16b614ec41b97Timo Sirainen #Write out the file
28b8434ca4cba2e310d13ffc55e895d658725f43Timo Sirainen #Verify that the output file has the correct permissions
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen #Output files should not be readable or writable by
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen #non-owners, and should not be executable by anyone
28b8434ca4cba2e310d13ffc55e895d658725f43Timo Sirainen #Remove the output file
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf",
a3a55999bcfe2e57941cb64343f4ea80beabdab7Timo Sirainen #Ensure the output file doesn't exist
cc52f19439f17c03e37fd65c6299a77d5c5e638aTimo Sirainen #Write out the file
cc52f19439f17c03e37fd65c6299a77d5c5e638aTimo Sirainen #Verify that the output file has the correct permissions
f2a1955d993f67982bc40ad7bbae9a036dabfd64Timo Sirainen #Output files should not be readable or writable by
f2a1955d993f67982bc40ad7bbae9a036dabfd64Timo Sirainen #non-owners, and should not be executable by anyone
cc52f19439f17c03e37fd65c6299a77d5c5e638aTimo Sirainen #Remove the output file
f2a1955d993f67982bc40ad7bbae9a036dabfd64Timo Sirainen sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf",
f2a1955d993f67982bc40ad7bbae9a036dabfd64Timo Sirainen sssdconfig.import_config(srcdir + "/testconfigs/sssd-valid.conf")
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen #Ensure the output file doesn't exist
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen #Write out the file
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen #Verify that the output file has the correct permissions
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen #Output files should not be readable or writable by
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen #non-owners, and should not be executable by anyone
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen #Remove the output file
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf",
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen sssdconfig.import_config(srcdir + "/testconfigs/sssd-valid.conf")
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen self.assertEqual(ldap_domain.get_option('auth_provider'), 'ldap')
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen self.assertEqual(ldap_domain.get_option('id_provider'), 'ldap')
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainenclass SSSDConfigTestInvalid(unittest.TestCase):
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen sssdconfig = SSSDConfig.SSSDConfig(srcdir + "/etc/sssd.api.conf",
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainen sssdconfig.import_config(srcdir + "/testconfigs/sssd-invalid-badbool.conf")
542a32ee5f4ca72626ec93b6313f909811c01534Timo Sirainenclass SSSDConfigTestSSSDService(unittest.TestCase):
acc039dfc0b0f4588cf2feec04727b61e1c672a1Timo Sirainen self.schema = SSSDConfig.SSSDConfigSchema(srcdir + "/etc/sssd.api.conf",
1c633f71ec2060e5bfa500a97f34cd881a958ecdTimo Sirainen # Positive test
1c633f71ec2060e5bfa500a97f34cd881a958ecdTimo Sirainen service = SSSDConfig.SSSDService('sssd', self.schema)
1c633f71ec2060e5bfa500a97f34cd881a958ecdTimo Sirainen # Type Error test
1c633f71ec2060e5bfa500a97f34cd881a958ecdTimo Sirainen # Name is not a string
1c633f71ec2060e5bfa500a97f34cd881a958ecdTimo Sirainen self.assertRaises(TypeError, SSSDConfig.SSSDService, 3, self.schema)
4909421ac41e143fe07a235c0d11e9f0452d716bTimo Sirainen # TypeError test
d5ef38077adbff5b3e4d0b3c94a2057581dc78b6Timo Sirainen # schema is not an SSSDSchema
968b2f633b7405bc2cf0596d04762994ceb279d0Timo Sirainen self.assertRaises(TypeError, SSSDConfig.SSSDService, '3', self)
968b2f633b7405bc2cf0596d04762994ceb279d0Timo Sirainen # ServiceNotRecognizedError test
968b2f633b7405bc2cf0596d04762994ceb279d0Timo Sirainen self.assertRaises(SSSDConfig.ServiceNotRecognizedError,
d5ef38077adbff5b3e4d0b3c94a2057581dc78b6Timo Sirainen service = SSSDConfig.SSSDService('sssd', self.schema)
968b2f633b7405bc2cf0596d04762994ceb279d0Timo Sirainen 'force_timeout',
968b2f633b7405bc2cf0596d04762994ceb279d0Timo Sirainen 'sbus_timeout',
968b2f633b7405bc2cf0596d04762994ceb279d0Timo Sirainen 're_expression',
968b2f633b7405bc2cf0596d04762994ceb279d0Timo Sirainen 'full_name_format',
e5d7056b6ef069e228f8ad3c9467662955cab3c6Timo Sirainen 'krb5_rcache_dir',
2e533fb1283b5f06a4063b519e47f1861c910386Timo Sirainen 'default_domain_suffix',
2e533fb1283b5f06a4063b519e47f1861c910386Timo Sirainen 'debug_level',
2e533fb1283b5f06a4063b519e47f1861c910386Timo Sirainen 'debug_timestamps',
2e533fb1283b5f06a4063b519e47f1861c910386Timo Sirainen 'debug_microseconds',
d5ef38077adbff5b3e4d0b3c94a2057581dc78b6Timo Sirainen 'debug_to_files',
e5d7056b6ef069e228f8ad3c9467662955cab3c6Timo Sirainen 'reconnection_retries',
ff3337516aad9843599905aeeb29812ea67c09d1Timo Sirainen 'client_idle_timeout']
a3a55999bcfe2e57941cb64343f4ea80beabdab7Timo Sirainen "Options should be a dictionary")
169b1488b6eea7a968021afa4f929b2e26d75d98Timo Sirainen # Ensure that all of the expected defaults are there
ff3337516aad9843599905aeeb29812ea67c09d1Timo Sirainen "Option [%s] missing" %
ff3337516aad9843599905aeeb29812ea67c09d1Timo Sirainen # Ensure that there aren't any unexpected options listed
6565fc65b6c12eeab52dabfbe7c60cb10c219d1eTimo Sirainen 'Option [%s] unexpectedly found' %
4605cab1123700c52c515a433a2802fcbc827c62Timo Sirainen self.assertTrue(type(options['reconnection_retries']) == tuple,
ff3337516aad9843599905aeeb29812ea67c09d1Timo Sirainen "Option values should be a tuple")
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen self.assertTrue(options['reconnection_retries'][0] == int,
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen "reconnection_retries should require an int. " +
a672f99363d5f37060c1331d00d2ee3c4626310fTimo Sirainen "list_options is requiring a %s" %
d5ef38077adbff5b3e4d0b3c94a2057581dc78b6Timo Sirainen self.assertTrue(options['reconnection_retries'][1] == None,
ff3337516aad9843599905aeeb29812ea67c09d1Timo Sirainen "reconnection_retries should not require a subtype. " +
968b2f633b7405bc2cf0596d04762994ceb279d0Timo Sirainen "list_options is requiring a %s" %
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen self.assertTrue(options['reconnection_retries'][3] == None,
885a3c2287ae3e5827aa580ea06b231de38abb47Timo Sirainen "reconnection_retries should have no default")
5296198635718c9bf5b2f972c9d5be52092d3d58Timo Sirainen self.assertTrue(type(options['services']) == tuple,
5296198635718c9bf5b2f972c9d5be52092d3d58Timo Sirainen "Option values should be a tuple")
d5ef38077adbff5b3e4d0b3c94a2057581dc78b6Timo Sirainen self.assertTrue(options['services'][0] == list,
5296198635718c9bf5b2f972c9d5be52092d3d58Timo Sirainen "services should require an list. " +
5296198635718c9bf5b2f972c9d5be52092d3d58Timo Sirainen "list_options is requiring a %s" %
5296198635718c9bf5b2f972c9d5be52092d3d58Timo Sirainen self.assertTrue(options['services'][1] == str,
5296198635718c9bf5b2f972c9d5be52092d3d58Timo Sirainen "services should require a subtype of str. " +
72c47a26f4ded49d4827dc64818b34bbc9606fc4Timo Sirainen "list_options is requiring a %s" %
5296198635718c9bf5b2f972c9d5be52092d3d58Timo Sirainen service = SSSDConfig.SSSDService('sssd', self.schema)
4a26584a87ee0e986d23a224b3b3e85c44254d7fTimo Sirainen "Options should be a dictionary")
4a26584a87ee0e986d23a224b3b3e85c44254d7fTimo Sirainen # Ensure that all of the expected defaults are there
d5ef38077adbff5b3e4d0b3c94a2057581dc78b6Timo Sirainen "Option [%s] missing" %
4909421ac41e143fe07a235c0d11e9f0452d716bTimo Sirainen # Ensure that there aren't any unexpected options listed
4909421ac41e143fe07a235c0d11e9f0452d716bTimo Sirainen 'Option [%s] unexpectedly found' %
968b2f633b7405bc2cf0596d04762994ceb279d0Timo Sirainen self.assertTrue(type(options['services']) == tuple,
a2857829c642e2671779576b00c37b7d04693731Timo Sirainen "Option values should be a tuple")
a2857829c642e2671779576b00c37b7d04693731Timo Sirainen self.assertTrue(options['services'][0] == list,
a2857829c642e2671779576b00c37b7d04693731Timo Sirainen "services should require an list. " +
a2857829c642e2671779576b00c37b7d04693731Timo Sirainen "list_options is requiring a %s" %
a43145989f87ec68754e21234e7b6d892c4a4421Timo Sirainen self.assertTrue(options['services'][1] == str,
a2857829c642e2671779576b00c37b7d04693731Timo Sirainen "services should require a subtype of str. " +
d47a87c927ca77e780480f4eaf575511698d42c8Timo Sirainen "list_options is requiring a %s" %
d0695591414d27675914c7f6332d0ee56e8eeb72Timo Sirainen service = SSSDConfig.SSSDService('sssd', self.schema)
51f750db859e62e2c58a61806b53e0adb13e0775Timo Sirainen # Positive test - Exactly right
a2857829c642e2671779576b00c37b7d04693731Timo Sirainen self.assertEqual(service.get_option('debug_level'), 2)
a2857829c642e2671779576b00c37b7d04693731Timo Sirainen # Positive test - Allow converting "safe" values
a2857829c642e2671779576b00c37b7d04693731Timo Sirainen self.assertEqual(service.get_option('debug_level'), 2)
a2857829c642e2671779576b00c37b7d04693731Timo Sirainen # Positive test - Remove option if value is None
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen self.assertTrue('debug_level' not in service.options.keys())
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen # Negative test - Nonexistent Option
1d5dbb87f3485544db62896e2d56c663cb728c17Timo Sirainen self.assertRaises(SSSDConfig.NoOptionError, service.set_option, 'nosuchoption', 1)
1d5dbb87f3485544db62896e2d56c663cb728c17Timo Sirainen # Negative test - Incorrect type
1d5dbb87f3485544db62896e2d56c663cb728c17Timo Sirainen self.assertRaises(TypeError, service.set_option, 'debug_level', 'two')
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen service = SSSDConfig.SSSDService('sssd', self.schema)
aee3e2f7ab2b27572a90b9e7fd8fe60f13c6637eTimo Sirainen # Positive test - Single-valued
aee3e2f7ab2b27572a90b9e7fd8fe60f13c6637eTimo Sirainen self.assertEqual(service.get_option('config_file_version'), 2)
aee3e2f7ab2b27572a90b9e7fd8fe60f13c6637eTimo Sirainen # Positive test - List of values
aee3e2f7ab2b27572a90b9e7fd8fe60f13c6637eTimo Sirainen self.assertEqual(service.get_option('services'), ['nss', 'pam'])
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen # Negative Test - Bad Option
10515cb90514b169ab6c3693c72c4bf1017476dbTimo Sirainen self.assertRaises(SSSDConfig.NoOptionError, service.get_option, 'nosuchoption')
10515cb90514b169ab6c3693c72c4bf1017476dbTimo Sirainen service = SSSDConfig.SSSDService('sssd', self.schema)
10515cb90514b169ab6c3693c72c4bf1017476dbTimo Sirainen #Positive test
bd417d416988d11a6b555b9aa57779e7ed976951Timo Sirainen 'config_file_version',
134582c78f038b4d9b9fde127399aefa50935a53Timo Sirainen "Options should be a dictionary")
7ed711d973b319320da100d3e905ef7b99ed69d6Timo Sirainen # Ensure that all of the expected defaults are there
4909421ac41e143fe07a235c0d11e9f0452d716bTimo Sirainen "Option [%s] missing" %
control_list = [
control_list = [
control_list = [
control_list = [
control_list = [
self.assertRaises(SSSDConfig.ParsingError, sssdconfig.import_config, srcdir + "/testconfigs/sssd-invalid.conf")
self.assertRaises(SSSDConfig.ParsingError, sssdconfig.import_config, srcdir + "/testconfigs/sssd-badversion.conf")
self.assertRaises(SSSDConfig.ParsingError, sssdconfig.import_config, srcdir + "/testconfigs/sssd-noversion.conf")
control_list = [
control_list = [
control_list = [
control_list = [
control_list = [
control_list = [
control_list = [
control_list = [