tracie: Print results in a machine readable format
[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 assert() {
8 if ! $1; then
9 echo "Assertion failed: \"$1\""
10 exit 1
11 fi
12 }
13
14 run_tracie() {
15 # Run tests for the .testtrace types, using the "gl-test-device" and "vk-test-device" device names.
16 python3 $TEST_DIR/tracie.py --file $TEST_DIR/tests/traces.yml --device-name gl-test-device && \
17 python3 $TEST_DIR/tracie.py --file $TEST_DIR/tests/traces.yml --device-name vk-test-device
18 }
19
20 cleanup() {
21 [ "$TEST_DIR" = "/tmp/*" ] && rm -rf "$TEST_DIR"
22 }
23
24 prepare_for_run() {
25 TEST_DIR="$(mktemp -d -t tracie.test.XXXXXXXXXX)"
26 # Copy all the tracie scripts to the test dir for the run-tests.sh script.
27 # This avoids polluting the normal working dir with test result artifacts.
28 cp -R "$TRACIE_DIR"/. "$TEST_DIR"
29 cd "$TEST_DIR"
30 mkdir traces-db
31 mv tests/test-data/* traces-db/.
32 trap cleanup EXIT
33 # Ensure we have a clean environment.
34 unset TRACIE_STORE_IMAGES
35 }
36
37 run_test() {
38 prepare_for_run
39 log=$(mktemp)
40 if ($1 > "$log" 2>&1 ;); then
41 if [ -t 1 ]; then
42 echo "$1: \e[0;32mSuccess\e[0m"
43 else
44 echo "$1: Success"
45 fi
46 else
47 if [ -t 1 ]; then
48 echo "$1: \e[0;31mFail\e[0m"
49 else
50 echo "$1: Fail"
51 fi
52 cat "$log"
53 TEST_EXIT=1
54 fi
55 rm "$log"
56 cleanup
57 }
58
59 assert_results_yaml_contains() {
60 grep -q "actual: $1" $4
61 assert "[ $? = 0 ]"
62
63 grep -q "expected: $2" $4
64 assert "[ $? = 0 ]"
65
66 if [ $3 != "" ]; then
67 grep -q $3 $4
68 fi
69
70 assert "[ $? = 0 ]"
71 }
72
73 tracie_succeeds_if_all_images_match() {
74 run_tracie
75 assert "[ $? = 0 ]"
76 assert_results_yaml_contains 5efda83854befe0155ff8517a58d5b51 5efda83854befe0155ff8517a58d5b51 "" "$PWD/results/results.yml"
77 }
78
79 tracie_fails_on_image_mismatch() {
80 sed -i 's/5efda83854befe0155ff8517a58d5b51/8e0a801367e1714463475a824dab363b/g' \
81 "$TEST_DIR/tests/traces.yml"
82
83 run_tracie
84 assert "[ $? != 0 ]"
85 assert_results_yaml_contains 5efda83854befe0155ff8517a58d5b51 8e0a801367e1714463475a824dab363b "trace2/test/vk-test-device/olive.testtrace-0.png" "$PWD/results/results.yml"
86 }
87
88 tracie_skips_traces_without_checksum() {
89 echo " - path: trace1/red.testtrace" >> "$TEST_DIR/tests/traces.yml"
90 echo " expectations:" >> "$TEST_DIR/tests/traces.yml"
91 echo " - device: bla" >> "$TEST_DIR/tests/traces.yml"
92 echo " checksum: 000000000000000" >> "$TEST_DIR/tests/traces.yml"
93 # red.testtrace should be skipped, since it doesn't
94 # have any checksums for our device
95 echo "ff0000ff" > traces-db/trace1/red.testtrace
96
97 run_tracie
98 assert "[ $? = 0 ]"
99 }
100
101 tracie_fails_on_dump_image_error() {
102 # "invalid" should fail to parse as rgba and
103 # cause an error
104 echo "invalid" > traces-db/trace1/magenta.testtrace
105
106 run_tracie
107 assert "[ $? != 0 ]"
108 }
109
110 tracie_stores_only_logs_on_checksum_match() {
111 run_tracie
112 assert "[ $? = 0 ]"
113
114 assert "[ -f "$TEST_DIR/results/trace1/test/gl-test-device/magenta.testtrace.log" ]"
115 assert "[ -f "$TEST_DIR/results/trace2/test/vk-test-device/olive.testtrace.log" ]"
116
117 assert "[ ! -f "$TEST_DIR/results/trace1/test/gl-test-device/magenta.testtrace-0.png" ]"
118 assert "[ ! -f "$TEST_DIR/results/trace2/test/vk-test-device/olive.testtrace-0.png" ]"
119
120 ls -lR "$TEST_DIR"
121 }
122
123 tracie_stores_images_on_checksum_mismatch() {
124 sed -i 's/5efda83854befe0155ff8517a58d5b51/8e0a801367e1714463475a824dab363b/g' \
125 "$TEST_DIR/tests/traces.yml"
126
127 run_tracie
128 assert "[ $? != 0 ]"
129
130 assert "[ ! -f "$TEST_DIR/results/trace1/test/gl-test-device/magenta.testtrace-0.png" ]"
131 assert "[ -f "$TEST_DIR/results/trace2/test/vk-test-device/olive.testtrace-0.png" ]"
132 }
133
134 tracie_stores_images_on_request() {
135 (export TRACIE_STORE_IMAGES=1; run_tracie)
136 assert "[ $? = 0 ]"
137
138 assert "[ -f "$TEST_DIR/results/trace1/test/gl-test-device/magenta.testtrace-0.png" ]"
139 assert "[ -f "$TEST_DIR/results/trace2/test/vk-test-device/olive.testtrace-0.png" ]"
140
141 ls -lR "$TEST_DIR"
142 }
143
144 run_test tracie_succeeds_if_all_images_match
145 run_test tracie_fails_on_image_mismatch
146 run_test tracie_skips_traces_without_checksum
147 run_test tracie_fails_on_dump_image_error
148 run_test tracie_stores_only_logs_on_checksum_match
149 run_test tracie_stores_images_on_checksum_mismatch
150 run_test tracie_stores_images_on_request
151
152 exit $TEST_EXIT