[SCM] Samba Shared Repository - branch v4-0-test updated - release-4-0-0alpha2-760-g5d4396a

Jelmer Vernooij jelmer at samba.org
Tue Feb 12 00:53:09 GMT 2008


The branch, v4-0-test has been updated
       via  5d4396ae232525be139a91b36f8c7177e46627ae (commit)
       via  13deb25214b2711836e243a87166b63a4a87270b (commit)
       via  42466d960c86b692ef5e03c045ba24591c5c6f84 (commit)
      from  7b93e43dad55454e9107a38e67764e08f51392d3 (commit)

http://gitweb.samba.org/?samba.git;a=shortlog;h=v4-0-test


- Log -----------------------------------------------------------------
commit 5d4396ae232525be139a91b36f8c7177e46627ae
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Tue Feb 12 01:52:07 2008 +0100

    Mark the reprovision test as known failing for now.

commit 13deb25214b2711836e243a87166b63a4a87270b
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Tue Feb 12 01:42:58 2008 +0100

    Reintroduce samba3sam EJS test, at least until the Python test is ready.

commit 42466d960c86b692ef5e03c045ba24591c5c6f84
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Tue Feb 12 01:39:31 2008 +0100

    Add blackbox test for provisioning code to make sure it can be run more than once in a row.

-----------------------------------------------------------------------

Summary of changes:
 source/samba4-knownfail                  |    2 +-
 source/selftest/samba4_tests.sh          |    5 +-
 source/setup/tests/blackbox_provision.sh |   39 +
 testprogs/ejs/samba3sam.js               | 1255 ++++++++++++++++++++++++++++++
 4 files changed, 1299 insertions(+), 2 deletions(-)
 create mode 100755 source/setup/tests/blackbox_provision.sh
 create mode 100644 testprogs/ejs/samba3sam.js


Changeset truncated at 500 lines:

diff --git a/source/samba4-knownfail b/source/samba4-knownfail
index cf5f97c..ab03145 100644
--- a/source/samba4-knownfail
+++ b/source/samba4-knownfail
@@ -35,4 +35,4 @@ BASE-CHARSET.*.Testing partial surrogate
 .*NET-API-DELSHARE.*				# DelShare isn't implemented yet
 RAP.*netservergetinfo
 kinit with pkinit # fails with: salt type 3 not supported
-
+samba4.blackbox.provision.py.reprovision # Fails with entry already exists
diff --git a/source/selftest/samba4_tests.sh b/source/selftest/samba4_tests.sh
index fba9e86..c90373e 100755
--- a/source/selftest/samba4_tests.sh
+++ b/source/selftest/samba4_tests.sh
@@ -262,6 +262,8 @@ done
 
 DATADIR=$samba4srcdir/../testdata
 
+plantest "js.samba3sam" none $SCRIPTDIR/samba3sam.js $CONFIGURATION `pwd` $DATADIR/samba3/
+
 # Domain Member Tests
 
 plantest "RPC-ECHO against member server with local creds" member $VALGRIND $smb4torture ncacn_np:"\$NETBIOSNAME" -U"\$NETBIOSNAME/\$USERNAME"%"\$PASSWORD" RPC-ECHO "$*"
@@ -327,5 +329,6 @@ then
 	rm -rf $PREFIX/upgrade
 	plantest "blackbox.upgrade" none $PYTHON setup/upgrade.py $CONFIGURATION --targetdir=$PREFIX/upgrade ../testdata/samba3 ../testdata/samba3/smb.conf
 	rm -rf $PREFIX/provision
-	plantest "blackbox.provision.py" none $PYTHON ./setup/provision.py $CONFIGURATION --domain=FOO --realm=foo.example.com --targetdir=$PREFIX/provision
+	mkdir $PREFIX/provision
+	plantest "blackbox.provision.py" none PYTHON="$PYTHON" $samba4srcdir/setup/tests/blackbox_provision.sh "$PREFIX/provision" "$CONFIGURATION" 
 fi
diff --git a/source/setup/tests/blackbox_provision.sh b/source/setup/tests/blackbox_provision.sh
new file mode 100755
index 0000000..57b11ea
--- /dev/null
+++ b/source/setup/tests/blackbox_provision.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+if [ $# -lt 2 ]; then
+cat <<EOF
+Usage: blackbox_provision.sh PREFIX CONFIGURATION
+EOF
+exit 1;
+fi
+
+PREFIX="$1"
+CONFIGURATION="$2"
+shift 2
+
+testit() {
+	name="$1"
+	shift
+	cmdline="$*"
+	echo "test: $name"
+	$cmdline
+	status=$?
+	if [ x$status = x0 ]; then
+		echo "success: $name"
+	else
+		echo "failure: $name"
+		failed=`expr $failed + 1`
+	fi
+	return $status
+}
+
+testit "simple" $PYTHON ./setup/provision.py $CONFIGURATION --domain=FOO --realm=foo.example.com --targetdir=$PREFIX/simple
+
+reprovision() {
+	$PYTHON ./setup/provision.py $CONFIGURATION --domain=FOO --realm=foo.example.com --targetdir="$PREFIX/reprovision"
+	$PYTHON ./setup/provision.py $CONFIGURATION --domain=FOO --realm=foo.example.com --targetdir="$PREFIX/reprovision"
+}
+
+testit "reprovision" reprovision
+
+exit $failed
diff --git a/testprogs/ejs/samba3sam.js b/testprogs/ejs/samba3sam.js
new file mode 100644
index 0000000..e5639b8
--- /dev/null
+++ b/testprogs/ejs/samba3sam.js
@@ -0,0 +1,1255 @@
+#!/usr/bin/env smbscript
+/*
+  (C) Jelmer Vernooij <jelmer at samba.org> 2005
+  (C) Martin Kuehl <mkhl at samba.org> 2006
+  Published under the GNU GPL
+  Sponsored by Google Summer of Code
+ */
+
+var sys;
+var options = GetOptions(ARGV, "POPT_AUTOHELP", "POPT_COMMON_SAMBA");
+if (options == undefined) {
+	println("Failed to parse options");
+	return -1;
+}
+
+libinclude("base.js");
+
+if (options.ARGV.length != 2) {
+	println("Usage: samba3sam.js <TESTDIR> <DATADIR>");
+	return -1;
+}
+
+var prefix = options.ARGV[0];
+var datadir = options.ARGV[1];
+
+function setup_data(obj, ldif)
+{
+	assert(ldif != undefined);
+	ldif = substitute_var(ldif, obj);
+	assert(ldif != undefined);
+	var ok = obj.db.add(ldif);
+	assert(ok.error == 0);
+}
+
+function setup_modules(ldb, s3, s4, ldif)
+{
+	assert(ldif != undefined);
+	ldif = substitute_var(ldif, s4);
+	assert(ldif != undefined);
+	var ok = ldb.add(ldif);
+	assert(ok.error == 0);
+
+	var ldif = "
+dn: @MAP=samba3sam
+ at FROM: " + s4.BASEDN + "
+ at TO: sambaDomainName=TESTS," + s3.BASEDN + "
+
+dn: @MODULES
+ at LIST: rootdse,paged_results,server_sort,extended_dn,asq,samldb,password_hash,operational,objectguid,rdn_name,samba3sam,partition
+
+dn: @PARTITION
+partition: " + s4.BASEDN + ":" + s4.url + "
+partition: " + s3.BASEDN + ":" + s3.url + "
+replicateEntries: @SUBCLASSES
+replicateEntries: @ATTRIBUTES
+replicateEntries: @INDEXLIST
+";
+	var ok = ldb.add(ldif);
+	assert(ok.error == 0);
+}
+
+function test_s3sam_search(ldb)
+{
+	println("Looking up by non-mapped attribute");
+	var msg = ldb.search("(cn=Administrator)");
+	assert(msg.error == 0);
+	assert(msg.msgs.length == 1);
+	assert(msg.msgs[0].cn == "Administrator");
+
+	println("Looking up by mapped attribute");
+	var msg = ldb.search("(name=Backup Operators)");
+	assert(msg.error == 0);
+	assert(msg.msgs.length == 1);
+	assert(msg.msgs[0].name == "Backup Operators");
+
+	println("Looking up by old name of renamed attribute");
+	var msg = ldb.search("(displayName=Backup Operators)");
+	assert(msg.msgs.length == 0);
+
+	println("Looking up mapped entry containing SID");
+	var msg = ldb.search("(cn=Replicator)");
+	assert(msg.error == 0);
+	assert(msg.msgs.length == 1);
+	println(msg.msgs[0].dn);
+	assert(msg.msgs[0].dn == "cn=Replicator,ou=Groups,dc=vernstok,dc=nl");
+	assert(msg.msgs[0].objectSid == "S-1-5-21-4231626423-2410014848-2360679739-552");
+
+	println("Checking mapping of objectClass");
+	var oc = msg.msgs[0].objectClass;
+	assert(oc != undefined);
+	for (var i in oc) {
+		assert(oc[i] == "posixGroup" || oc[i] == "group");
+	}
+
+	println("Looking up by objectClass");
+	var msg = ldb.search("(|(objectClass=user)(cn=Administrator))");
+	assert(msg.error == 0);
+	assert(msg.msgs.length == 2);
+	for (var i = 0; i < msg.msgs.length; i++) {
+		assert((msg.msgs[i].dn == "unixName=Administrator,ou=Users,dc=vernstok,dc=nl") ||
+		       (msg.msgs[i].dn == "unixName=nobody,ou=Users,dc=vernstok,dc=nl"));
+	}
+}
+
+function test_s3sam_modify(ldb, s3)
+{
+	var msg, ok;
+	println("Adding a record that will be fallbacked");
+	ok = ldb.add("
+dn: cn=Foo
+foo: bar
+blah: Blie
+cn: Foo
+showInAdvancedViewOnly: TRUE
+");
+	if (ok.error != 0) {
+		println(ok.errstr);
+		assert(ok.error == 0);
+	}
+
+	println("Checking for existence of record (local)");
+	/* TODO: This record must be searched in the local database, which is currently only supported for base searches
+	 * msg = ldb.search("(cn=Foo)", new Array('foo','blah','cn','showInAdvancedViewOnly'));
+	 * TODO: Actually, this version should work as well but doesn't...
+	 * 
+	 */
+	var attrs =  new Array('foo','blah','cn','showInAdvancedViewOnly');
+	msg = ldb.search("(cn=Foo)", "cn=Foo", ldb.LDB_SCOPE_BASE, attrs);
+	assert(msg.error == 0);
+	assert(msg.msgs.length == 1);
+	assert(msg.msgs[0].showInAdvancedViewOnly == "TRUE");
+	assert(msg.msgs[0].foo == "bar");
+	assert(msg.msgs[0].blah == "Blie");
+
+	println("Adding record that will be mapped");
+	ok = ldb.add("
+dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl
+objectClass: user
+unixName: bin
+sambaUnicodePwd: geheim
+cn: Niemand
+");
+	if (ok.error != 0) {
+		println(ok.errstr);
+		assert(ok.error == 0);
+	}
+	assert(ok.error == 0);
+
+	println("Checking for existence of record (remote)");
+	msg = ldb.search("(unixName=bin)", new Array('unixName','cn','dn', 'sambaUnicodePwd'));
+	assert(msg.error == 0);
+	assert(msg.msgs.length == 1);
+	assert(msg.msgs[0].cn == "Niemand"); 
+	assert(msg.msgs[0].sambaUnicodePwd == "geheim");
+
+	println("Checking for existence of record (local && remote)");
+	msg = ldb.search("(&(unixName=bin)(sambaUnicodePwd=geheim))", new Array('unixName','cn','dn', 'sambaUnicodePwd'));
+	assert(msg.error == 0);
+	assert(msg.msgs.length == 1);		// TODO: should check with more records
+	assert(msg.msgs[0].cn == "Niemand");
+	assert(msg.msgs[0].unixName == "bin");
+	assert(msg.msgs[0].sambaUnicodePwd == "geheim");
+
+	println("Checking for existence of record (local || remote)");
+	msg = ldb.search("(|(unixName=bin)(sambaUnicodePwd=geheim))", new Array('unixName','cn','dn', 'sambaUnicodePwd'));
+	println("got " + msg.msgs.length + " replies");
+	assert(msg.error == 0);
+	assert(msg.msgs.length == 1);		// TODO: should check with more records
+	assert(msg.msgs[0].cn == "Niemand");
+	assert(msg.msgs[0].unixName == "bin" || msg.msgs[0].sambaUnicodePwd == "geheim");
+
+	println("Checking for data in destination database");
+	msg = s3.db.search("(cn=Niemand)");
+	assert(msg.error == 0);
+	assert(msg.msgs.length >= 1);
+	assert(msg.msgs[0].sambaSID == "S-1-5-21-4231626423-2410014848-2360679739-2001");
+	assert(msg.msgs[0].displayName == "Niemand");
+
+	println("Adding attribute...");
+	ok = ldb.modify("
+dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl
+changetype: modify
+add: description
+description: Blah
+");
+	if (ok.error != 0) {
+		println(ok.errstr);
+		assert(ok.error == 0);
+	}
+	assert(ok.error == 0);
+
+	println("Checking whether changes are still there...");
+	msg = ldb.search("(cn=Niemand)");
+	assert(msg.error == 0);
+	assert(msg.msgs.length >= 1);
+	assert(msg.msgs[0].cn == "Niemand");
+	assert(msg.msgs[0].description == "Blah");
+
+	println("Modifying attribute...");
+	ok = ldb.modify("
+dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl
+changetype: modify
+replace: description
+description: Blie
+");
+		if (ok.error != 0) {
+			println(ok.errstr);
+			assert(ok.error == 0);
+		}
+	assert(ok.error == 0);
+
+	println("Checking whether changes are still there...");
+	msg = ldb.search("(cn=Niemand)");
+	assert(msg.error == 0);
+	assert(msg.msgs.length >= 1);
+	assert(msg.msgs[0].description == "Blie");
+
+	println("Deleting attribute...");
+	ok = ldb.modify("
+dn: cn=Niemand,cn=Users,dc=vernstok,dc=nl
+changetype: modify
+delete: description
+");
+	if (ok.error != 0) {
+		println(ok.errstr);
+		assert(ok.error == 0);
+	}
+	assert(ok.error == 0);
+
+	println("Checking whether changes are no longer there...");
+	msg = ldb.search("(cn=Niemand)");
+	assert(msg.error == 0);
+	assert(msg.msgs.length >= 1);
+	assert(msg.msgs[0].description == undefined);
+
+	println("Renaming record...");
+	ok = ldb.rename("cn=Niemand,cn=Users,dc=vernstok,dc=nl", "cn=Niemand2,cn=Users,dc=vernstok,dc=nl");
+	assert(ok.error == 0);
+
+	println("Checking whether DN has changed...");
+	msg = ldb.search("(cn=Niemand2)");
+	assert(msg.error == 0);
+	assert(msg.msgs.length == 1);
+	assert(msg.msgs[0].dn == "cn=Niemand2,cn=Users,dc=vernstok,dc=nl");
+
+	println("Deleting record...");
+	ok = ldb.del("cn=Niemand2,cn=Users,dc=vernstok,dc=nl");
+	if (ok.error != 0) {
+		println(ok.errstr);
+		assert(ok.error == 0);
+	}
+
+	println("Checking whether record is gone...");
+	msg = ldb.search("(cn=Niemand2)");
+	assert(msg.error == 0);
+	assert(msg.msgs.length == 0);
+}
+
+function test_map_search(ldb, s3, s4)
+{
+	println("Running search tests on mapped data");
+	var res;
+	var dn;
+	var attrs;
+
+
+	var ldif = "
+dn: " + "sambaDomainName=TESTS," + s3.BASEDN + "
+objectclass: sambaDomain
+objectclass: top
+sambaSID: S-1-5-21-4231626423-2410014848-2360679739
+sambaNextRid: 2000
+sambaDomainName: TESTS"
+	ldif = substitute_var(ldif, s3);
+	assert(ldif != undefined);
+	var ok = s3.db.add(ldif);
+	assert(ok.error == 0);
+
+	printf("Add a set of split records");
+	var ldif = "
+dn: " + s4.dn("cn=X") + "
+objectClass: user
+cn: X
+codePage: x
+revision: x
+dnsHostName: x
+nextRid: y
+lastLogon: x
+description: x
+objectSid: S-1-5-21-4231626423-2410014848-2360679739-552
+primaryGroupID: 1-5-21-4231626423-2410014848-2360679739-512
+
+dn: " + s4.dn("cn=Y") + "
+objectClass: top
+cn: Y
+codePage: x
+revision: x
+dnsHostName: y
+nextRid: y
+lastLogon: y
+description: x
+
+dn: " + s4.dn("cn=Z") + "
+objectClass: top
+cn: Z
+codePage: x
+revision: y
+dnsHostName: z
+nextRid: y
+lastLogon: z
+description: y
+";
+
+	ldif = substitute_var(ldif, s4);
+	assert(ldif != undefined);
+	var ok = ldb.add(ldif);
+	if (ok.error != 0) {
+		println(ok.errstr);
+		assert(ok.error == 0);
+	}
+
+	println("Add a set of remote records");
+
+	var ldif = "
+dn: " + s3.dn("cn=A") + "
+objectClass: posixAccount
+cn: A
+sambaNextRid: x
+sambaBadPasswordCount: x
+sambaLogonTime: x
+description: x
+sambaSID: S-1-5-21-4231626423-2410014848-2360679739-552
+sambaPrimaryGroupSID: S-1-5-21-4231626423-2410014848-2360679739-512
+
+dn: " + s3.dn("cn=B") + "
+objectClass: top
+cn:B
+sambaNextRid: x
+sambaBadPasswordCount: x
+sambaLogonTime: y
+description: x
+
+dn: " + s3.dn("cn=C") + "
+objectClass: top
+cn: C
+sambaNextRid: x
+sambaBadPasswordCount: y
+sambaLogonTime: z
+description: y
+";
+	ldif = substitute_var(ldif, s3);
+	assert(ldif != undefined);
+	var ok = s3.db.add(ldif);
+	assert(ok.error == 0);
+
+	println("Testing search by DN");
+
+	/* Search remote record by local DN */
+	dn = s4.dn("cn=A");
+	attrs = new Array("dnsHostName", "lastLogon");
+	res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
+	assert(res.error == 0);
+	assert(res.msgs.length == 1);
+	assert(res.msgs[0].dn == dn);
+	assert(res.msgs[0].dnsHostName == undefined);
+	assert(res.msgs[0].lastLogon == "x");
+
+	/* Search remote record by remote DN */
+	dn = s3.dn("cn=A");
+	attrs = new Array("dnsHostName", "lastLogon", "sambaLogonTime");
+	res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs);
+	assert(res.error == 0);
+	assert(res.msgs.length == 1);
+	assert(res.msgs[0].dn == dn);
+	assert(res.msgs[0].dnsHostName == undefined);
+	assert(res.msgs[0].lastLogon == undefined);
+	assert(res.msgs[0].sambaLogonTime == "x");
+
+	/* Search split record by local DN */
+	dn = s4.dn("cn=X");
+	attrs = new Array("dnsHostName", "lastLogon");
+	res = ldb.search("", dn, ldb.SCOPE_BASE, attrs);
+	assert(res.error == 0);
+	assert(res.msgs.length == 1);
+	assert(res.msgs[0].dn == dn);
+	assert(res.msgs[0].dnsHostName == "x");
+	assert(res.msgs[0].lastLogon == "x");
+
+	/* Search split record by remote DN */
+	dn = s3.dn("cn=X");
+	attrs = new Array("dnsHostName", "lastLogon", "sambaLogonTime");
+	res = s3.db.search("", dn, ldb.SCOPE_BASE, attrs);
+	assert(res.error == 0);
+	assert(res.msgs.length == 1);
+	assert(res.msgs[0].dn == dn);
+	assert(res.msgs[0].dnsHostName == undefined);
+	assert(res.msgs[0].lastLogon == undefined);
+	assert(res.msgs[0].sambaLogonTime == "x");
+
+	println("Testing search by attribute");
+
+	/* Search by ignored attribute */
+	attrs = new Array("dnsHostName", "lastLogon");
+	res = ldb.search("(revision=x)", NULL, ldb. SCOPE_DEFAULT, attrs);
+	assert(res.error == 0);
+	assert(res.msgs.length == 2);
+	assert(res.msgs[0].dn == s4.dn("cn=Y"));
+	assert(res.msgs[0].dnsHostName == "y");
+	assert(res.msgs[0].lastLogon == "y");
+	assert(res.msgs[1].dn == s4.dn("cn=X"));
+	assert(res.msgs[1].dnsHostName == "x");
+	assert(res.msgs[1].lastLogon == "x");
+
+	/* Search by kept attribute */
+	attrs = new Array("dnsHostName", "lastLogon");
+	res = ldb.search("(description=y)", NULL, ldb. SCOPE_DEFAULT, attrs);
+	assert(res.error == 0);
+	assert(res.msgs.length == 2);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list