]>
Commit | Line | Data |
---|---|---|
b752aed8 SB |
1 | #!/usr/bin/env bash |
2 | ||
3 | if [ ${SWTPM_TEST_EXPENSIVE:-0} -eq 0 ]; then | |
4 | exit 77 | |
5 | fi | |
6 | ||
7 | ROOT=${abs_top_builddir:-$(pwd)/..} | |
c4a9e78a | 8 | TESTDIR=${abs_top_testdir:-${PWD}/$(dirname "$0")} |
b752aed8 SB |
9 | |
10 | function cleanup() { | |
11 | if [ -n "${SWTPM_PID}" ]; then | |
12 | kill -9 ${SWTPM_PID} | |
13 | fi | |
14 | if [ -n "${SWTPM1_PID}" ]; then | |
15 | kill -9 ${SWTPM1_PID} | |
16 | fi | |
17 | if [ -n ${WORKDIR} ]; then | |
18 | rm -rf ${WORKDIR} | |
19 | fi | |
c4a9e78a | 20 | # clean up after (interrupted) test suite |
45ed7764 | 21 | rm -f /tmp/.key-*-0 /tmp/.delegation-0 /tmp/.transdigest-*-0 |
b752aed8 SB |
22 | } |
23 | ||
24 | trap "cleanup" EXIT | |
25 | ||
26 | source ${TESTDIR}/common | |
f1adde9f | 27 | skip_test_no_tpm12 "${SWTPM_EXE}" |
b752aed8 | 28 | |
cce7503c | 29 | WORKDIR="$(mktemp -d)" || exit 1 |
b752aed8 SB |
30 | TESTLOG=${WORKDIR}/test.log |
31 | ||
32 | # variables used by the TPM 1.2 test suite | |
33 | TPM_SERVER_PORT=65440 | |
3e7555c4 | 34 | TPM_SERVER_NAME=127.0.0.1 |
b752aed8 | 35 | SLAVE_TPM_PORT=65442 |
3e7555c4 | 36 | SLAVE_TPM_SERVER=127.0.0.1 |
b752aed8 SB |
37 | |
38 | SWTPM_INTERFACE=socket+socket | |
39 | ||
40 | # Start main TPM 1.2 | |
41 | SWTPM_SERVER_PORT=${TPM_SERVER_PORT} | |
42 | SWTPM_SERVER_NAME=${TPM_SERVER_NAME} | |
43 | SWTPM_CTRL_PORT=65441 | |
44 | ||
45 | mkdir -p ${WORKDIR}/tpm12.1 | |
46 | SWTPM_SERVER_NO_DISCONNECT="1" run_swtpm ${SWTPM_INTERFACE} \ | |
47 | --tpmstate dir=${WORKDIR}/tpm12.1 \ | |
48 | --flags not-need-init | |
49 | SWTPM1_PID=${SWTPM_PID} | |
50 | ||
51 | # Start 2nd TPM 1.2 | |
52 | SWTPM_SERVER_PORT=${SLAVE_TPM_PORT} | |
53 | SWTPM_SERVER_NAME=${SLAVE_TPM_SERVER} | |
54 | SWTPM_CTRL_PORT=65443 | |
55 | ||
56 | mkdir -p ${WORKDIR}/tpm12.2 | |
57 | SWTPM_SERVER_NO_DISCONNECT="1" run_swtpm ${SWTPM_INTERFACE} \ | |
58 | --tpmstate dir=${WORKDIR}/tpm12.2 \ | |
59 | --flags not-need-init | |
60 | ||
61 | pushd ${WORKDIR} &>/dev/null | |
62 | ||
ea87b5d6 SB |
63 | for ((i = 0; i < 3; i++)); do |
64 | curl -sJOL https://sourceforge.net/projects/ibmswtpm/files/tpm4769tar.gz/download | |
65 | if [ $? -eq 0 ]; then | |
66 | break | |
67 | fi | |
68 | # wait 3..10 seconds for a retry | |
69 | sleep $((3 + (RANDOM & 7))) | |
70 | done | |
71 | hash=$(get_sha1_file tpm4769tar.gz) | |
72 | if [ $hash != ca99a3ccd3e41cdd9983086a9b944023b6049bbc ]; then | |
73 | echo "Error: Downloaded file does not have expected hash." | |
74 | echo "Actual: $hash" | |
75 | exit 1 | |
76 | fi | |
b752aed8 SB |
77 | tar -xzf tpm4769tar.gz |
78 | ||
79 | pushd libtpm &>/dev/null | |
80 | ||
45ed7764 | 81 | patch -p0 < ${TESTDIR}/patches/libtpm.patch |
c4a9e78a SB |
82 | if [ $? -ne 0 ]; then |
83 | echo "Error: Patching failed." | |
84 | exit 1 | |
85 | fi | |
b752aed8 SB |
86 | |
87 | ./autogen | |
f894b45f | 88 | LIBS="" CFLAGS="-g -O2 -DOPENSSL_SUPPRESS_DEPRECATED=1" ./configure |
b752aed8 SB |
89 | make -j$(nproc) |
90 | ||
91 | pushd utils &>/dev/null | |
92 | ||
45ed7764 SB |
93 | # variables used by TPM 1.2 tools and test suite |
94 | export TPM_SERVER_PORT=${TPM_SERVER_PORT} \ | |
95 | TPM_SERVER_NAME=${TPM_SERVER_NAME} \ | |
96 | SLAVE_TPM_PORT=${SLAVE_TPM_PORT} \ | |
97 | SLAVE_TPM_SERVER=${SLAVE_TPM_SERVER} \ | |
98 | PATH=$PWD:$PATH | |
99 | ||
100 | if wait_for_serversocket ${TPM_SERVER_PORT} 127.0.0.1 2; then | |
101 | echo "Error: swtpm 1 did not open port ${TPM_SERVER_PORT}" | |
102 | exit 1 | |
103 | fi | |
104 | ||
105 | if wait_for_serversocket ${SLAVE_TPM_PORT} 127.0.0.1 2; then | |
106 | echo "Error: swtpm 2 did not open port ${SLAVE_TPM_PORT}" | |
107 | exit 1 | |
108 | fi | |
109 | ||
110 | tpmbios | |
111 | ||
b752aed8 SB |
112 | ln -s makeidentity identity |
113 | ||
c4a9e78a SB |
114 | # keep test 1 last due to ERRORs it creates since we do not |
115 | # restart the TPM | |
45ed7764 SB |
116 | for tst in 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 23 25 26 1; do |
117 | ||
118 | TPM_AUDITING=0 | |
119 | TPM_TRANSPORT=0 | |
c4a9e78a | 120 | |
b752aed8 | 121 | echo "Running test ${tst}" |
45ed7764 | 122 | if [[ "${tst}" =~ ^(1)$ ]]; then |
c4a9e78a | 123 | $SWTPM_IOCTL --tcp :65441 -i |
45ed7764 SB |
124 | tpmbios |
125 | elif [[ "${tst}" = ^25$ ]]; then | |
126 | TPM_AUDITING=1 | |
127 | TPM_TRANSPORT=1 | |
c4a9e78a SB |
128 | fi |
129 | ||
45ed7764 SB |
130 | timeout 40 ./test_console.sh \ |
131 | --non-interactive ${tst} >> ${TESTLOG} </dev/null | |
c4a9e78a SB |
132 | # Ignore all errors that occurred in test 1 |
133 | if [ $tst != "1" ] && [ -n "$(grep "ERROR" ${TESTLOG})" ]; then | |
b752aed8 SB |
134 | echo "Error occurred!" |
135 | cat ${TESTLOG} | |
136 | exit 1 | |
137 | fi | |
138 | done | |
139 | ||
45ed7764 SB |
140 | $SWTPM_IOCTL --tcp :65441 -s |
141 | wait_process_gone ${SWTPM1_PID} 4 | |
142 | ||
143 | $SWTPM_IOCTL --tcp :65443 -s | |
144 | wait_process_gone ${SWTPM_PID} 4 | |
145 | ||
b752aed8 SB |
146 | popd &>/dev/null |
147 | popd &>/dev/null | |
148 | ||
149 | echo "OK" | |
45ed7764 | 150 | |
b752aed8 | 151 | exit 0 |