1#! /bin/sh
2# $OpenLDAP$
3## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4##
5## Copyright 1998-2021 The OpenLDAP Foundation.
6## All rights reserved.
7##
8## Redistribution and use in source and binary forms, with or without
9## modification, are permitted only as authorized by the OpenLDAP
10## Public License.
11##
12## A copy of this license is available in the file LICENSE in the
13## top-level directory of the distribution or, alternatively, at
14## <http://www.OpenLDAP.org/license.html>.
15
16echo "running defines.sh"
17. $SRCDIR/scripts/defines.sh
18
19mkdir -p $TESTDIR $DBDIR1
20
21echo "Starting slapd on TCP/IP port $PORT..."
22. $CONFFILTER $BACKEND < $SCHEMACONF > $CONF1
23$SLAPD -f $CONF1 -h $URI1 -d $LVL > $LOG1 2>&1 &
24PID=$!
25if test $WAIT != 0 ; then
26    echo PID $PID
27    read foo
28fi
29KILLPIDS="$PID"
30
31sleep 1
32
33echo "Using ldapsearch to check that slapd is running..."
34for i in 0 1 2 3 4 5; do
35	$LDAPSEARCH -s base -b "$MONITOR" -H $URI1 \
36		'objectclass=*' > /dev/null 2>&1
37	RC=$?
38	if test $RC = 0 ; then
39		break
40	fi
41	echo "Waiting 5 seconds for slapd to start..."
42	sleep 5
43done
44
45echo "Using ldapsearch to read connection monitor entries..."
46$LDAPSEARCH -S "" -b "$CONNECTIONSMONITORDN" -H $URI1 \
47	'objectclass=*' \
48	structuralObjectClass entryDN \
49	monitorConnectionProtocol monitorConnectionOpsReceived \
50	monitorConnectionOpsExecuting monitorConnectionOpsPending \
51	monitorConnectionOpsCompleted monitorConnectionGet \
52	monitorConnectionRead monitorConnectionWrite \
53	monitorConnectionMask monitorConnectionAuthzDN \
54	monitorConnectionListener monitorConnectionLocalAddress \
55	> $SEARCHOUT 2>&1
56RC=$?
57
58if test $RC != 0 ; then
59        echo "ldapsearch failed ($RC)!"
60	test $KILLSERVERS != no && kill -HUP $KILLPIDS
61        exit $RC
62fi
63
64# Compare results, ignoring possible difference of IPv4/IPv6 localhost address
65localrewrite='s/=127\.0\.0\.1:/=LOCAL:/; s/=\[::1\]:/=LOCAL:/'
66echo "Filtering ldapsearch results..."
67sed -e "$localrewrite" < $SEARCHOUT | $LDIFFILTER > $SEARCHFLT
68echo "Filtering expected data..."
69. $CONFFILTER < $MONITOROUT1 | sed -e "$localrewrite" | $LDIFFILTER > $LDIFFLT
70echo "Comparing filter output..."
71$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
72
73if test $? != 0 ; then
74        echo "comparison failed - connection monitor output is not correct"
75	test $KILLSERVERS != no && kill -HUP $KILLPIDS
76        exit 1
77fi
78
79echo "Using ldapsearch to read database monitor entries..."
80$LDAPSEARCH -S "" -b "$DATABASESMONITORDN" -H $URI1 \
81	'objectclass=*' \
82	structuralObjectClass entryDN namingContexts readOnly \
83	monitorIsShadow monitorContext \
84	> $SEARCHOUT 2>&1
85RC=$?
86
87if test $RC != 0 ; then
88        echo "ldapsearch failed ($RC)!"
89	test $KILLSERVERS != no && kill -HUP $KILLPIDS
90        exit $RC
91fi
92
93echo "Filtering ldapsearch results..."
94$LDIFFILTER -b monitor < $SEARCHOUT > $SEARCHFLT
95
96echo "Comparing filter output..."
97$CMP $SEARCHFLT $MONITOROUT2 > $CMPOUT
98
99if test $? != 0 ; then
100        echo "comparison failed - database monitor output is not correct"
101	test $KILLSERVERS != no && kill -HUP $KILLPIDS
102        exit 1
103fi
104
105echo "Using ldapsearch to read statistics monitor entries..."
106$LDAPSEARCH -S "" -b "$STATISTICSMONITORDN" -H $URI1 \
107	'(|(cn=Entries)(cn=PDU)(cn=Referrals))' \
108	structuralObjectClass monitorCounter entryDN \
109	> $SEARCHOUT 2>&1
110RC=$?
111
112if test $RC != 0 ; then
113        echo "ldapsearch failed ($RC)!"
114	test $KILLSERVERS != no && kill -HUP $KILLPIDS
115        exit $RC
116fi
117
118echo "Filtering ldapsearch results..."
119$LDIFFILTER -b monitor < $SEARCHOUT > $SEARCHFLT
120
121echo "Comparing filter output..."
122$CMP $SEARCHFLT $MONITOROUT3 > $CMPOUT
123
124if test $? != 0 ; then
125        echo "comparison failed - statistics monitor output is not correct"
126	test $KILLSERVERS != no && kill -HUP $KILLPIDS
127        exit 1
128fi
129
130echo "Using ldapsearch to read operation monitor entries..."
131$LDAPSEARCH -S "" -b "$OPERATIONSMONITORDN" -H $URI1 \
132	'objectclass=*' \
133	structuralObjectClass monitorOpInitiated monitorOpCompleted entryDN \
134	> $SEARCHOUT 2>&1
135RC=$?
136
137if test $RC != 0 ; then
138        echo "ldapsearch failed ($RC)!"
139	test $KILLSERVERS != no && kill -HUP $KILLPIDS
140        exit $RC
141fi
142
143echo "Filtering ldapsearch results..."
144$LDIFFILTER -b monitor < $SEARCHOUT > $SEARCHFLT
145
146echo "Comparing filter output..."
147$CMP $SEARCHFLT $MONITOROUT4 > $CMPOUT
148
149if test $? != 0 ; then
150        echo "comparison failed - operations monitor output is not correct"
151	test $KILLSERVERS != no && kill -HUP $KILLPIDS
152        exit 1
153fi
154
155test $KILLSERVERS != no && kill -HUP $KILLPIDS
156
157echo ">>>>> Test succeeded"
158
159test $KILLSERVERS != no && wait
160
161exit 0
162
163