tracie: correct typo
[mesa.git] / .gitlab-ci / tracie / tests / test.sh
1 #!/bin/sh
2
3 TRACIE_DIR="$(dirname "$(readlink -f "$0")")/.."
4 TEST_DIR=""
5 TEST_EXIT=0
6
7 create_repo() {
8 repo="$(mktemp -d $TEST_DIR/repo.XXXXXXXXXX)"
9 cp -R "$TEST_DIR"/tests/test-data/* "$repo"
10 (
11 cd "$repo";
12 git init -q .;
13 git config user.email "me@example.com"
14 git config user.name "Me me"
15 git lfs track '*.testtrace' > /dev/null;
16 git add .;
17 git commit -q -a -m 'initial';
18 )
19 echo $repo
20 }
21
22 destroy_repo() {
23 [ -d "$1"/.git ] && rm -rf "$1"
24 }
25
26 assert() {
27 if ! $1; then
28 echo "Assertion failed: \"$1\""
29 exit 1
30 fi
31 }
32
33 run_tracie() {
34 # Run tests for the .testtrace types, using the "test-device" device name.
35 DEVICE_NAME=test-device CI_PROJECT_DIR="$TEST_DIR" \
36 "$TEST_DIR/tracie.sh" "$TEST_DIR/tests/traces.yml" testtrace
37 }
38
39 cleanup() {
40 rm -rf "$TEST_DIR"
41 }
42
43 prepare_for_run() {
44 TEST_DIR="$(mktemp -d -t tracie.test.XXXXXXXXXX)"
45 # Copy all the tracie scripts to the test dir and later make that the
46 # CI_PROJECT_DIR for the run-tests.sh script. This avoids polluting the
47 # normal working dir with test result artifacts.
48 cp -R "$TRACIE_DIR"/. "$TEST_DIR"
49 trap cleanup EXIT
50 # Ensure we have a clean environment.
51 unset TRACIE_STORE_IMAGES
52 }
53
54 run_test() {
55 prepare_for_run
56 log=$(mktemp)
57 if ($1 > "$log" 2>&1 ;); then
58 if [ -t 1 ]; then
59 echo "$1: \e[0;32mSuccess\e[0m"
60 else
61 echo "$1: Success"
62 fi
63 else
64 if [ -t 1 ]; then
65 echo "$1: \e[0;31mFail\e[0m"
66 else
67 echo "$1: Fail"
68 fi
69 cat "$log"
70 TEST_EXIT=1
71 fi
72 rm "$log"
73 cleanup
74 }
75
76 tracie_succeeds_if_all_images_match() {
77 repo="$(create_repo)"
78 cd "$repo"
79
80 run_tracie
81 assert "[ $? = 0 ]"
82
83 destroy_repo "$repo"
84 }
85
86 tracie_fails_on_image_mismatch() {
87 repo="$(create_repo)"
88 cd "$repo"
89
90 sed -i 's/5efda83854befe0155ff8517a58d5b51/8e0a801367e1714463475a824dab363b/g' \
91 "$TEST_DIR/tests/traces.yml"
92
93 run_tracie
94 assert "[ $? != 0 ]"
95
96 destroy_repo "$repo"
97 }
98
99 tracie_ignores_unspecified_trace_types() {
100 repo="$(create_repo)"
101 cd "$repo"
102
103 echo " - path: trace1/empty.trace" >> "$TEST_DIR/tests/traces.yml"
104 echo " expectations:" >> "$TEST_DIR/tests/traces.yml"
105 echo " - device: test-device" >> "$TEST_DIR/tests/traces.yml"
106 echo " checksum: 000000000000000" >> "$TEST_DIR/tests/traces.yml"
107 # For the tests we only scan for the .testtrace type,
108 # so the .trace file added below should be ignored.
109 echo "empty" > trace1/empty.trace
110 git lfs track '*.trace'
111 git add trace1
112 git commit -a -m 'break'
113
114 run_tracie
115 assert "[ $? = 0 ]"
116
117 destroy_repo "$repo"
118 }
119
120 tracie_skips_traces_without_checksum() {
121 repo="$(create_repo)"
122 cd "$repo"
123
124 echo " - path: trace1/red.testtrace" >> "$TEST_DIR/tests/traces.yml"
125 echo " expectations:" >> "$TEST_DIR/tests/traces.yml"
126 echo " - device: bla" >> "$TEST_DIR/tests/traces.yml"
127 echo " checksum: 000000000000000" >> "$TEST_DIR/tests/traces.yml"
128 # red.testtrace should be skipped, since it doesn't
129 # have any checksums for our device
130 echo "ff0000ff" > trace1/red.testtrace
131 git add trace1
132 git commit -a -m 'red'
133
134 run_tracie
135 assert "[ $? = 0 ]"
136
137 destroy_repo "$repo"
138 }
139
140 tracie_fails_on_dump_image_error() {
141 repo="$(create_repo)"
142 cd "$repo"
143
144 # "invalid" should fail to parse as rgba and
145 # cause an error
146 echo "invalid" > trace1/magenta.testtrace
147 git add trace1
148 git commit -a -m 'invalid'
149
150 run_tracie
151 assert "[ $? != 0 ]"
152
153 destroy_repo "$repo"
154 }
155
156 tracie_stores_only_logs_on_checksum_match() {
157 repo="$(create_repo)"
158 cd "$repo"
159
160 run_tracie
161 assert "[ $? = 0 ]"
162
163 assert "[ -f "$TEST_DIR/results/trace1/test/test-device/magenta.testtrace.log" ]"
164 assert "[ -f "$TEST_DIR/results/trace2/test/test-device/olive.testtrace.log" ]"
165
166 assert "[ ! -f "$TEST_DIR/results/trace1/test/test-device/magenta.testtrace-0.png" ]"
167 assert "[ ! -f "$TEST_DIR/results/trace2/test/test-device/olive.testtrace-0.png" ]"
168
169 ls -lR "$TEST_DIR"
170
171 destroy_repo "$repo"
172 }
173
174 tracie_stores_images_on_checksum_mismatch() {
175 repo="$(create_repo)"
176 cd "$repo"
177
178 sed -i 's/5efda83854befe0155ff8517a58d5b51/8e0a801367e1714463475a824dab363b/g' \
179 "$TEST_DIR/tests/traces.yml"
180
181 run_tracie
182 assert "[ $? != 0 ]"
183
184 assert "[ ! -f "$TEST_DIR/results/trace1/test/test-device/magenta.testtrace-0.png" ]"
185 assert "[ -f "$TEST_DIR/results/trace2/test/test-device/olive.testtrace-0.png" ]"
186
187 destroy_repo "$repo"
188 }
189
190 tracie_stores_images_on_request() {
191 repo="$(create_repo)"
192 cd "$repo"
193
194 (export TRACIE_STORE_IMAGES=1; run_tracie)
195 assert "[ $? = 0 ]"
196
197 assert "[ -f "$TEST_DIR/results/trace1/test/test-device/magenta.testtrace-0.png" ]"
198 assert "[ -f "$TEST_DIR/results/trace2/test/test-device/olive.testtrace-0.png" ]"
199
200 ls -lR "$TEST_DIR"
201
202 destroy_repo "$repo"
203 }
204
205 run_test tracie_succeeds_if_all_images_match
206 run_test tracie_fails_on_image_mismatch
207 run_test tracie_ignores_unspecified_trace_types
208 run_test tracie_skips_traces_without_checksum
209 run_test tracie_fails_on_dump_image_error
210 run_test tracie_stores_only_logs_on_checksum_match
211 run_test tracie_stores_images_on_checksum_mismatch
212 run_test tracie_stores_images_on_request
213
214 exit $TEST_EXIT