Message ID | ad1db17ffa1883b1aa21a8480e4fb628a6d0c929.1744403499.git-series.marmarek@invisiblethingslab.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Several CI cleanups and improvements around initrd/rootfs | expand |
On 11/04/2025 9:32 pm, Marek Marczykowski-Górecki wrote: > Expect normally discards initial part of its buffer after matching the > patter, before looking for the next one. If both PASSED and LOG_MSG > happen to be in the buffer at the same time, depending on their order, > only one will be matched and the waiting for the other will timeout. > Example expect -d output of this happening (parts eclipsed for brevity): > > expect: does "\r\r\r\nWelcome to Alpine Linux 3.18\r\r\r\n...\r\r\r\r\n(domU) + echo 'pci test passed'\r\r\r\r\n(domU) pci test passed\r\r\r\r..." (spawn_id exp4) match regular expression "pci test passed"? Gate "pci test passed"? gate=yes re=yes > ... > Gate keeper glob pattern for '\nWelcome to Alpine Linux' is ' > Welcome to Alpine Linux'. Activating booster. > expect: does "'\r\r\r\r\n(domU) pci test passed\r\r\r\r\n(domU) [ ok ]\r\r\r\r\n(domU) [ ok ]\r\r\r\r\n(domU) \r\r\r\r\r\n(domU) domU Welcome to Alpine Linux 3.18\r\r\r\r\n(domU) \rKernel 6.6.56 on an x86_64 (/dev/hvc0)\r\r\r\r\n(domU) \r\r\r\r\r\n" (spawn_id exp4) match regular expression "\nWelcome to Alpine Linux"? Gate "\nWelcome to Alpine Linux"? gate=no > > Fix this by using -notransfer flag to keep matched part in the buffer. > > Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> Acked-by: Andrew Cooper <andrew.cooper3@citix.com>
diff --git a/automation/scripts/console.exp b/automation/scripts/console.exp index c27f893dfba7..834a08db1b95 100755 --- a/automation/scripts/console.exp +++ b/automation/scripts/console.exp @@ -48,11 +48,11 @@ if {[info exists env(BOOT_MSG)]} { if {[info exists env(LOG_MSG)]} { expect { -re "$env(PASSED)" { - expect -re "$env(LOG_MSG)" + expect -notransfer -re "$env(LOG_MSG)" exit 0 } -re "$env(LOG_MSG)" { - expect -re "$env(PASSED)" + expect -notransfer -re "$env(PASSED)" exit 0 } }
Expect normally discards initial part of its buffer after matching the patter, before looking for the next one. If both PASSED and LOG_MSG happen to be in the buffer at the same time, depending on their order, only one will be matched and the waiting for the other will timeout. Example expect -d output of this happening (parts eclipsed for brevity): expect: does "\r\r\r\nWelcome to Alpine Linux 3.18\r\r\r\n...\r\r\r\r\n(domU) + echo 'pci test passed'\r\r\r\r\n(domU) pci test passed\r\r\r\r..." (spawn_id exp4) match regular expression "pci test passed"? Gate "pci test passed"? gate=yes re=yes ... Gate keeper glob pattern for '\nWelcome to Alpine Linux' is ' Welcome to Alpine Linux'. Activating booster. expect: does "'\r\r\r\r\n(domU) pci test passed\r\r\r\r\n(domU) [ ok ]\r\r\r\r\n(domU) [ ok ]\r\r\r\r\n(domU) \r\r\r\r\r\n(domU) domU Welcome to Alpine Linux 3.18\r\r\r\r\n(domU) \rKernel 6.6.56 on an x86_64 (/dev/hvc0)\r\r\r\r\n(domU) \r\r\r\r\r\n" (spawn_id exp4) match regular expression "\nWelcome to Alpine Linux"? Gate "\nWelcome to Alpine Linux"? gate=no Fix this by using -notransfer flag to keep matched part in the buffer. Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> --- automation/scripts/console.exp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)