summaryrefslogtreecommitdiff
path: root/source4/scripting/devel/wintest/test-howto.py
diff options
context:
space:
mode:
Diffstat (limited to 'source4/scripting/devel/wintest/test-howto.py')
-rwxr-xr-xsource4/scripting/devel/wintest/test-howto.py181
1 files changed, 105 insertions, 76 deletions
diff --git a/source4/scripting/devel/wintest/test-howto.py b/source4/scripting/devel/wintest/test-howto.py
index 1f70c56cd4..402519fad6 100755
--- a/source4/scripting/devel/wintest/test-howto.py
+++ b/source4/scripting/devel/wintest/test-howto.py
@@ -26,13 +26,16 @@ def build_s4(t):
t.run_cmd('rm -rf ${PREFIX}')
t.run_cmd('make -j install')
-def provision_s4(t):
+def provision_s4(t, func_level="2008", interfaces=None):
'''provision s4 as a DC'''
t.info('Provisioning s4')
t.chdir('${PREFIX}')
t.run_cmd("rm -rf etc private")
t.run_cmd("find var -type f | xargs rm -f")
- t.run_cmd('sbin/provision --realm=${LCREALM} --domain=${DOMAIN} --adminpass=${PASSWORD1} --server-role="domain controller" --function-level=2008 -d${DEBUGLEVEL}')
+ options=' --function-level=%s -d${DEBUGLEVEL}' % func_level
+ if interfaces:
+ options += ' --option=interfaces=%s' % interfaces
+ t.run_cmd('sbin/provision --realm=${LCREALM} --domain=${DOMAIN} --adminpass=${PASSWORD1} --server-role="domain controller"' + options)
t.run_cmd('bin/samba-tool newuser testallowed ${PASSWORD1}')
t.run_cmd('bin/samba-tool newuser testdenied ${PASSWORD1}')
t.run_cmd('bin/samba-tool group addmembers "Allowed RODC Password Replication Group" testallowed')
@@ -44,7 +47,7 @@ def start_s4(t, interfaces=None):
t.run_cmd(['sbin/samba',
'--option', 'panic action=gnome-terminal -e "gdb --pid %PID%"',
'--option', 'interfaces=%s' % interfaces])
- t.port_wait("localhost", 445)
+ t.port_wait("localhost", 139)
def test_smbclient(t):
t.info('Testing smbclient')
@@ -120,26 +123,24 @@ def run_winjoin(t, vm):
t.vm_poweroff("${WIN_VM}", checkfail=False)
t.vm_restore("${WIN_VM}", "${WIN_SNAPSHOT}")
t.ping_wait("${WIN_HOSTNAME}")
- t.port_wait("${WIN_HOSTNAME}", 23)
child = t.open_telnet("${WIN_HOSTNAME}", "${WIN_USER}", "${WIN_PASS}", set_time=True)
child.sendline("netdom join ${WIN_HOSTNAME} /Domain:${LCREALM} /PasswordD:${PASSWORD1} /UserD:administrator")
child.expect("The command completed successfully")
child.sendline("shutdown /r -t 0")
- t.port_wait("${WIN_HOSTNAME}", 23, wait_for_fail=True)
- t.port_wait("${WIN_HOSTNAME}", 23)
+ t.port_wait("${WIN_HOSTNAME}", 139, wait_for_fail=True)
+ t.port_wait("${WIN_HOSTNAME}", 139)
def test_winjoin(t, vm):
t.setwinvars(vm)
t.info("Checking the windows join is OK")
t.chdir('${PREFIX}')
- t.port_wait("${WIN_HOSTNAME}", 445)
+ t.port_wait("${WIN_HOSTNAME}", 139)
t.retry_cmd('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Uadministrator@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
t.cmd_contains("host -t A ${WIN_HOSTNAME}.${LCREALM}.", ['has address'])
t.cmd_contains('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utestallowed@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
t.cmd_contains('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -k no -Utestallowed@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
t.cmd_contains('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -k yes -Utestallowed@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
- t.port_wait("${WIN_HOSTNAME}", 23)
child = t.open_telnet("${WIN_HOSTNAME}", "${DOMAIN}\\administrator", "${PASSWORD1}")
child.sendline("net use t: \\\\${HOSTNAME}.${LCREALM}\\test")
child.expect("The command completed successfully")
@@ -154,11 +155,12 @@ def run_dcpromo(t, vm):
t.vm_poweroff("${WIN_VM}", checkfail=False)
t.vm_restore("${WIN_VM}", "${WIN_SNAPSHOT}")
t.ping_wait("${WIN_HOSTNAME}")
- t.port_wait("${WIN_HOSTNAME}", 23)
child = t.open_telnet("${WIN_HOSTNAME}", "administrator", "${WIN_PASS}")
child.sendline("copy /Y con answers.txt")
child.sendline('''
-[DCInstall]
+[DCINSTALL]
+RebootOnSuccess=Yes
+RebootOnCompletion=Yes
ReplicaOrNewDomain=Replica
ReplicaDomainDNSName=${LCREALM}
SiteName=Default-First-Site-Name
@@ -172,28 +174,27 @@ DatabasePath="C:\Windows\NTDS"
LogPath="C:\Windows\NTDS"
SYSVOLPath="C:\Windows\SYSVOL"
SafeModeAdminPassword=${PASSWORD1}
-RebootOnCompletion=No

''')
child.expect("copied.")
+ child.expect("C:")
+ child.expect("C:")
child.sendline("dcpromo /answer:answers.txt")
- i = child.expect(["You must restart this computer", "failed"], timeout=120)
- if i != 0:
+ i = child.expect(["You must restart this computer", "failed", "C:"], timeout=120)
+ if i == 1:
raise Exception("dcpromo failed")
- child.sendline("shutdown -r -t 0")
- t.port_wait("${WIN_HOSTNAME}", 23, wait_for_fail=True)
- t.port_wait("${WIN_HOSTNAME}", 23)
+ t.port_wait("${WIN_HOSTNAME}", 139, wait_for_fail=True)
+ t.port_wait("${WIN_HOSTNAME}", 139)
def test_dcpromo(t, vm):
t.setwinvars(vm)
t.info("Checking the dcpromo join is OK")
t.chdir('${PREFIX}')
- t.port_wait("${WIN_HOSTNAME}", 445)
+ t.port_wait("${WIN_HOSTNAME}", 139)
t.retry_cmd('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Uadministrator@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
t.cmd_contains("host -t A ${WIN_HOSTNAME}.${LCREALM}.", ['has address'])
t.cmd_contains('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utestallowed@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
- t.port_wait("${WIN_HOSTNAME}", 23)
t.cmd_contains("bin/samba-tool drs kcc ${HOSTNAME} -Uadministrator@${LCREALM}%${PASSWORD1}", ['Consistency check', 'successful'])
t.cmd_contains("bin/samba-tool drs kcc ${WIN_HOSTNAME} -Uadministrator@${LCREALM}%${PASSWORD1}", ['Consistency check', 'successful'])
@@ -206,28 +207,38 @@ def test_dcpromo(t, vm):
t.cmd_contains("bin/samba-tool drs showrepl ${HOSTNAME} -k yes",
[ "INBOUND NEIGHBORS",
"${BASEDN}",
- "Last attempt", "was successful",
- "CN=Schema,CN=Configuration,${BASEDN}",
- "Last attempt", "was successful",
+ "Last attempt .* was successful",
+ "CN=Configuration,${BASEDN}",
+ "Last attempt .* was successful",
+ "CN=Configuration,${BASEDN}", # cope with either order
+ "Last attempt .* was successful",
"OUTBOUND NEIGHBORS",
"${BASEDN}",
"Last success",
"CN=Configuration,${BASEDN}",
+ "Last success",
+ "CN=Configuration,${BASEDN}",
"Last success"],
- ordered=True)
+ ordered=True,
+ regex=True)
t.cmd_contains("bin/samba-tool drs showrepl ${WIN_HOSTNAME} -k yes",
[ "INBOUND NEIGHBORS",
"${BASEDN}",
- "Last attempt", "was successful",
- "CN=Schema,CN=Configuration,${BASEDN}",
- "Last attempt", "was successful",
+ "Last attempt .* was successful",
+ "CN=Configuration,${BASEDN}",
+ "Last attempt .* was successful",
+ "CN=Configuration,${BASEDN}",
+ "Last attempt .* was successful",
"OUTBOUND NEIGHBORS",
"${BASEDN}",
"Last success",
- "CN=Schema,CN=Configuration,${BASEDN}",
+ "CN=Configuration,${BASEDN}",
+ "Last success",
+ "CN=Configuration,${BASEDN}",
"Last success" ],
- ordered=True)
+ ordered=True,
+ regex=True)
child = t.open_telnet("${WIN_HOSTNAME}", "${DOMAIN}\\administrator", "${PASSWORD1}", set_time=True)
child.sendline("net use t: \\\\${HOSTNAME}.${LCREALM}\\test")
@@ -279,7 +290,6 @@ def run_dcpromo_rodc(t, vm):
t.vm_poweroff("${WIN_VM}", checkfail=False)
t.vm_restore("${WIN_VM}", "${WIN_SNAPSHOT}")
t.ping_wait("${WIN_HOSTNAME}")
- t.port_wait("${WIN_HOSTNAME}", 23)
child = t.open_telnet("${WIN_HOSTNAME}", "administrator", "${WIN_PASS}")
child.sendline("copy /Y con answers.txt")
child.sendline('''
@@ -313,8 +323,8 @@ RebootOnCompletion=No
if i != 0:
raise Exception("dcpromo failed")
child.sendline("shutdown -r -t 0")
- t.port_wait("${WIN_HOSTNAME}", 23, wait_for_fail=True)
- t.port_wait("${WIN_HOSTNAME}", 23)
+ t.port_wait("${WIN_HOSTNAME}", 139, wait_for_fail=True)
+ t.port_wait("${WIN_HOSTNAME}", 139)
@@ -322,11 +332,10 @@ def test_dcpromo_rodc(t, vm):
t.setwinvars(vm)
t.info("Checking the w2k8 RODC join is OK")
t.chdir('${PREFIX}')
- t.port_wait("${WIN_HOSTNAME}", 445)
+ t.port_wait("${WIN_HOSTNAME}", 139)
t.retry_cmd('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Uadministrator@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
t.cmd_contains("host -t A ${WIN_HOSTNAME}.${LCREALM}.", ['has address'])
t.cmd_contains('bin/smbclient -L ${WIN_HOSTNAME}.${LCREALM} -Utestallowed@${LCREALM}%${PASSWORD1}', ["C$", "IPC$", "Sharename"])
- t.port_wait("${WIN_HOSTNAME}", 23)
child = t.open_telnet("${WIN_HOSTNAME}", "${DOMAIN}\\administrator", "${PASSWORD1}", set_time=True)
child.sendline("net use t: \\\\${HOSTNAME}.${LCREALM}\\test")
child.expect("The command completed successfully")
@@ -337,7 +346,7 @@ def test_dcpromo_rodc(t, vm):
child.expect("was successful")
child.expect("CN=Configuration,${BASEDN}")
child.expect("was successful")
- child.expect("CN=Schema,CN=Configuration,${BASEDN}")
+ child.expect("CN=Configuration,${BASEDN}")
child.expect("was successful")
t.info("Checking if new users are available on windows")
@@ -370,7 +379,6 @@ def test_join_as_dc(t, vm):
t.chdir('${PREFIX}')
t.retry_cmd('bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%${WIN_PASS}', ["C$", "IPC$", "Sharename"])
t.cmd_contains("host -t A ${HOSTNAME}.${WIN_REALM}.", ['has address'])
- t.port_wait("${WIN_HOSTNAME}", 23)
child = t.open_telnet("${WIN_HOSTNAME}", "${WIN_DOMAIN}\\administrator", "${WIN_PASS}", set_time=True)
t.info("Forcing kcc runs, and replication")
@@ -391,7 +399,7 @@ def test_join_as_dc(t, vm):
child.expect("was successful")
child.expect("CN=Configuration,${WIN_BASEDN}")
child.expect("was successful")
- child.expect("CN=Schema,CN=Configuration,${WIN_BASEDN}")
+ child.expect("CN=Configuration,${WIN_BASEDN}")
child.expect("was successful")
t.info("Checking if new users propogate to windows")
@@ -402,8 +410,8 @@ def test_join_as_dc(t, vm):
t.info("Checking if new users on windows propogate to samba")
child.sendline("net user test3 ${PASSWORD3} /add")
child.expect("The command completed successfully")
- t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest2%${PASSWORD2} -k no", ['Sharename', 'IPC'])
- t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest2%${PASSWORD2} -k yes", ['Sharename', 'IPC'])
+ t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k no", ['Sharename', 'IPC'])
+ t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k yes", ['Sharename', 'IPC'])
t.info("Checking propogation of user deletion")
t.run_cmd('bin/samba-tool user delete test2 -Uadministrator@${WIN_REALM}%${WIN_PASS}')
@@ -411,9 +419,9 @@ def test_join_as_dc(t, vm):
child.expect("The command completed successfully")
t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME} -Utest2%${PASSWORD2} -k no", ['LOGON_FAILURE'])
- t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest2%${PASSWORD2} -k no", ['LOGON_FAILURE'])
+ t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k no", ['LOGON_FAILURE'])
t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME} -Utest2%${PASSWORD2} -k yes", ['LOGON_FAILURE'])
- t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest2%${PASSWORD2} -k yes", ['LOGON_FAILURE'])
+ t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k yes", ['LOGON_FAILURE'])
t.vm_poweroff("${WIN_VM}")
@@ -438,10 +446,10 @@ def test_join_as_rodc(t, vm):
t.chdir('${PREFIX}')
t.retry_cmd('bin/smbclient -L ${HOSTNAME}.${WIN_REALM} -Uadministrator@${WIN_REALM}%${WIN_PASS}', ["C$", "IPC$", "Sharename"])
t.cmd_contains("host -t A ${HOSTNAME}.${WIN_REALM}.", ['has address'])
- t.port_wait("${WIN_HOSTNAME}", 23)
child = t.open_telnet("${WIN_HOSTNAME}", "${WIN_DOMAIN}\\administrator", "${WIN_PASS}", set_time=True)
t.info("Forcing kcc runs, and replication")
+ t.run_cmd('bin/samba-tool drs kcc ${HOSTNAME} -Uadministrator@${WIN_REALM}%${WIN_PASS}')
t.run_cmd('bin/samba-tool drs kcc ${WIN_HOSTNAME} -Uadministrator@${WIN_REALM}%${WIN_PASS}')
t.kinit("administrator@${WIN_REALM}", "${WIN_PASS}")
@@ -453,33 +461,36 @@ def test_join_as_rodc(t, vm):
t.info("Checking if showrepl is happy")
child.sendline("repadmin /showrepl")
- child.expect("${WIN_BASEDN}")
- child.expect("was successful")
- child.expect("CN=Configuration,${WIN_BASEDN}")
- child.expect("was successful")
- child.expect("CN=Schema,CN=Configuration,${WIN_BASEDN}")
- child.expect("was successful")
+ child.expect("DSA invocationID")
+
+ t.cmd_contains("bin/samba-tool drs showrepl ${WIN_HOSTNAME}.${WIN_REALM} -k yes",
+ [ "INBOUND NEIGHBORS",
+ "OUTBOUND NEIGHBORS",
+ "${WIN_BASEDN}",
+ "Last attempt .* was successful",
+ "CN=Configuration,${WIN_BASEDN}",
+ "Last attempt .* was successful",
+ "CN=Configuration,${WIN_BASEDN}",
+ "Last attempt .* was successful" ],
+ ordered=True,
+ regex=True)
t.info("Checking if new users on windows propogate to samba")
child.sendline("net user test3 ${PASSWORD3} /add")
child.expect("The command completed successfully")
- t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest2%${PASSWORD2} -k no", ['Sharename', 'IPC'])
- t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest2%${PASSWORD2} -k yes", ['Sharename', 'IPC'])
+ t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k no", ['Sharename', 'IPC'])
+ t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k yes", ['Sharename', 'IPC'])
+ # should this work?
t.info("Checking if new users propogate to windows")
- t.run_cmd('bin/samba-tool newuser test2 ${PASSWORD2}')
- t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME} -Utest2%${PASSWORD2} -k no", ['Sharename', 'Remote IPC'])
- t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME} -Utest2%${PASSWORD2} -k yes", ['Sharename', 'Remote IPC'])
+ t.cmd_contains('bin/samba-tool newuser test2 ${PASSWORD2}', ['No RID Set DN'])
t.info("Checking propogation of user deletion")
- t.run_cmd('bin/samba-tool user delete test2 -Uadministrator@${WIN_REALM}%${WIN_PASS}')
child.sendline("net user test3 /del")
child.expect("The command completed successfully")
- t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME} -Utest2%${PASSWORD2} -k no", ['LOGON_FAILURE'])
- t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest2%${PASSWORD2} -k no", ['LOGON_FAILURE'])
- t.retry_cmd("bin/smbclient -L ${WIN_HOSTNAME} -Utest2%${PASSWORD2} -k yes", ['LOGON_FAILURE'])
- t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest2%${PASSWORD2} -k yes", ['LOGON_FAILURE'])
+ t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k no", ['LOGON_FAILURE'])
+ t.retry_cmd("bin/smbclient -L ${HOSTNAME} -Utest3%${PASSWORD3} -k yes", ['LOGON_FAILURE'])
t.vm_poweroff("${WIN_VM}")
@@ -488,8 +499,12 @@ def test_howto(t):
check_prerequesites(t)
+ # we don't need fsync safety in these tests
+ t.putenv('TDB_NO_FSYNC', '1')
+
if not t.skip("build"):
build_s4(t)
+
if not t.skip("provision"):
provision_s4(t)
@@ -509,49 +524,63 @@ def test_howto(t):
if not t.skip("dyndns"):
test_dyndns(t)
- if not t.skip("windows7"):
+ if t.have_var('WINDOWS7_VM') and not t.skip("windows7"):
run_winjoin(t, "WINDOWS7")
test_winjoin(t, "WINDOWS7")
- if not t.skip("winxp"):
+ if t.have_var('WINXP_VM') and not t.skip("winxp"):
run_winjoin(t, "WINXP")
test_winjoin(t, "WINXP")
- if not t.skip("dcpromo_rodc"):
+ if t.have_var('W2K8R2C_VM') and not t.skip("dcpromo_rodc"):
t.info("Testing w2k8r2 RODC dcpromo")
- run_dcpromo_rodc(t, "WINDOWS_DC2")
- test_dcpromo_rodc(t, "WINDOWS_DC2")
+ run_dcpromo_rodc(t, "W2K8R2C")
+ test_dcpromo_rodc(t, "W2K8R2C")
- if not t.skip("dcpromo_w2k8r2"):
+ if t.have_var('W2K8R2B_VM') and not t.skip("dcpromo_w2k8r2"):
t.info("Testing w2k8r2 dcpromo")
- run_dcpromo(t, "WINDOWS_DC1")
- test_dcpromo(t, "WINDOWS_DC1")
+ run_dcpromo(t, "W2K8R2B")
+ test_dcpromo(t, "W2K8R2B")
- if not t.skip("dcpromo_w2k8"):
+ if t.have_var('W2K8B_VM') and not t.skip("dcpromo_w2k8"):
t.info("Testing w2k8 dcpromo")
- run_dcpromo(t, "WINDOWS_DC5")
- test_dcpromo(t, "WINDOWS_DC5")
+ run_dcpromo(t, "W2K8B")
+ test_dcpromo(t, "W2K8B")
+
+ if t.have_var('W2K3B_VM') and not t.skip("dcpromo_w2k3"):
+ t.info("Testing w2k3 dcpromo")
+ t.info("Changing to 2003 functional level")
+ provision_s4(t, func_level='2003', interfaces='${INTERFACES}')
+ create_shares(t)
+ start_s4(t, interfaces='${INTERFACES}')
+ test_smbclient(t)
+ restart_bind(t)
+ test_dns(t)
+ test_kerberos(t)
+ test_dyndns(t)
+ run_dcpromo(t, "W2K3B")
+ test_dcpromo(t, "W2K3B")
- if not t.skip("join_w2k8r2"):
- join_as_dc(t, "WINDOWS_DC3")
+ if t.have_var('W2K8R2A_VM') and not t.skip("join_w2k8r2"):
+ join_as_dc(t, "W2K8R2A")
create_shares(t)
start_s4(t, interfaces='${INTERFACES}')
test_dyndns(t)
- test_join_as_dc(t, "WINDOWS_DC3")
+ test_join_as_dc(t, "W2K8R2A")
- if not t.skip("join_rodc"):
- join_as_rodc(t, "WINDOWS_DC3")
+ if t.have_var('W2K8R2A_VM') and not t.skip("join_rodc"):
+ join_as_rodc(t, "W2K8R2A")
create_shares(t)
start_s4(t, interfaces='${INTERFACES}')
test_dyndns(t)
- test_join_as_rodc(t, "WINDOWS_DC3")
+ test_join_as_rodc(t, "W2K8R2A")
- if not t.skip("join_w2k3"):
- join_as_dc(t, "WINDOWS_DC4")
+ if t.have_var('W2K3A_VM') and not t.skip("join_w2k3"):
+ join_as_dc(t, "W2K3A")
create_shares(t)
start_s4(t, interfaces='${INTERFACES}')
test_dyndns(t)
- test_join_as_dc(t, "WINDOWS_DC4")
+ test_join_as_dc(t, "W2K3A")
t.info("Howto test: All OK")