[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