diff options
-rwxr-xr-x | wintest/test-s3.py | 65 | ||||
-rwxr-xr-x | wintest/test-s4-howto.py | 46 | ||||
-rw-r--r-- | wintest/wintest.py | 45 |
3 files changed, 129 insertions, 27 deletions
diff --git a/wintest/test-s3.py b/wintest/test-s3.py index 33f4acaf12..30027773b0 100755 --- a/wintest/test-s3.py +++ b/wintest/test-s3.py @@ -9,6 +9,15 @@ import wintest def set_libpath(t): t.putenv("LD_LIBRARY_PATH", "${PREFIX}/lib") +def set_krb5_conf(t): + t.run_cmd("mkdir -p ${PREFIX}/etc") + t.write_file("${PREFIX}/etc/krb5.conf", + '''[libdefaults] + dns_lookup_realm = false + dns_lookup_kdc = true''') + + t.putenv("KRB5_CONFIG", '${PREFIX}/etc/krb5.conf') + def build_s3(t): '''build samba3''' t.info('Building s3') @@ -31,7 +40,6 @@ def start_s3(t): t.run_cmd(['sbin/smbd', "-D"]) t.port_wait("${INTERFACE_IP}", 139) - def test_wbinfo(t): t.info('Testing wbinfo') t.chdir('${PREFIX}') @@ -69,7 +77,18 @@ def test_smbclient(t): t.cmd_contains("bin/smbclient --version", ["Version 3."]) t.cmd_contains('bin/smbclient -L ${INTERFACE_IP} -U%', ["Domain=[${WIN_DOMAIN}]", "test", "IPC$", "Samba 3."], casefold=True) - child = t.pexpect_spawn('bin/smbclient //${HOSTNAME}.${WIN_REALM}/test -Uroot%${PASSWORD2}') + child = t.pexpect_spawn('bin/smbclient //${HOSTNAME}.${WIN_REALM}/test -Uroot@${WIN_REALM}%${PASSWORD2}') + child.expect("smb:") + child.sendline("dir") + child.expect("blocks available") + child.sendline("mkdir testdir") + child.expect("smb:") + child.sendline("cd testdir") + child.expect('testdir') + child.sendline("cd ..") + child.sendline("rmdir testdir") + + child = t.pexpect_spawn('bin/smbclient //${HOSTNAME}.${WIN_REALM}/test -Uroot@${WIN_REALM}%${PASSWORD2} -k') child.expect("smb:") child.sendline("dir") child.expect("blocks available") @@ -160,6 +179,7 @@ def test_join_as_member(t, vm): def test_s3(t): '''basic s3 testing''' + t.setvar("SAMBA_VERSION", "Version 3") t.check_prerequesites() set_libpath(t) @@ -173,12 +193,16 @@ def test_s3(t): if not t.skip("build"): build_s3(t) + set_krb5_conf(t) if not t.skip("configure_bind2"): t.configure_bind() if not t.skip("start_bind"): t.start_bind() + dc_started = False if t.have_var('W2K8R2A_VM') and not t.skip("join_w2k8r2"): + t.start_winvm('W2K8R2A') + dc_started = True prep_join_as_member(t, "W2K8R2A") t.run_dcpromo_as_first_dc("W2K8R2A", func_level='2008r2') join_as_member(t, "W2K8R2A") @@ -186,6 +210,43 @@ def test_s3(t): start_s3(t) test_join_as_member(t, "W2K8R2A") + if t.have_var('WINDOWS7_VM') and t.have_var('W2K8R2A_VM') and not t.skip("join_windows7_2008r2"): + if not dc_started: + t.start_winvm('W2K8R2A') + t.run_dcpromo_as_first_dc("W2K8R2A", func_level='2008r2') + dc_started = True + else: + t.setwinvars('W2K8R2A') + realm = t.getvar("WIN_REALM") + dom_username = t.getvar("WIN_USER") + dom_password = t.getvar("WIN_PASS") + dom_realm = t.getvar("WIN_REALM") + t.start_winvm('WINDOWS7') + t.test_remote_smbclient("WINDOWS7") + t.run_winjoin('WINDOWS7', realm, username=dom_username, password=dom_password) + t.test_remote_smbclient("WINDOWS7", dom_username, dom_password) + t.test_remote_smbclient('WINDOWS7', dom_username, dom_password, args='--option=clientntlmv2auth=no') + t.test_remote_smbclient('WINDOWS7', "%s@%s" % (dom_username, dom_realm), dom_password, args="-k") + t.test_remote_smbclient('WINDOWS7', "%s@%s" % (dom_username, dom_realm), dom_password, args="-k --option=clientusespnegoprincipal=yes") + + if t.have_var('WINXP_VM') and t.have_var('W2K8R2A_VM') and not t.skip("join_winxp_2008r2"): + if not dc_started: + t.start_winvm('W2K8R2A') + t.run_dcpromo_as_first_dc("W2K8R2A", func_level='2008r2') + dc_started = True + else: + t.setwinvars('W2K8R2A') + realm = t.getvar("WIN_REALM") + dom_username = t.getvar("WIN_USER") + dom_password = t.getvar("WIN_PASS") + dom_realm = t.getvar("WIN_REALM") + t.start_winvm('WINXP') + t.run_winjoin('WINXP', realm, username=dom_username, password=dom_password) + t.test_remote_smbclient('WINXP', dom_username, dom_password) + t.test_remote_smbclient('WINXP', dom_username, dom_password, args='--option=clientntlmv2auth=no') + t.test_remote_smbclient('WINXP', "%s@%s" % (dom_username, dom_realm), dom_password, args="-k") + t.test_remote_smbclient('WINXP', "%s@%s" % (dom_username, dom_realm), dom_password, args="-k --clientusespnegoprincipal=yes") + t.info("S3 test: All OK") diff --git a/wintest/test-s4-howto.py b/wintest/test-s4-howto.py index 63a27d251a..c4a430c7b5 100755 --- a/wintest/test-s4-howto.py +++ b/wintest/test-s4-howto.py @@ -5,6 +5,9 @@ import sys, os import wintest, pexpect, time, subprocess +def set_krb5_conf(t): + t.putenv("KRB5_CONFIG", '${PREFIX}/private/krb5.conf') + def build_s4(t): '''build samba4''' t.info('Building s4') @@ -51,7 +54,7 @@ def start_s4(t): t.port_wait("${INTERFACE_IP}", 139) def test_smbclient(t): - '''test smbclient''' + '''test smbclient against localhost''' t.info('Testing smbclient') t.chdir('${PREFIX}') t.cmd_contains("bin/smbclient --version", ["Version 4.0"]) @@ -115,21 +118,7 @@ def run_winjoin(t, vm): '''join a windows box to our domain''' t.setwinvars(vm) - t.info("Joining a windows box to the domain") - t.vm_poweroff("${WIN_VM}", checkfail=False) - t.vm_restore("${WIN_VM}", "${WIN_SNAPSHOT}") - child = t.open_telnet("${WIN_HOSTNAME}", "${WIN_USER}", "${WIN_PASS}", set_time=True, set_ip=True, set_noexpire=True) - child.sendline("ipconfig /flushdns") - child.expect("C:") - child.sendline("netdom join ${WIN_HOSTNAME} /Domain:${LCREALM} /PasswordD:${PASSWORD1} /UserD:administrator") - child.expect("The command completed successfully") - child.expect("C:") - child.sendline("shutdown /r -t 0") - t.wait_reboot() - child = t.open_telnet("${WIN_HOSTNAME}", "${WIN_USER}", "${WIN_PASS}", set_time=True, set_ip=True) - child.sendline("ipconfig /registerdns") - child.expect("Registration of the DNS resource records for all adapters of this computer has been initiated. Any errors will be reported in the Event Viewer") - child.expect("C:") + t.run_winjoin(t, "${LCREALM}") def test_winjoin(t, vm): t.info("Checking the windows join is OK") @@ -143,7 +132,6 @@ def test_winjoin(t, vm): child = t.open_telnet("${WIN_HOSTNAME}", "${DOMAIN}\\administrator", "${PASSWORD1}") child.sendline("net use t: \\\\${HOSTNAME}.${LCREALM}\\test") child.expect("The command completed successfully") - t.vm_poweroff("${WIN_VM}") def run_dcpromo(t, vm): @@ -151,8 +139,6 @@ def run_dcpromo(t, vm): t.setwinvars(vm) t.info("Joining a windows VM ${WIN_VM} to the domain as a DC using dcpromo") - t.vm_poweroff("${WIN_VM}", checkfail=False) - t.vm_restore("${WIN_VM}", "${WIN_SNAPSHOT}") child = t.open_telnet("${WIN_HOSTNAME}", "administrator", "${WIN_PASS}", set_ip=True, set_noexpire=True) child.sendline("copy /Y con answers.txt") child.sendline(''' @@ -389,12 +375,9 @@ def test_dcpromo_rodc(t, vm): def prep_join_as_dc(t, vm): '''start VM and shutdown Samba in preperation to join a windows domain as a DC''' - t.setwinvars(vm) t.info("Starting VMs for joining ${WIN_VM} as a second DC using samba-tool join DC") t.chdir('${PREFIX}') t.run_cmd('killall -9 -q samba smbd nmbd winbindd', checkfail=False) - t.vm_poweroff("${WIN_VM}", checkfail=False) - t.vm_restore("${WIN_VM}", "${WIN_SNAPSHOT}") t.rndc_cmd('flush') t.run_cmd("rm -rf etc/smb.conf private") child = t.open_telnet("${WIN_HOSTNAME}", "${WIN_DOMAIN}\\administrator", "${WIN_PASS}", set_time=True) @@ -546,6 +529,7 @@ def test_join_as_rodc(t, vm): def test_howto(t): '''test the Samba4 howto''' + t.setvar("SAMBA_VERSION", "Version 4") t.check_prerequesites() # we don't need fsync safety in these tests @@ -564,6 +548,8 @@ def test_howto(t): if not t.skip("provision"): provision_s4(t) + set_krb5_conf(t) + if not t.skip("create-shares"): create_shares(t) @@ -583,25 +569,37 @@ def test_howto(t): test_dyndns(t) if t.have_vm('WINDOWS7') and not t.skip("windows7"): + t.start_winvm("WINDOWS7") + t.test_remote_smbclient("WINDOWS7") run_winjoin(t, "WINDOWS7") test_winjoin(t, "WINDOWS7") + t.vm_poweroff("${WIN_VM}") if t.have_vm('WINXP') and not t.skip("winxp"): + t.start_winvm("WINXP") run_winjoin(t, "WINXP") test_winjoin(t, "WINXP") + t.test_remote_smbclient("WINXP", "administrator", "${PASSWORD1}") + t.vm_poweroff("${WIN_VM}") if t.have_vm('W2K8R2C') and not t.skip("dcpromo_rodc"): t.info("Testing w2k8r2 RODC dcpromo") + t.start_winvm("W2K8R2C") + t.test_remote_smbclient('W2K8R2C') run_dcpromo_rodc(t, "W2K8R2C") test_dcpromo_rodc(t, "W2K8R2C") if t.have_vm('W2K8R2B') and not t.skip("dcpromo_w2k8r2"): t.info("Testing w2k8r2 dcpromo") + t.start_winvm("W2K8R2B") + t.test_remote_smbclient('W2K8R2B') run_dcpromo(t, "W2K8R2B") test_dcpromo(t, "W2K8R2B") if t.have_vm('W2K8B') and not t.skip("dcpromo_w2k8"): t.info("Testing w2k8 dcpromo") + t.start_winvm("W2K8B") + t.test_remote_smbclient('W2K8B') run_dcpromo(t, "W2K8B") test_dcpromo(t, "W2K8B") @@ -616,10 +614,13 @@ def test_howto(t): test_dns(t) test_kerberos(t) test_dyndns(t) + t.start_winvm("W2K3B") + t.test_remote_smbclient('W2K3B') run_dcpromo(t, "W2K3B") test_dcpromo(t, "W2K3B") if t.have_vm('W2K8R2A') and not t.skip("join_w2k8r2"): + t.start_winvm("W2K8R2A") prep_join_as_dc(t, "W2K8R2A") t.run_dcpromo_as_first_dc("W2K8R2A", func_level='2008r2') join_as_dc(t, "W2K8R2A") @@ -629,6 +630,7 @@ def test_howto(t): test_join_as_dc(t, "W2K8R2A") if t.have_vm('W2K8R2A') and not t.skip("join_rodc"): + t.start_winvm("W2K8R2A") prep_join_as_dc(t, "W2K8R2A") t.run_dcpromo_as_first_dc("W2K8R2A", func_level='2008r2') join_as_rodc(t, "W2K8R2A") diff --git a/wintest/wintest.py b/wintest/wintest.py index af4588f5c8..10bc562955 100644 --- a/wintest/wintest.py +++ b/wintest/wintest.py @@ -57,6 +57,8 @@ class wintest(): self.setvar("WIN_LCREALM", self.getvar("WIN_REALM").lower()) dnsdomain = self.getvar("WIN_REALM") self.setvar("WIN_BASEDN", "DC=" + dnsdomain.replace(".", ",DC=")) + if self.getvar("WIN_USER") is None: + self.setvar("WIN_USER", "administrator") def info(self, msg): '''print some information''' @@ -343,7 +345,6 @@ nameserver %s '''tkey-gssapi-credential "DNS/${LCREALM}"; tkey-domain "${LCREALM}"; ''') - self.putenv("KRB5_CONFIG", '${PREFIX}/private/krb5.conf') self.putenv('KEYTAB_FILE', '${PREFIX}/private/dns.keytab') self.putenv('KRB5_KTNAME', '${PREFIX}/private/dns.keytab') @@ -621,8 +622,12 @@ options { '''resolve an IP given a hostname, assuming NBT''' while retries > 0: child = self.pexpect_spawn("bin/nmblookup %s" % hostname) - i = child.expect(['\d+.\d+.\d+.\d+', "Lookup failed"]) - if i == 0: + i = 0 + while i == 0: + i = child.expect(["querying", '\d+.\d+.\d+.\d+', hostname, "Lookup failed"]) + if i == 0: + child.expect("\r") + if i == 1: return child.after retries -= 1 time.sleep(delay) @@ -802,6 +807,40 @@ RebootOnCompletion=No child.sendline("shutdown -r -t 0") self.port_wait("${WIN_IP}", 139, wait_for_fail=True) self.port_wait("${WIN_IP}", 139) + self.retry_cmd("host -t SRV _ldap._tcp.${WIN_REALM} ${WIN_IP}", ['has SRV record'] ) + + + def start_winvm(self, vm): + '''start a Windows VM''' + self.setwinvars(vm) + + self.info("Joining a windows box to the domain") + self.vm_poweroff("${WIN_VM}", checkfail=False) + self.vm_restore("${WIN_VM}", "${WIN_SNAPSHOT}") + + def run_winjoin(self, vm, domain, username="administrator", password="${PASSWORD1}"): + '''join a windows box to a domain''' + child = self.open_telnet("${WIN_HOSTNAME}", "${WIN_USER}", "${WIN_PASS}", set_time=True, set_ip=True, set_noexpire=True) + child.sendline("ipconfig /flushdns") + child.expect("C:") + child.sendline("netdom join ${WIN_HOSTNAME} /Domain:%s /UserD:%s /PasswordD:%s" % (domain, username, password)) + child.expect("The command completed successfully") + child.expect("C:") + child.sendline("shutdown /r -t 0") + self.wait_reboot() + child = self.open_telnet("${WIN_HOSTNAME}", "${WIN_USER}", "${WIN_PASS}", set_time=True, set_ip=True) + child.sendline("ipconfig /registerdns") + child.expect("Registration of the DNS resource records for all adapters of this computer has been initiated. Any errors will be reported in the Event Viewer") + child.expect("C:") + + + def test_remote_smbclient(self, vm, username="${WIN_USER}", password="${WIN_PASS}", args=""): + '''test smbclient against remote server''' + self.setwinvars(vm) + self.info('Testing smbclient') + self.chdir('${PREFIX}') + self.cmd_contains("bin/smbclient --version", ["${SAMBA_VERSION}"]) + self.retry_cmd('bin/smbclient -L ${WIN_HOSTNAME} -U%s%%%s %s' % (username, password, args), ["IPC"]) def setup(self, testname, subdir): |