blob: 1a0c4c70cd69fed5e86f8df6f427fdaa0ec2487c [file] [log] [blame] [edit]
*** Keywords ***
Create Machine
Execute Command i @scripts/single-node/sifive_fe310.resc
Create Tock Machine
Execute Command i @scripts/single-node/stm32f4_tock.resc
Create Trivial Machine
Execute Command mach create
Execute Command machine LoadPlatformDescriptionFromString "uart0: UART.TrivialUart @ sysbus 0x1000"
Write Bytes To Trivial Uart
[Arguments] ${bytes}
# Just @{bytes} does not work as $bytes is not list or list-like.
# It does work for str though, just not bytes.
FOR ${byte} IN @{{[b for b in $bytes]}}
Execute Command sysbus.uart0 WriteDoubleWord 0 ${byte}
END
*** Test Cases ***
Should Fail On Non-Existing UART
Create Machine
Run Keyword And Expect Error
... *not found or of wrong type*
... Create Terminal Tester sysbus.non_existing_uart
Should Not Require Tester Id When Single Tester
Create Machine
Create Terminal Tester sysbus.uart0
Wait For Line On Uart ZEPHYR
Should Require Tester Id When Two Testers
Create Machine
Create Terminal Tester sysbus.uart0
Create Terminal Tester sysbus.uart1
Run Keyword And Expect Error
... *There is more than one tester available*
... Wait For Line On Uart ZEPHYR
Should Respect Tester Id In The Keyword When Two Testers
Create Machine
${u0}= Create Terminal Tester sysbus.uart0
${u1}= Create Terminal Tester sysbus.uart1
Wait For Line On Uart ZEPHYR testerId=${u0}
Should Respect The Default Tester Id
Create Machine
${u0}= Create Terminal Tester sysbus.uart0
${u1}= Create Terminal Tester sysbus.uart1
Set Default Tester ${u0}
Wait For Line On Uart ZEPHYR
Should Use Tester Id Selected By Keyword
Create Machine
${u0}= Create Terminal Tester sysbus.uart0
${u1}= Create Terminal Tester sysbus.uart1
Set Default Tester ${u1}
Wait For Line On Uart ZEPHYR testerId=${u0}
Should Respect The Default Tester Id 2
Create Machine
${u0}= Create Terminal Tester sysbus.uart0
${u1}= Create Terminal Tester sysbus.uart1
Set Default Tester ${u1}
Run Keyword And Expect Error
... *Terminal tester failed!*
... Wait For Line On Uart ZEPHYR timeout=1
Should Overwrite The Default Tester Id
Create Machine
${u0}= Create Terminal Tester sysbus.uart0
${u1}= Create Terminal Tester sysbus.uart1
Set Default Tester ${u1}
Set Default Tester ${u0}
Wait For Line On Uart ZEPHYR
Should Allow To Clear The Default Tester Id
Create Machine
${u0}= Create Terminal Tester sysbus.uart0
Create Terminal Tester sysbus.uart1
Set Default Tester ${u0}
Set Default Tester null
Run Keyword And Expect Error
... *There is more than one tester available*
... Wait For Line On Uart ZEPHYR
Should Not Allow Waiting For Byte String On A Tester Not Created In Binary Mode
Create Machine
Create Terminal Tester sysbus.uart0 defaultPauseEmulation=true
Run Keyword And Expect Error
... *Attempt to wait for bytes on a tester configured in text mode*
... Wait For Bytes On Uart 59 52 20 4f 53 timeout=1
Should Not Allow Waiting For Text String On A Tester Created In Binary Mode
Create Machine
Create Terminal Tester sysbus.uart0 defaultPauseEmulation=true binaryMode=true
Run Keyword And Expect Error
... *Attempt to wait for text on a tester configured in binary mode*
... Wait For Line On Uart ZEPHYR timeout=1
Should Allow Waiting For Byte String Spanning Lines
Create Machine
Create Terminal Tester sysbus.uart0 defaultPauseEmulation=true binaryMode=true
# ****\r\nsh
Wait For Bytes On Uart 2a 2a 2a 2a 0d 0a 73 68
Should Allow Waiting For Immediately Adjacent Byte Strings
Create Machine
Create Terminal Tester sysbus.uart0 defaultPauseEmulation=true binaryMode=true
# ZEPHYR
Wait For Bytes On Uart 5a 45 50 48 59 52
# R OS, making sure the characters from ZEPHYR have left the match window
Run Keyword And Expect Error
... *Terminal tester failed*
... Wait For Bytes On Uart 52 20 4f 53 timeout=1
# ****\r\nsh
Wait For Bytes On Uart 2a 2a 2a 2a 0d 0a 73 68 timeout=0
# ell
Wait For Bytes On Uart 65 6c 6c timeout=0
Should Allow Waiting For Byte String At Start
Create Machine
Create Terminal Tester sysbus.uart0 defaultPauseEmulation=true binaryMode=true
# ZEPHYR
Wait For Bytes On Uart 5a 45 50 48 59 52
# OS, want at start (but there's a space in the way, so no match)
Run Keyword And Expect Error
... *Terminal tester failed*
... Wait For Bytes On Uart 4f 53 timeout=1 matchStart=true
# And now with the space, which should match (" OS")
Wait For Bytes On Uart 20 4f 53 timeout=0 matchStart=true
Should Allow Waiting For Byte String Containing All Byte Values
Create Trivial Machine
Create Terminal Tester sysbus.uart0 binaryMode=true
${bytes}= Evaluate bytes(range(2**8))
Write Bytes To Trivial Uart ${bytes}
# Exact match required
${m}= Wait For Bytes On Uart ${{$bytes.hex()}} matchStart=true
Should Be Equal ${m.Content} ${bytes}
Should Allow Waiting For Byte String Containing All Byte Values As Regex
Create Trivial Machine
Create Terminal Tester sysbus.uart0 binaryMode=true
${bytes}= Evaluate bytes(range(2**8))
# Queue it up 3 times and then let's match each repetition in a different way
FOR ${i} IN RANGE 3
Write Bytes To Trivial Uart ${bytes}
END
# First one verbatim (might as well not have used a regex)
${bytes_re}= Evaluate "".join(rf"\\x{b:02x}" for b in $bytes)
${m}= Wait For Bytes On Uart ${bytes_re} matchStart=true treatAsRegex=true
Should Be Equal ${m.Content} ${bytes}
# Note that due to how the tester works (evaluating the pattern after every byte written)
# if the entire string hadn't already been printed at assertion time then the ? would not
# be required for a non-greedy match
${m}= Wait For Bytes On Uart \\x00.*?\\xff matchStart=true treatAsRegex=true
Should Be Equal ${m.Content} ${bytes}
# And now with some groups
${m}= Wait For Bytes On Uart (\\x11.*)\\x41.*?([\\x50-\\x5f]+).*?\\xfd treatAsRegex=true
Should Be Equal ${m.Content} ${{$bytes[0x11:-2]}}
Should Be Equal ${m.Groups[0]} ${{bytes(range(0x11, 0x41))}}
Should Be Equal ${m.Groups[1]} ${{bytes(range(0x50, 0x60))}}
Should Fail On Failing String
Create Tock Machine
Create Terminal Tester sysbus.usart2
Register Failing Uart String Entering.*loop treatAsRegex=true
Run Keyword And Expect Error
... *Test failing entry*
... Wait For Line On Uart D2
Should Fail On Failing String On Specific Tester
Create Tock Machine
${tester1}= Create Terminal Tester sysbus.usart3
${tester2}= Create Terminal Tester sysbus.usart2
Register Failing Uart String D1 testerId=${tester2}
Run Keyword And Expect Error
... *Test failing entry*
... Wait For Line On Uart D1 testerId=${tester2}
Should Unregister Failing String
Create Tock Machine
Create Terminal Tester sysbus.usart2
Register Failing Uart String D1
Unregister Failing Uart String D1
Wait For Line On Uart D1