summaryrefslogtreecommitdiffstats
path: root/security/nss/tests/remote/Makefile
blob: 5b0d5ec9ed41c5c26613bfc1ccfe4796345ec4b6 (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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#! gmake
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

#######################################################################
# (1) Include initial platform-independent assignments (MANDATORY).   #
#######################################################################

include manifest.mn

#######################################################################
# (2) Include "global" configuration information. (OPTIONAL)          #
#######################################################################

include $(CORE_DEPTH)/coreconf/config.mk

#######################################################################
# (3) Include "component" configuration information. (OPTIONAL)       #
#######################################################################



#######################################################################
# (4) Include "local" platform-dependent assignments (OPTIONAL).      #
#######################################################################



#######################################################################
# (5) Execute "global" rules. (OPTIONAL)                              #
#######################################################################

include $(CORE_DEPTH)/coreconf/rules.mk

#######################################################################
# (6) Execute "component" rules. (OPTIONAL)                           #
#######################################################################



#######################################################################
# (7) Execute "local" rules. (OPTIONAL).                              #
#######################################################################

TESTPACKAGE="nss-$(OS_TARGET)$(CPU_TAG).tgz"
RTSH=$(DIST)/../../runtests.sh
PCFG=$(DIST)/platform.cfg


#Hint: In order to test the Makefiles without running the tests, use:
#      make NSS_CYCLES="standard" NSS_TESTS="dummy"

ifeq ($(OS_TARGET),Android)
TEST_SHELL?=$$HOME/bin/sh
ANDROID_PORT?="2222"
#Define the subset of tests that is known to work on Android
NSS_CYCLES?="standard pkix sharedb"
NSS_TESTS?="cipher lowhash libpkix cert dbtests tools sdr crmf smime ssl ocsp merge pkits chains"
NSS_SSL_TESTS?="crl normal_normal iopr"
NSS_SSL_RUN?="cov auth stress"
else
TEST_SHELL?="/bin/sh"
endif

# Create a package for test execution on a separate system.
package_for_testing:
	echo "export OBJDIR=$(OBJDIR_NAME)"     > $(PCFG)
	echo "export OS_ARCH=$(OS_ARCH)"       >> $(PCFG)
	echo "export OS_TARGET=$(OS_TARGET)"   >> $(PCFG)
	echo "export DLL_PREFIX=$(DLL_PREFIX)" >> $(PCFG)
	echo "export DLL_SUFFIX=$(DLL_SUFFIX)" >> $(PCFG)
	echo 'echo "set HOST and DOMSUF if your system is not registered in DNS"' > $(RTSH)
	cat $(PCFG)                                  >> $(RTSH)
	echo 'export NSS_TESTS=$(NSS_TESTS)'         >> $(RTSH)
	echo 'export NSS_SSL_TESTS=$(NSS_SSL_TESTS)' >> $(RTSH)
	echo 'export NSS_SSL_RUN=$(NSS_SSL_RUN)'     >> $(RTSH)
	echo 'export NSS_CYCLES=$(NSS_CYCLES)'       >> $(RTSH)
	echo 'export USE_64=$(USE_64)'               >> $(RTSH)
	echo 'export BUILD_OPT=$(BUILD_OPT)'         >> $(RTSH)
	echo 'export PKITS_DATA=$(PKITS_DATA)'       >> $(RTSH)
	echo 'export NSPR_LOG_MODULES=$(NSPR_LOG_MODULES)'                   >> $(RTSH)
ifeq ($(OS_TARGET),Android)
	# Android doesn't support FIPS tests, because
	# dladdr does not return a full path for implicitly loaded libraries
	echo "export NSS_TEST_DISABLE_FIPS=1" >> $(DIST)/platform.cfg
endif
ifeq ($(CROSS_COMPILE),1)
# execute signing on test system
	echo 'export DIST=$${HOME}/nsstest/dist/'           >> $(RTSH)
	echo 'export NSPR_LIB_DIR=$${DIST}/$${OBJDIR}/lib/' >> $(RTSH)
	echo 'echo "signing"'                               >> $(RTSH)
# work around a bug in Android ash that has a corrupted work directory after login
	echo 'cd $${HOME}/nsstest'                          >> $(RTSH)
	echo 'cd nss/cmd/shlibsign'                         >> $(RTSH)
	echo '$(TEST_SHELL) ./sign.sh $${DIST}/$${OBJDIR}/ $${DIST}/$${OBJDIR}/bin $${OS_TARGET} $${NSPR_LIB_DIR} $${NSPR_LIB_DIR}$${DLL_PREFIX}freebl3.$${DLL_SUFFIX}'  >> $(RTSH)
	echo '$(TEST_SHELL) ./sign.sh $${DIST}/$${OBJDIR}/ $${DIST}/$${OBJDIR}/bin $${OS_TARGET} $${NSPR_LIB_DIR} $${NSPR_LIB_DIR}$${DLL_PREFIX}softokn3.$${DLL_SUFFIX}' >> $(RTSH)
	echo '$(TEST_SHELL) ./sign.sh $${DIST}/$${OBJDIR}/ $${DIST}/$${OBJDIR}/bin $${OS_TARGET} $${NSPR_LIB_DIR} $${NSPR_LIB_DIR}$${DLL_PREFIX}nssdbm3.$${DLL_SUFFIX}'  >> $(RTSH)
ifneq ($(OS_TARGET),Android)
# Android's ash doesn't support "export -n" yet
	echo 'export -n DIST'                          >> $(RTSH)
	echo 'export -n NSPR_LIB_DIR'                  >> $(RTSH)
endif
	echo 'cd ../../../'                            >> $(RTSH)
endif
	echo 'rm -rf tests_results'                    >> $(RTSH)
	echo 'echo "running tests"'                    >> $(RTSH)
	echo 'cd nss/tests'                            >> $(RTSH)
	# We require progress indication on stdout while running the tests (to avoid timeouts).
	set -o pipefail
	echo '$(TEST_SHELL) ./all.sh | tee ../../logfile 2>&1 |grep ": #"'          >> $(RTSH)
	RETVAL=$?
	echo 'cd ../../'                               >> $(RTSH)
	# dump test summary from end of logfile
	echo 'echo "=========="; tail -100 logfile'    >> $(RTSH)
	echo 'tar czf tests_results.tgz tests_results'                              >> $(RTSH)
	echo 'echo "created tests_results.tgz"'                                     >> $(RTSH)
	echo 'echo "results are in directory: "`ls -1d tests_results/security/*.1`' >> $(RTSH)
	echo 'echo exit status: $${RETVAL}'                                         >> $(RTSH)
	echo 'exit $${RETVAL}'                                                      >> $(RTSH)
	rm -f $(TESTPACKAGE)
	(cd $(DIST)/../.. ; tar czhf dist/$(TESTPACKAGE) runtests.sh dist/$(OBJDIR_NAME) dist/public nss/tests nss/cmd/bltest/tests nss/cmd/pk11gcmtest/tests nss/cmd/shlibsign; echo "created "`pwd`"/dist/$(TESTPACKAGE)" )

android_run_tests:
	ssh -p $(ANDROID_PORT) -o CheckHostIP=no $(ANDROID_ADDR)  'pwd; cd; pwd; cd nsstest; export PATH=$$HOME/bin:$$PATH ; $(TEST_SHELL) runtests.sh'

android_install:
	rm -f $(DIST)/android.sftp
	echo '-mkdir nsstest' > $(DIST)/android.sftp
	echo '-rm nsstest/$(TESTPACKAGE)' >> $(DIST)/android.sftp
	echo 'progress' >> $(DIST)/android.sftp
	echo 'put $(DIST)/../$(TESTPACKAGE) nsstest' >> $(DIST)/android.sftp
	sftp -o Port=$(ANDROID_PORT) -o CheckHostIP=no -b $(DIST)/android.sftp $(ANDROID_ADDR)
	ssh -p $(ANDROID_PORT) -o CheckHostIP=no $(ANDROID_ADDR)  'cd nsstest ; $$HOME/bin/rm -rf logfile runtests.sh dist security tests_results tests_results.tgz;  $$HOME/bin/tar xzf $(TESTPACKAGE)'

WORKDIR="$(DIST)/../../"
RESULTSPACKAGE=tests_results.tgz
android_get_result:
	rm -f $(WORKDIR)/result.sftp $(WORKDIR)/$(RESULTSPACKAGE)
	echo "progress" > $(WORKDIR)/result.sftp
	echo 'get nsstest/$(RESULTSPACKAGE) $(WORKDIR)' >> $(WORKDIR)/result.sftp
	sftp -o Port=$(ANDROID_PORT) -o CheckHostIP=no -b $(WORKDIR)/result.sftp $(ANDROID_ADDR) 
	(cd $(WORKDIR); tar xzf $(RESULTSPACKAGE); rm -f result.sftp $(RESULTSPACKAGE) )

# Android testing assumes having built with: OS_TARGET=Android CROSS_COMPILE=1
# Connectivity tested with Android app: SSHDroid
# Provide appropriate ANDROID_ADDR variable, e.g.:
#   make test_android ANDROID_ADDR=root@192.168.4.5
# See also: https://wiki.mozilla.org/NSS:Android

test_android: package_for_testing android_install android_run_tests android_get_result