2007-12-18 20:54:19 +03:00
# Unix SMB/CIFS implementation.
2012-02-25 23:04:57 +04:00
# Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007-2012
2011-09-13 03:10:37 +04:00
#
2007-12-18 20:54:19 +03: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 03:10:37 +04:00
#
2007-12-18 20:54:19 +03: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 03:10:37 +04:00
#
2007-12-18 20:54:19 +03: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 18:56:27 +03:00
""" Tests for samba.provision. """
2007-12-20 01:27:31 +03:00
import os
2012-02-25 20:35:41 +04:00
from samba . provision import (
2012-02-25 23:04:57 +04:00
ProvisionNames ,
2012-02-25 20:35:41 +04:00
ProvisionPaths ,
2012-02-25 23:04:57 +04:00
ProvisionResult ,
2012-02-26 23:39:13 +04:00
determine_netbios_name ,
2012-02-25 20:35:41 +04:00
sanitize_server_role ,
setup_secretsdb ,
findnss ,
2018-07-30 09:14:37 +03:00
)
2007-12-20 01:27:31 +03:00
import samba . tests
2010-06-19 20:58:18 +04:00
from samba . tests import env_loadparm , TestCase
2008-01-26 04:55:03 +03:00
2018-07-30 09:20:39 +03: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 23:45:00 +04:00
paths = ProvisionPaths ( )
paths . secrets = path
paths . private_dir = os . path . dirname ( path )
2017-08-10 16:37:54 +03:00
paths . binddns_dir = os . path . dirname ( path )
2010-09-30 23:45:00 +04:00
paths . keytab = " no.keytab "
paths . dns_keytab = " no.dns.keytab "
2020-04-20 08:09:52 +03: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 03:56:52 +04:00
2007-12-20 01:27:31 +03:00
class ProvisionTestCase ( samba . tests . TestCaseInTempDir ) :
2008-02-09 19:42:31 +03:00
""" Some simple tests for individual functions in the provisioning code.
"""
2010-06-20 03:56:52 +04:00
2007-12-18 20:54:19 +03:00
def test_setup_secretsdb ( self ) :
2007-12-26 01:36:44 +03:00
path = os . path . join ( self . tempdir , " secrets.ldb " )
2010-09-30 23:45:00 +04:00
paths = ProvisionPaths ( )
2013-02-20 08:29:42 +04:00
secrets_tdb_path = os . path . join ( self . tempdir , " secrets.tdb " )
2010-09-30 23:45:00 +04:00
paths . secrets = path
paths . private_dir = os . path . dirname ( path )
2017-08-10 16:37:54 +03:00
paths . binddns_dir = os . path . dirname ( path )
2010-09-30 23:45:00 +04:00
paths . keytab = " no.keytab "
paths . dns_keytab = " no.dns.keytab "
2020-04-20 08:09:52 +03:00
ldb = setup_secretsdb ( paths , None , lp = env_loadparm ( ) )
2007-12-26 01:36:44 +03:00
try :
2020-02-07 01:02:38 +03:00
self . assertEqual ( " LSA Secrets " ,
2018-07-30 09:16:12 +03:00
ldb . searchone ( basedn = " CN=LSA Secrets " , attribute = " CN " ) . decode ( ' utf8 ' ) )
2007-12-26 01:36:44 +03:00
finally :
del ldb
os . unlink ( path )
2013-02-20 08:29:42 +04:00
if os . path . exists ( secrets_tdb_path ) :
os . unlink ( secrets_tdb_path )
2008-02-09 04:10:49 +03:00
2018-07-30 09:20:39 +03:00
2010-06-19 20:58:18 +04:00
class FindNssTests ( TestCase ) :
2008-02-09 04:10:49 +03:00
""" Test findnss() function. """
2010-06-19 20:58:18 +04:00
2008-02-09 04:10:49 +03:00
def test_nothing ( self ) :
def x ( y ) :
raise KeyError
self . assertRaises ( KeyError , findnss , x , [ ] )
def test_first ( self ) :
2020-02-07 01:02:38 +03:00
self . assertEqual ( " bla " , findnss ( lambda x : " bla " , [ " bla " ] ) )
2008-02-09 04:10:49 +03:00
def test_skip_first ( self ) :
def x ( y ) :
if y != " bla " :
raise KeyError
return " ha "
2020-02-07 01:02:38 +03:00
self . assertEqual ( " ha " , findnss ( x , [ " bloe " , " bla " ] ) )
2008-02-09 04:10:49 +03:00
2008-08-01 23:00:09 +04:00
class Disabled ( object ) :
2010-03-01 07:04:23 +03:00
2007-12-18 20:54:19 +03: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 04:10:49 +03:00
2012-02-25 20:35:41 +04:00
class SanitizeServerRoleTests ( TestCase ) :
def test_same ( self ) :
2020-02-07 01:02:38 +03:00
self . assertEqual ( " standalone server " ,
2018-07-30 09:16:12 +03:00
sanitize_server_role ( " standalone server " ) )
2020-02-07 01:02:38 +03:00
self . assertEqual ( " member server " ,
2018-07-30 09:16:12 +03:00
sanitize_server_role ( " member server " ) )
2012-02-25 20:35:41 +04:00
def test_invalid ( self ) :
self . assertRaises ( ValueError , sanitize_server_role , " foo " )
def test_valid ( self ) :
2020-02-07 01:02:38 +03:00
self . assertEqual (
2012-09-16 16:18:51 +04:00
" standalone server " ,
sanitize_server_role ( " ROLE_STANDALONE " ) )
2020-02-07 01:02:38 +03:00
self . assertEqual (
2012-09-16 16:18:51 +04:00
" standalone server " ,
sanitize_server_role ( " standalone " ) )
2020-02-07 01:02:38 +03:00
self . assertEqual (
2012-09-16 16:18:51 +04:00
" active directory domain controller " ,
sanitize_server_role ( " domain controller " ) )
2012-02-25 23:04:57 +04:00
class DummyLogger ( object ) :
def __init__ ( self ) :
self . entries = [ ]
2012-02-26 18:44:40 +04:00
def info ( self , text , * args ) :
self . entries . append ( ( " INFO " , text % args ) )
2012-02-25 23:04:57 +04:00
class ProvisionResultTests ( TestCase ) :
2012-02-26 18:56:52 +04:00
def report_logger ( self , result ) :
2012-02-25 23:04:57 +04:00
logger = DummyLogger ( )
2012-02-26 18:56:52 +04:00
result . report_logger ( logger )
return logger . entries
2012-02-26 19:07:21 +04:00
def base_result ( self ) :
2012-02-25 23:04:57 +04: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 18:44:40 +04:00
result . paths = ProvisionPaths ( )
2012-02-26 19:07:21 +04:00
return result
def test_basic_report_logger ( self ) :
result = self . base_result ( )
2012-02-26 18:56:52 +04:00
entries = self . report_logger ( result )
2020-02-07 01:02:38 +03:00
self . assertEqual ( entries , [
2017-05-05 12:21:03 +03:00
( ' INFO ' , ' Once the above files are installed, your Samba AD server '
2012-02-26 19:23:18 +04:00
' will be ready to use ' ) ,
2012-02-25 23:04:57 +04: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 18:56:52 +04:00
2012-02-26 19:07:21 +04: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 01:02:38 +03:00
self . assertEqual ( entries [ 1 ] ,
2018-07-30 09:16:12 +03:00
( " INFO " , ' Admin password: geheim ' ) )
2012-02-26 19:07:21 +04:00
2012-02-26 23:39:13 +04:00
class DetermineNetbiosNameTests ( TestCase ) :
def test_limits_to_15 ( self ) :
2020-02-07 01:02:38 +03:00
self . assertEqual ( " A " * 15 , determine_netbios_name ( " a " * 30 ) )
2012-02-26 23:39:13 +04:00
def test_strips_invalid ( self ) :
2020-02-07 01:02:38 +03:00
self . assertEqual ( " BLABLA " , determine_netbios_name ( " bla/bla " ) )