summaryrefslogtreecommitdiff
path: root/testprogs/blackbox/functionalprep.sh
blob: 9c68047d93637bea77e59725cbb034b74e33d4a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/sh

if [ $# -lt 1 ]; then
	cat <<EOF
Usage: $0 PREFIX
EOF
	exit 1
fi

PREFIX_ABS="$1"
shift 1

failed=0

. $(dirname $0)/subunit.sh
. $(dirname $0)/common_test_fns.inc

RELEASE="release-4-8-0-pre1"
release_dir="$SRCDIR_ABS/source4/selftest/provisions/$RELEASE"

OLD_RELEASE="release-4-1-0rc3"
old_release_dir="$SRCDIR_ABS/source4/selftest/provisions/$OLD_RELEASE"

samba_tdbrestore="tdbrestore"
if [ -x "$BINDIR/tdbrestore" ]; then
	samba_tdbrestore="$BINDIR/tdbrestore"
fi

samba_undump="$SRCDIR_ABS/source4/selftest/provisions/undump.sh"

if [ ! -x $samba_undump ] || [ ! -d $release_dir ] || [ ! -d $old_release_dir ]; then
	subunit_start_test $RELEASE
	subunit_skip_test $RELEASE <<EOF
no test provision
EOF

	subunit_start_test "functional_prep"
	subunit_skip_test "functional_prep" <<EOF
no test provision
EOF

	subunit_start_test "functional_prep_old"
	subunit_skip_test "functional_prep_old" <<EOF
no test provision
EOF

	exit 0
fi

cleanup_output_directories()
{
	remove_directory $PREFIX_ABS/2012R2_schema
	remove_directory $PREFIX_ABS/$RELEASE
	remove_directory $PREFIX_ABS/$OLD_RELEASE
}

undump()
{
	$samba_undump $release_dir $PREFIX_ABS/$RELEASE $samba_tdbrestore
}

undump_old()
{
	$samba_undump $old_release_dir $PREFIX_ABS/$OLD_RELEASE $samba_tdbrestore
}

PROVISION_OPTS="--use-ntvfs --host-ip6=::1 --host-ip=127.0.0.1"

provision_2012r2()
{
	$PYTHON $BINDIR/samba-tool domain provision $PROVISION_OPTS --domain=REALM --realm=REALM.COM --targetdir=$PREFIX_ABS/2012R2_schema --base-schema=2012_R2 --host-name=FLPREP
}

ldapcmp_ignore()
{
	# At some point we will need to ignore, but right now, it should be perfect
	IGNORE_ATTRS=$1
	$PYTHON $BINDIR/samba-tool ldapcmp tdb://$PREFIX_ABS/$2/private/sam.ldb tdb://$PREFIX_ABS/$3/private/sam.ldb --two --skip-missing-dn --filter msDS-SupportedEncryptionTypes,servicePrincipalName
}

ldapcmp()
{
	# Our functional prep doesn't set these values as they were not provided
	# These are XML schema based enumerations which are used for claims
	ldapcmp_ignore "msDS-ClaimPossibleValues" "$RELEASE" "2012R2_schema"
}

functional_prep()
{
	$PYTHON $BINDIR/samba-tool domain functionalprep -H tdb://$PREFIX_ABS/2012R2_schema/private/sam.ldb --function-level=2012_R2
}

functional_prep_old()
{
	$PYTHON $BINDIR/samba-tool domain functionalprep -H tdb://$PREFIX_ABS/$OLD_RELEASE/private/sam.ldb --function-level=2012_R2
}

steal_roles()
{
	# Must steal schema master and infrastructure roles first
	$PYTHON $BINDIR/samba-tool fsmo seize --role=schema -H tdb://$PREFIX_ABS/$OLD_RELEASE/private/sam.ldb --force
	$PYTHON $BINDIR/samba-tool fsmo seize --role=infrastructure -H tdb://$PREFIX_ABS/$OLD_RELEASE/private/sam.ldb --force
}

schema_upgrade()
{
	$PYTHON $BINDIR/samba-tool domain schemaupgrade -H tdb://$PREFIX_ABS/$OLD_RELEASE/private/sam.ldb --schema=2012_R2
}

# double-check we cleaned up from the last test run
cleanup_output_directories

testit $RELEASE undump || failed=$(expr $failed + 1)

# Provision a DC based on 2012R2 schema
testit "provision_2012R2_schema" provision_2012r2 || failed=$(expr $failed + 1)

# Perform functional prep up to 2012 R2 level
testit "functional_prep" functional_prep || failed=$(expr $failed + 1)

# check that the databases are now the same
testit "check_databases_same" ldapcmp || failed=$(expr $failed + 1)

testit $OLD_RELEASE undump_old || failed=$(expr $failed + 1)

testit "steal_roles" steal_roles || failed=$(expr $failed + 1)

testit "schema_upgrade" schema_upgrade || failed=$(expr $failed + 1)

testit "functional_prep_old" functional_prep_old || failed=$(expr $failed + 1)

cleanup_output_directories

exit $failed