2007-12-18 18:54:19 +01:00
# Unix SMB/CIFS implementation.
2012-02-25 20:04:57 +01:00
# Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007-2012
2011-09-13 01:10:37 +02:00
#
2007-12-18 18:54:19 +01:00
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
2011-09-13 01:10:37 +02:00
#
2007-12-18 18:54:19 +01:00
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
2011-09-13 01:10:37 +02:00
#
2007-12-18 18:54:19 +01:00
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
2010-12-05 16:56:27 +01:00
""" Tests for samba.provision. """
2007-12-19 23:27:31 +01:00
import os
2012-02-25 17:35:41 +01:00
from samba . provision import (
2012-02-25 20:04:57 +01:00
ProvisionNames ,
2012-02-25 17:35:41 +01:00
ProvisionPaths ,
2012-02-25 20:04:57 +01:00
ProvisionResult ,
2012-02-26 20:39:13 +01:00
determine_netbios_name ,
2012-02-25 17:35:41 +01:00
sanitize_server_role ,
setup_secretsdb ,
findnss ,
2018-07-30 18:14:37 +12:00
)
2007-12-19 23:27:31 +01:00
import samba . tests
2010-06-19 18:58:18 +02:00
from samba . tests import env_loadparm , TestCase
2008-01-26 02:55:03 +01:00
2018-07-30 18:20:39 +12:00
2010-05-07 04:22:36 +04:00
def create_dummy_secretsdb ( path , lp = None ) :
""" Create a dummy secrets database for use in tests.
: param path : Path to store the secrets db
: param lp : Optional loadparm context . A simple one will
be generated if not specified .
"""
if lp is None :
lp = env_loadparm ( )
2010-09-30 12:45:00 -07:00
paths = ProvisionPaths ( )
paths . secrets = path
paths . private_dir = os . path . dirname ( path )
2017-08-10 15:37:54 +02:00
paths . binddns_dir = os . path . dirname ( path )
2010-09-30 12:45:00 -07:00
paths . keytab = " no.keytab "
paths . dns_keytab = " no.dns.keytab "
2020-04-20 17:09:52 +12:00
secrets_ldb = setup_secretsdb ( paths , None , lp = lp )
2010-05-07 04:22:36 +04:00
secrets_ldb . transaction_commit ( )
return secrets_ldb
2010-06-20 01:56:52 +02:00
2007-12-19 23:27:31 +01:00
class ProvisionTestCase ( samba . tests . TestCaseInTempDir ) :
2008-02-09 17:42:31 +01:00
""" Some simple tests for individual functions in the provisioning code.
"""
2010-06-20 01:56:52 +02:00
2007-12-18 18:54:19 +01:00
def test_setup_secretsdb ( self ) :
2007-12-25 16:36:44 -06:00
path = os . path . join ( self . tempdir , " secrets.ldb " )
2010-09-30 12:45:00 -07:00
paths = ProvisionPaths ( )
2013-02-20 14:59:42 +10:30
secrets_tdb_path = os . path . join ( self . tempdir , " secrets.tdb " )
2010-09-30 12:45:00 -07:00
paths . secrets = path
paths . private_dir = os . path . dirname ( path )
2017-08-10 15:37:54 +02:00
paths . binddns_dir = os . path . dirname ( path )
2010-09-30 12:45:00 -07:00
paths . keytab = " no.keytab "
paths . dns_keytab = " no.dns.keytab "
2020-04-20 17:09:52 +12:00
ldb = setup_secretsdb ( paths , None , lp = env_loadparm ( ) )
2007-12-25 16:36:44 -06:00
try :
2020-02-07 11:02:38 +13:00
self . assertEqual ( " LSA Secrets " ,
2018-07-30 18:16:12 +12:00
ldb . searchone ( basedn = " CN=LSA Secrets " , attribute = " CN " ) . decode ( ' utf8 ' ) )
2007-12-25 16:36:44 -06:00
finally :
del ldb
os . unlink ( path )
2013-02-20 14:59:42 +10:30
if os . path . exists ( secrets_tdb_path ) :
os . unlink ( secrets_tdb_path )
2008-02-09 02:10:49 +01:00
2018-07-30 18:20:39 +12:00
2010-06-19 18:58:18 +02:00
class FindNssTests ( TestCase ) :
2008-02-09 02:10:49 +01:00
""" Test findnss() function. """
2010-06-19 18:58:18 +02:00
2008-02-09 02:10:49 +01:00
def test_nothing ( self ) :
def x ( y ) :
raise KeyError
self . assertRaises ( KeyError , findnss , x , [ ] )
def test_first ( self ) :
2020-02-07 11:02:38 +13:00
self . assertEqual ( " bla " , findnss ( lambda x : " bla " , [ " bla " ] ) )
2008-02-09 02:10:49 +01:00
def test_skip_first ( self ) :
def x ( y ) :
if y != " bla " :
raise KeyError
return " ha "
2020-02-07 11:02:38 +13:00
self . assertEqual ( " ha " , findnss ( x , [ " bloe " , " bla " ] ) )
2008-02-09 02:10:49 +01:00
2008-08-01 21:00:09 +02:00
class Disabled ( object ) :
2010-03-01 05:04:23 +01:00
2007-12-18 18:54:19 +01:00
def test_setup_templatesdb ( self ) :
raise NotImplementedError ( self . test_setup_templatesdb )
def test_setup_registry ( self ) :
raise NotImplementedError ( self . test_setup_registry )
def test_setup_samdb_rootdse ( self ) :
raise NotImplementedError ( self . test_setup_samdb_rootdse )
def test_setup_samdb_partitions ( self ) :
raise NotImplementedError ( self . test_setup_samdb_partitions )
def test_provision_dns ( self ) :
raise NotImplementedError ( self . test_provision_dns )
def test_provision_ldapbase ( self ) :
raise NotImplementedError ( self . test_provision_ldapbase )
def test_provision_guess ( self ) :
raise NotImplementedError ( self . test_provision_guess )
def test_join_domain ( self ) :
raise NotImplementedError ( self . test_join_domain )
2008-02-09 02:10:49 +01:00
2012-02-25 17:35:41 +01:00
class SanitizeServerRoleTests ( TestCase ) :
def test_same ( self ) :
2020-02-07 11:02:38 +13:00
self . assertEqual ( " standalone server " ,
2018-07-30 18:16:12 +12:00
sanitize_server_role ( " standalone server " ) )
2020-02-07 11:02:38 +13:00
self . assertEqual ( " member server " ,
2018-07-30 18:16:12 +12:00
sanitize_server_role ( " member server " ) )
2012-02-25 17:35:41 +01:00
def test_invalid ( self ) :
self . assertRaises ( ValueError , sanitize_server_role , " foo " )
def test_valid ( self ) :
2020-02-07 11:02:38 +13:00
self . assertEqual (
2012-09-16 14:18:51 +02:00
" standalone server " ,
sanitize_server_role ( " ROLE_STANDALONE " ) )
2020-02-07 11:02:38 +13:00
self . assertEqual (
2012-09-16 14:18:51 +02:00
" standalone server " ,
sanitize_server_role ( " standalone " ) )
2020-02-07 11:02:38 +13:00
self . assertEqual (
2012-09-16 14:18:51 +02:00
" active directory domain controller " ,
sanitize_server_role ( " domain controller " ) )
2012-02-25 20:04:57 +01:00
class DummyLogger ( object ) :
def __init__ ( self ) :
self . entries = [ ]
2012-02-26 15:44:40 +01:00
def info ( self , text , * args ) :
self . entries . append ( ( " INFO " , text % args ) )
2012-02-25 20:04:57 +01:00
class ProvisionResultTests ( TestCase ) :
2012-02-26 15:56:52 +01:00
def report_logger ( self , result ) :
2012-02-25 20:04:57 +01:00
logger = DummyLogger ( )
2012-02-26 15:56:52 +01:00
result . report_logger ( logger )
return logger . entries
2012-02-26 16:07:21 +01:00
def base_result ( self ) :
2012-02-25 20:04:57 +01:00
result = ProvisionResult ( )
result . server_role = " domain controller "
result . names = ProvisionNames ( )
result . names . hostname = " hostnaam "
result . names . domain = " DOMEIN "
result . names . dnsdomain = " dnsdomein "
result . domainsid = " S1-1-1 "
2012-02-26 15:44:40 +01:00
result . paths = ProvisionPaths ( )
2012-02-26 16:07:21 +01:00
return result
def test_basic_report_logger ( self ) :
result = self . base_result ( )
2012-02-26 15:56:52 +01:00
entries = self . report_logger ( result )
2020-02-07 11:02:38 +13:00
self . assertEqual ( entries , [
2017-05-05 11:21:03 +02:00
( ' INFO ' , ' Once the above files are installed, your Samba AD server '
2012-02-26 16:23:18 +01:00
' will be ready to use ' ) ,
2012-02-25 20:04:57 +01:00
( ' INFO ' , ' Server Role: domain controller ' ) ,
( ' INFO ' , ' Hostname: hostnaam ' ) ,
( ' INFO ' , ' NetBIOS Domain: DOMEIN ' ) ,
( ' INFO ' , ' DNS Domain: dnsdomein ' ) ,
( ' INFO ' , ' DOMAIN SID: S1-1-1 ' ) ] )
2012-02-26 15:56:52 +01:00
2012-02-26 16:07:21 +01:00
def test_report_logger_adminpass ( self ) :
result = self . base_result ( )
result . adminpass_generated = True
result . adminpass = " geheim "
entries = self . report_logger ( result )
2020-02-07 11:02:38 +13:00
self . assertEqual ( entries [ 1 ] ,
2018-07-30 18:16:12 +12:00
( " INFO " , ' Admin password: geheim ' ) )
2012-02-26 16:07:21 +01:00
2012-02-26 20:39:13 +01:00
class DetermineNetbiosNameTests ( TestCase ) :
def test_limits_to_15 ( self ) :
2020-02-07 11:02:38 +13:00
self . assertEqual ( " A " * 15 , determine_netbios_name ( " a " * 30 ) )
2012-02-26 20:39:13 +01:00
def test_strips_invalid ( self ) :
2020-02-07 11:02:38 +13:00
self . assertEqual ( " BLABLA " , determine_netbios_name ( " bla/bla " ) )