Adapt screenshot tests after session removal
[src/qa-testdefinitions.git] / common / scripts / agl-screenshot-test.sh
1 #!/bin/bash
2
3 set -x
4
5 export TERM=dumb
6 export COLUMNS=1000
7
8 SCRIPTDIR=`dirname $(readlink -f $0)`
9 XDG_RUNTIME_DIR=/run/user/1001
10 AGLDRIVER=agl-driver
11
12 if [ -z $1 ] ; then
13     echo "No reference image passed"
14     exit 125
15 fi
16
17 REF_IMAGE=`readlink -f $1`
18
19 # go to output directory
20 cd /home/$AGLDRIVER
21
22
23
24
25 if [ -z "${REF_IMAGE}" ]; then
26         echo "No reference image passed"
27         exit 125
28 fi
29
30 if [ ! -f "${REF_IMAGE}" ]; then
31         echo "Reference image is not found"
32         exit 125
33 fi
34
35 # Enable the test picture and disable cursor and any other application from being displayed
36 sed -i '/^\[core\]/a activate-by-default=false' /etc/xdg/weston/weston.ini
37 # setup homescreen env variable
38 sed -i '/^\[core\]/a hide-cursor=true' /etc/xdg/weston/weston.ini
39 # enable red/green/blue test screen
40 echo 'HOMESCREEN_DEMO_CI=1' > /etc/default/homescreen
41 sync
42 systemctl daemon-reload || true
43 sleep 2
44
45 # create initial journal cursor file
46 journalctl /usr/bin/agl-compositor --cursor-file=/tmp/agl-screenshot-cursor > /tmp/first-log 2>&1
47
48 # stop homescreen (shell) and launcher
49 systemctl stop homescreen.service
50 systemctl stop launcher.service
51 # restart agl-compositor
52 systemctl restart agl-compositor.service
53 systemctl start homescreen.service
54
55 # e.g. qemu-system-arm takes loooong
56 sleep 10
57 echo "Waiting for compositor to initialize (+10sec)."
58
59 LOOP=20
60 while test $LOOP -ge 1 ; do
61
62   ( mv /tmp/next-log /tmp/prev-log > /dev/null 2>&1 ) || true
63   journalctl /usr/bin/agl-compositor --cursor-file=/tmp/agl-screenshot-cursor > /tmp/next-log 2>&1
64   if ! grep -q 'Usable area:' /tmp/next-log ; then
65   # e.g. qemu-system-arm takes loooong
66         echo "Waiting for compositor to initialize (+60sec). Loop: $LOOP"
67         sleep 60
68         LOOP="$(($LOOP-1))"
69         continue
70   fi
71   break
72 done
73
74 #read aw
75
76
77 # giving up now
78 if ! grep -q 'Usable area:' /tmp/next-log ; then
79         echo "Marker ('Usable area:') not found. Dumping log."
80         echo "##################################"
81         cat /tmp/first-log
82         cat /tmp/prev-log
83         cat /tmp/next-log
84         echo "##################################"
85         exit 127
86         #echo "CONTINUING ANYWAY !"
87 fi
88
89 AGL_SCREENSHOOTER=/usr/bin/agl-screenshooter
90
91
92 #su - $AGLDRIVER -c "..."
93 do_screenshot()
94 {
95         $AGL_SCREENSHOOTER -a
96         return $?
97 }
98
99
100 if [ -z "$AGL_SCREENSHOOTER" ]; then
101         echo "Failed to find agl-screenshooter. Compositor too old?"
102         exit 127
103 fi
104
105 #echo "Found agl-screenshoooter in $AGL_SCREENSHOOTER"
106 rm -rf /home/agl-driver/agl-screenshot-*.png
107
108 # give it a bit more time to display
109 #sleep 60
110
111 $AGL_SCREENSHOOTER -l
112
113 if do_screenshot ; then
114         echo "Screenshot taken"
115 else
116         echo "##################################"
117         journalctl --no-pager -a -b /usr/bin/agl-compositor
118         echo "##################################"
119         exit 127
120 fi
121
122 ls agl-screenshot*
123
124 REF_IMAGE_SHA1SUM=`sha1sum ${REF_IMAGE} | awk -F ' ' '{print $1}'`
125
126 FINALRET=1
127
128
129 for SCREENSHOT in agl-screenshot-*.png ; do
130     IMAGE_SHA1SUM=`sha1sum $SCREENSHOT | awk -F ' ' '{print $1}'`
131
132     if [ "${REF_IMAGE_SHA1SUM}" == "${IMAGE_SHA1SUM}" ]; then
133         echo "A Screenshot matches the reference image"
134         FINALRET=0
135         break
136     else
137         echo "A Screenshot does not match the reference image"
138         FINALRET=127
139     fi
140
141 done
142
143 if [ $FINALRET != 0 ] ; then
144     for i in agl-screenshot-*.png ; do
145         ${SCRIPTDIR}/./artiproxy-upload.sh $i "$i"
146     done
147     journalctl -b --no-pager -a > journal.txt
148     ${SCRIPTDIR}/./artiproxy-upload.sh journal.txt journal.txt
149
150     echo "#########################"
151     cat /run/platform/display/*.log
152     echo "#########################"
153     set
154     echo "#########################"
155 fi
156
157 # cleanup
158 sed -i '/activate-by-default=false/d' /etc/xdg/weston/weston.ini
159 sed -i '/hide-cursor=true/d' /etc/xdg/weston/weston.ini
160 #rm -rf /etc/systemd/system/weston@.service.d
161 rm -rf /etc/default/homescreen
162 systemctl daemon-reload
163 sync
164 sleep 2
165 systemctl restart agl-compositor.service
166 systemctl restart homescreen.service
167 systemctl restart launcher.service
168
169 sleep 10
170
171 exit $FINALRET