@@ -44,8 +44,9 @@ run_qemu_boot_test() {
4444 fi
4545
4646 BIOS=" /usr/share/OVMF/OVMF_CODE_4M.fd"
47- TIMEOUT=30
48- SUCCESS_STRING=" login:"
47+ TIMEOUT=60
48+ LOGIN_SUCCESS_STRING=" login:"
49+ UNAME_SUCCESS_STRING=" Linux"
4950 LOGFILE=" qemu_serial.log"
5051
5152 ORIGINAL_DIR=$( pwd)
@@ -84,44 +85,87 @@ run_qemu_boot_test() {
8485 # create log file ,boot image into qemu , return the pass or fail after boot sucess
8586 sudo bash -c "
8687 LOGFILE=\" $LOGFILE \"
87- SUCCESS_STRING=\" $SUCCESS_STRING \"
88+ LOGIN_SUCCESS_STRING=\" $LOGIN_SUCCESS_STRING \"
89+ UNAME_SUCCESS_STRING=\" $UNAME_SUCCESS_STRING \"
8890 IMAGE=\" $IMAGE \"
8991 RAW_IMAGE=\" $RAW_IMAGE \"
9092 ORIGINAL_DIR=\" $ORIGINAL_DIR \"
9193
92- touch \"\$ LOGFILE\" && chmod 666 \"\$ LOGFILE\"
94+ touch \"\$ LOGFILE\" && chmod 666 \"\$ LOGFILE\"
95+
96+ # Create a named pipe for sending commands to QEMU
97+ mkfifo qemu_input
98+
99+ # Copy OVMF vars to writable location
100+ cp /usr/share/OVMF/OVMF_VARS_4M.fd ./OVMF_VARS_4M.fd
101+
102+ # Start QEMU with proper console configuration
93103 nohup qemu-system-x86_64 \\
94104 -m 2048 \\
95105 -enable-kvm \\
96106 -cpu host \\
97107 -drive if=none,file=\"\$ IMAGE\" ,format=raw,id=nvme0 \\
98108 -device nvme,drive=nvme0,serial=deadbeef \\
99109 -drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE_4M.fd \\
100- -drive if=pflash,format=raw,file=/usr/share/OVMF /OVMF_VARS_4M.fd \\
110+ -drive if=pflash,format=raw,file=. /OVMF_VARS_4M.fd \\
101111 -nographic \\
102- -serial mon:stdio \\
103- > \"\$ LOGFILE\" 2>&1 &
112+ -monitor none \\
113+ -serial file:\"\$ LOGFILE\" \\
114+ -netdev user,id=net0 \\
115+ -device virtio-net-pci,netdev=net0 \\
116+ < qemu_input &
104117
105118 qemu_pid=\$ !
106119 echo \" QEMU launched as root with PID \$ qemu_pid\"
107120 echo \" Current working dir: \$ (pwd)\"
108121
109- # Wait for SUCCESS_STRING or timeout
110- timeout=30
122+ # Wait for login prompt
123+ timeout=60
111124 elapsed=0
112- while ! grep -q \"\$ SUCCESS_STRING \" \"\$ LOGFILE\" && [ \$ elapsed -lt \$ timeout ]; do
125+ while ! grep -q \"\$ LOGIN_SUCCESS_STRING \" \"\$ LOGFILE\" && [ \$ elapsed -lt \$ timeout ]; do
113126 sleep 1
114127 elapsed=\$ ((elapsed + 1))
115128 done
116- echo \"\$ elapsed\"
117- kill \$ qemu_pid
129+
130+ if grep -q \"\$ LOGIN_SUCCESS_STRING\" \"\$ LOGFILE\" ; then
131+ echo \" Login prompt detected after \$ elapsed seconds\"
132+
133+ # Send login sequence
134+ {
135+ echo \" user\"
136+ sleep 2
137+ echo \" user\"
138+ sleep 2
139+ echo \" uname -a\"
140+ sleep 2
141+ echo \" exit\"
142+ sleep 1
143+ } > qemu_input &
144+
145+ # Wait for uname output
146+ uname_timeout=30
147+ uname_elapsed=0
148+ while ! grep -q \"\$ UNAME_SUCCESS_STRING\" \"\$ LOGFILE\" && [ \$ uname_elapsed -lt \$ uname_timeout ]; do
149+ sleep 1
150+ uname_elapsed=\$ ((uname_elapsed + 1))
151+ done
152+
153+ echo \" Waiting completed after \$ uname_elapsed seconds\"
154+ fi
155+
156+ # Clean up and kill QEMU
157+ kill \$ qemu_pid 2>/dev/null || true
158+ rm -f qemu_input OVMF_VARS_4M.fd
159+
160+ echo \" === QEMU Output ===\"
118161 cat \"\$ LOGFILE\"
162+ echo \" === End Output ===\"
119163
120- if grep -q \"\$ SUCCESS_STRING \" \"\$ LOGFILE\" ; then
121- echo \" Boot success !\"
164+ if grep -q \"\$ UNAME_SUCCESS_STRING \" \"\$ LOGFILE\" ; then
165+ echo \" Login and uname command executed successfully !\"
122166 result=0
123167 else
124- echo \" Boot failed or timed out \"
168+ echo \" Failed to login or execute uname command \"
125169 result=1
126170 fi
127171
@@ -149,8 +193,9 @@ run_qemu_boot_test_iso() {
149193 fi
150194
151195 BIOS=" /usr/share/OVMF/OVMF_CODE_4M.fd"
152- TIMEOUT=30
153- SUCCESS_STRING=" login:"
196+ TIMEOUT=60
197+ LOGIN_SUCCESS_STRING=" login:"
198+ UNAME_SUCCESS_STRING=" Linux"
154199 LOGFILE=" qemu_serial_iso.log"
155200
156201 ORIGINAL_DIR=$( pwd)
@@ -184,45 +229,86 @@ run_qemu_boot_test_iso() {
184229 # create log file ,boot ISO image into qemu , return the pass or fail after boot sucess
185230 sudo bash -c "
186231 LOGFILE=\" $LOGFILE \"
187- SUCCESS_STRING=\" $SUCCESS_STRING \"
232+ LOGIN_SUCCESS_STRING=\" $LOGIN_SUCCESS_STRING \"
233+ UNAME_SUCCESS_STRING=\" $UNAME_SUCCESS_STRING \"
188234 IMAGE=\" $IMAGE \"
189- RAW_IMAGE=\" $RAW_IMAGE \"
190235 ORIGINAL_DIR=\" $ORIGINAL_DIR \"
191236
192- touch \"\$ LOGFILE\" && chmod 666 \"\$ LOGFILE\"
237+ touch \"\$ LOGFILE\" && chmod 666 \"\$ LOGFILE\"
238+
239+ # Create a named pipe for sending commands to QEMU
240+ mkfifo qemu_input_iso
241+
242+ # Copy OVMF vars to writable location
243+ cp /usr/share/OVMF/OVMF_VARS_4M.fd ./OVMF_VARS_4M_iso.fd
244+
245+ # Start QEMU with ISO using CD-ROM drive
193246 nohup qemu-system-x86_64 \\
194247 -m 2048 \\
195248 -enable-kvm \\
196249 -cpu host \\
197- -drive if=none,file=\"\$ IMAGE\" ,format=raw,id=nvme0 \\
198- -device nvme,drive=nvme0,serial=deadbeef \\
250+ -cdrom \"\$ IMAGE\" \\
199251 -drive if=pflash,format=raw,readonly=on,file=/usr/share/OVMF/OVMF_CODE_4M.fd \\
200- -drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS_4M .fd \\
252+ -drive if=pflash,format=raw,file=./OVMF_VARS_4M_iso .fd \\
201253 -nographic \\
202- -serial mon:stdio \\
203- > \"\$ LOGFILE\" 2>&1 &
254+ -monitor none \\
255+ -serial file:\"\$ LOGFILE\" \\
256+ -netdev user,id=net0 \\
257+ -device virtio-net-pci,netdev=net0 \\
258+ < qemu_input_iso &
204259
205260 qemu_pid=\$ !
206261 echo \" QEMU launched as root with PID \$ qemu_pid\"
207262 echo \" Current working dir: \$ (pwd)\"
208263
209- # Wait for SUCCESS_STRING or timeout
210- timeout=30
264+ # Wait for login prompt
265+ timeout=60
211266 elapsed=0
212- while ! grep -q \"\$ SUCCESS_STRING \" \"\$ LOGFILE\" && [ \$ elapsed -lt \$ timeout ]; do
267+ while ! grep -q \"\$ LOGIN_SUCCESS_STRING \" \"\$ LOGFILE\" && [ \$ elapsed -lt \$ timeout ]; do
213268 sleep 1
214269 elapsed=\$ ((elapsed + 1))
215270 done
216- echo \"\$ elapsed\"
217- kill \$ qemu_pid
271+
272+ if grep -q \"\$ LOGIN_SUCCESS_STRING\" \"\$ LOGFILE\" ; then
273+ echo \" Login prompt detected after \$ elapsed seconds\"
274+
275+ # Send login sequence
276+ {
277+ echo \" user\"
278+ sleep 2
279+ echo \" user\"
280+ sleep 2
281+ echo \" uname -a\"
282+ sleep 2
283+ echo \" exit\"
284+ sleep 1
285+ } > qemu_input_iso &
286+
287+ # Wait for uname output
288+ uname_timeout=30
289+ uname_elapsed=0
290+ while ! grep -q \"\$ UNAME_SUCCESS_STRING\" \"\$ LOGFILE\" && [ \$ uname_elapsed -lt \$ uname_timeout ]; do
291+ sleep 1
292+ uname_elapsed=\$ ((uname_elapsed + 1))
293+ done
294+
295+ echo \" Waiting completed after \$ uname_elapsed seconds\"
296+ fi
297+
298+ # Clean up and kill QEMU
299+ kill \$ qemu_pid 2>/dev/null || true
300+ rm -f qemu_input_iso OVMF_VARS_4M_iso.fd
301+
302+ echo \" === QEMU ISO Output ===\"
218303 cat \"\$ LOGFILE\"
304+ echo \" === End Output ===\"
219305
220- if grep -q \"\$ SUCCESS_STRING \" \"\$ LOGFILE\" ; then
221- echo \" Boot success !\"
306+ if grep -q \"\$ UNAME_SUCCESS_STRING \" \"\$ LOGFILE\" ; then
307+ echo \" Login and uname command executed successfully !\"
222308 result=0
223309 else
224- echo \" Boot failed or timed out \"
225- result=0 #setting return value 0 instead of 1 until fully debugged ERRRORRR
310+ echo \" Failed to login or execute uname command \"
311+ result=1
226312 fi
227313
228314 # Return to original directory
0 commit comments