Clean up test build rules
[freeradius.git] / src / tests / Makefile
index 91bfd53..b32d9b0 100644 (file)
+# -*- text -*-
+##
+## Makefile -- Build and run tests for the server.
+##
+##     http://www.freeradius.org/
+##     $Id$
+##
+#
 include ../../Make.inc
 
-TESTS  = user_password chap mschapv1 digest-auth-MD5 digest-auth-int \
-       digest-auth-noalgo digest-md5-sess digest-auth-MD5_Sess \
-       digest-auth_int-MD5 digest-auth_int-MD5_Sess digest-auth_int-noalgo \
-       example.com stripped.example.com
+BUILD_PATH := $(top_builddir)/build
+TEST_PATH := $(top_builddir)/src/tests
+BIN_PATH := $(BUILD_PATH)/bin/local
+LIB_PATH := $(BUILD_PATH)/lib/.libs/
+DYLD_LIBRARY_PATH := $(DYLD_LIBRARY_PATH):$(LIB_PATH)
+
+export DYLD_LIBRARY_PATH
+
+RADDB_PATH := $(top_builddir)/raddb
+
+TESTS  = user_password chap mschapv1 digest-01/digest* test.example.com \
+       wimax
+
+PORT    = 12340
+#PORT   = 1812
+ACCTPORT = $(shell expr $(PORT) + 1)
+
+#      example.com stripped.example.com
+
+EAPOL_TEST = eapol_test
 
-EAPTESTS = eapmd5.conf
+EAP_TLS_TESTS = eap-ttls-pap.conf eap-mschapv2.conf \
+             eap-ttls-mschapv2.conf peap-mschapv2.conf
 
-.PHONY: all
+SECRET = testing123
+
+.PHONY: all eap dictionary clean
 
 #
 #      Build the directory for testing the server
 #
 all: tests
 
-#
-#  Copy all of the files in a portable way
-#
-#  Then, over-write the radiusd.conf && dictionary files with
-#  entries that point to this directory, and to the modules in
-#  the local build directory.
-#
-raddb/.raddb:
-       rm -rf raddb
-       @(cd ../..; tar -cf - raddb) | tar -xf -
-       @echo '$$INCLUDE ' $(top_builddir)/src/tests/dictionary.test > raddb/dictionary
-       @echo '$$INCLUDE ' $(top_builddir)/share/dictionary >> raddb/dictionary
-       @echo "raddbdir = " $(top_builddir)/src/tests/raddb > raddb/radiusd.conf
-       @echo "libdir = " $(top_builddir)/src/modules/lib >> raddb/radiusd.conf
-       @echo '$$INCLUDE ' $(top_builddir)/raddb/radiusd.conf >> raddb/radiusd.conf
-       @cp proxy.conf raddb
-       @touch raddb/.raddb
-
-tests: raddb/.raddb
+clean:
+       @rm -f $(RADDB_PATH)/test.conf test.conf dictionary
+
+dictionary:
+       @echo "# test dictionary not install.  Delete at any time." > dictionary
+       @echo '$$INCLUDE ' $(top_builddir)/share/dictionary >> dictionary
+       @echo '$$INCLUDE ' $(top_builddir)/src/tests/dictionary.test >> dictionary
+
+test.conf: dictionary
+       @echo "# test configuration file.  Do not install.  Delete at any time." > test.conf
+       @echo "libdir =" $(LIB_PATH) >> test.conf
+       @echo "testdir =" $(TEST_PATH) >> test.conf
+       @echo 'dictionary = $${testdir}' >> test.conf
+       @echo 'logdir = $${testdir}' >> test.conf
+       @echo 'radacctdir = $${testdir}' >> test.conf
+       @echo 'pidfile = $${testdir}/radiusd.pid' >> test.conf
+       @echo '$$INCLUDE radiusd.conf' >> test.conf
+       @echo '$$INCLUDE $${testdir}/config/' >> test.conf
+
+radiusd.pid: $(RADDB_PATH)/test.conf test.conf
+       @$(BIN_PATH)/radiusd -txxl $(TEST_PATH)/radius.log -md $(RADDB_PATH) -n test -i 127.0.0.1 -p $(PORT) || tail -n 20 $(TEST_PATH)/radius.log
+
+# We can't make this depend on radiusd.pid, because then make will create
+# radiusd.pid when we make radiusd.kill, which we don't want.
+.PHONY: radiusd.kill
+radiusd.kill:
+       @if [ -f radiusd.pid ]; then \
+               (kill -TERM `cat radiusd.pid` >/dev/null 2>&1) || exit 0; \
+       fi
+       @rm -f radiusd.pid
+
+#  Link from the main database directory to here
+$(RADDB_PATH)/test.conf: test.conf
+       @[ -f $(RADDB_PATH)/test.conf ] || ln -s ../src/tests/test.conf $(RADDB_PATH)/
+
+# kill the server (if it's running)
+# start the server
+# run the tests (ignoring any failures)
+# kill the server
+# remove the changes to raddb/
+tests: $(RADDB_PATH)/test.conf radiusd.kill
        @chmod a+x runtests.sh
-       ./runtests.sh $(TESTS)
+       @rm -f radius.log
+       @$(MAKE) radiusd.pid
+       @BIN_PATH="$(BIN_PATH)" PORT="$(PORT)" ./runtests.sh $(TESTS)
+       @$(MAKE) radiusd.kill
+       @rm -f $(RADDB_PATH)/test.conf
+
+tests.eap: $(RADDB_PATH)/test.conf radiusd.kill
+       @chmod a+x runtests.sh
+       @rm -f radius.log
+       @$(MAKE) radiusd.pid
+       @$(MAKE) eap
+       @$(MAKE) radiusd.kill
+       @rm -f $(RADDB_PATH)/test.conf
+
+eap: $(EAP_TLS_TESTS)
+       for x in $(EAP_TLS_TESTS); do \
+               $(EAPOL_TEST) -c $$x -p $(PORT) -s $(SECRET); \
+       done
+
+md5:
+       $(EAPOL_TEST) -c eap-md5.conf -s $(SECRET) 
+
+tls:
+       $(EAPOL_TEST) -c eap-ttls-tls.conf -s $(SECRET)
+
+ttls:
+       $(EAPOL_TEST) -c eap-ttls-pap.conf -s $(SECRET)
+
+peap:
+       $(EAPOL_TEST) -c peap-mschapv2.conf -s $(SECRET)
+
+leap:
+       $(EAPOL_TEST) -c leap.conf -s $(SECRET)
+
+ATTRS  := rfc.txt errors.txt extended.txt lucent.txt wimax.txt