sim:tests: Add robot script for CantripOS builtin applications Add script to shodan_boot.robot to run applications as subtests. Change-Id: I511ee959054a7ac57ac16037bdf2bdbc619b1127
diff --git a/shodan_boot.robot b/shodan_boot.robot index 8d7edcc..02bd00e 100644 --- a/shodan_boot.robot +++ b/shodan_boot.robot
@@ -10,10 +10,6 @@ ${ROOTDIR} ${CURDIR}/../.. ${SCRIPT} sim/config/shodan.resc ${PROMPT} CANTRIP> -${UART0} sysbus.uart0 -${UART1} sysbus.uart1 -${UART2} sysbus.uart2 -${UART3} sysbus.uart3 ${UART5} sysbus.uart5 ${MATCHA_BUNDLE_RELEASE} ${ROOTDIR}/out/matcha-bundle-release.elf @@ -30,11 +26,29 @@ Execute Command $tar=@${FLASH_TAR} Execute Command $cpio=@${CPIO} Execute Script ${SCRIPT} -# Add UART5 virtual time so we can check the machine execution time + # Add UART5 virtual time so we can check the machine execution time Execute Command uart5-analyzer TimestampFormat Virtual Execute Command cpu0 IsHalted false - Set Default Uart Timeout 300 + Set Default Uart Timeout 10 + Create Log Tester ${LOG_TIMEOUT} +Install App + [Arguments] ${app} + # UART analyzer is marked as transient so it needs to be set up at subtest. + Execute Command showAnalyzer "uart5-analyzer" ${UART5} Antmicro.Renode.Analyzers.LoggingUartAnalyzer + # Disable uart5 timestamp diff + Execute Command uart5-analyzer TimestampFormat None + Write Line To Uart install ${app}.app + Wait For Line on Uart Application "${app}" installed + Write Line To Uart start ${app} + Wait For Line On Uart Bundle "${app}" started + +Uninstall App + [Arguments] ${app} + Write Line To Uart stop ${app} + Wait For Line On Uart Bundle "${app}" stopped + Write Line To Uart uninstall ${app} + Wait For Line On Uart Bundle "${app}" uninstalled *** Test Cases *** Prepare Flash Tarball @@ -43,27 +57,119 @@ Run Process ln -sfr ${CANTRIP_KERNEL_RELEASE} ${OUT_TMP}/kernel Run Process ln -sfr ${CANTRIP_ROOTSERVER_RELEASE} ${OUT_TMP}/capdl-loader Run Process tar -C ${OUT_TMP} -cvhf ${ROOTDIR}/${FLASH_TAR} matcha-tock-bundle kernel capdl-loader - Provides initialization + Provides flash-tarball -Shodan Smoke Test - [Documentation] Test TockOS boot, seL4 boot and ML Execution - [Tags] ml tock seL4 uart - Requires initialization + +Test Shodan Boot + Requires flash-tarball Prepare Machine - Create Log Tester ${LOG_TIMEOUT} - ${tockuart}= Create Terminal Tester ${UART0} - ${sel4uart}= Create Terminal Tester ${UART5} Start Emulation + Create Terminal Tester ${UART5} + Wait For Prompt On Uart ${PROMPT} + # The following commented lines would cause the test failed to be saved. + Provides shodan-bootup - Wait For Line On Uart load_sel4() completed successfully testerId=${tockuart} - Wait For Line On Uart Booting all finished, dropped to user space testerId=${sel4uart} - Wait For Prompt On Uart ${PROMPT} testerId=${sel4uart} - Write Line To Uart install mobilenet_v1_emitc_static.model testerId=${sel4uart} -# Bundle ID needs to be retrieved at runtime - ${l}= Wait For Line On Uart Model "([^"]+)" installed testerId=${sel4uart} treatAsRegex=true - Write Line to Uart test_mlexecute anything ${l.groups[0]} testerId=${sel4uart} - Wait For Prompt On Uart ${PROMPT} testerId=${sel4uart} +Test Smoke Test + Requires shodan-bootup + # UART analyzer is marked as transient so it needs to be set up at subtest. + Execute Command showAnalyzer "uart5-analyzer" ${UART5} Antmicro.Renode.Analyzers.LoggingUartAnalyzer + # Add UART5 virtual time so we can check the machine execution time + Execute Command uart5-analyzer TimestampFormat Virtual + Write Line To Uart install mobilenet_v1_emitc_static.model + # Bundle ID needs to be retrieved at runtime + ${l}= Wait For Line On Uart Model "([^"]+)" installed treatAsRegex=true + Write Line to Uart test_mlexecute anything ${l.groups[0]} + Wait For Prompt On Uart ${PROMPT} Wait For LogEntry "main returned: ", 0 -# Test timer - Write Line To Uart test_timer_blocking 10 testerId=${sel4uart} + # Test timer + Write Line To Uart test_timer_blocking 10 Wait For LogEntry Timer completed. + +Test C hello app (no SDK) + Requires shodan-bootup + Install App hello + Wait For Line On Uart I am a C app! + Wait For Line On Uart Done + Uninstall App hello + +Test SDK keyval support (+SecurityCoordinator) + Requires shodan-bootup + Install App keyval + Wait For Line On Uart read(foo) failed as expected + Wait For Line On Uart write ok + Wait For Line On Uart read returned [49, 50, 51, 0 + Wait For Line On Uart delete ok + Wait For Line On Uart delete ok (for missing key) + Uninstall App keyval + +Test SDK log support + Requires shodan-bootup + Install App logtest + Wait For Line On Uart ping! + Wait For Line On Uart DONE + Uninstall App logtest + +Test panic app + Requires shodan-bootup + Install App panic + Wait For Line On Uart Goodbye, cruel world + Uninstall App panic + +Test SDK + TimerService (oneshot & periodic) + Requires shodan-bootup + Install App timer + Wait For Line On Uart sdk_timer_cancel returned Err(SDKInvalidTimer) with nothing running + Wait For Line On Uart sdk_timer_poll returned Ok(0) with nothing running + Wait For Line On Uart sdk_timer_oneshot returned Err(SDKNoSuchTimer) with an invalid timer id + # oneshot + Wait For Line On Uart Timer 0 started + Wait For Line On Uart Timer 0 completed + # periodic + Wait For Line On Uart Timer 1 started + Wait For Line On Uart Timer completed: mask 0b0010 ms 75 + Wait For Line On Uart Timer completed: mask 0b0010 ms 150 + # NB: 10 timer events + # NB: intentionally match "cancel"; the code has a typo so prints "canceld" :) + Wait For Line On Uart Timer 1 cancel + # 2x periodic with 2:1 durations + Wait For Line On Uart Timer 1 started + Wait For Line On Uart Timer 2 started + Wait For Line On Uart Timer completed: mask 0b0010 1 \ 1 2 \ 0 + Wait For Line On Uart Timer completed: mask 0b0010 1 \ 2 2 \ 0 + # NB: lots of timer events (2 timers running) + Wait For Line On Uart Timer completed: mask 0b0100 1 14 2 \ 7 + Wait For Line On Uart Timer 2 cancel + Wait For Line On Uart Timer 1 cancel + Wait For Line On Uart DONE + Uninstall App timer + +Test SDK + MlCoordinator (oneshot & periodic) + Requires shodan-bootup + # UART analyzer is marked as transient so it needs to be set up at subtest. + Execute Command showAnalyzer "uart5-analyzer" ${UART5} Antmicro.Renode.Analyzers.LoggingUartAnalyzer + # Add UART5 virtual time so we can check the machine execution time + Execute Command uart5-analyzer TimestampFormat Virtual + Write Line To Uart install mltest.app + Wait For Line On Uart Application "mltest" installed + Write Line To Uart install mobilenet_v1_emitc_static.model + Wait For Line On Uart Model "mobilenet_v1_emitc_static" installed + Write Line to Uart start mltest + Wait For Line On Uart sdk_model_oneshot(nonexistent) returned Err(SDKNoSuchModel) (as expected) + # start oneshot + Wait For Line On Uart mobilenet_v1_emitc_static started + Wait For LogEntry "main returned: ", 0 + Wait For Line On Uart mobilenet_v1_emitc_static completed + # start periodic + Wait For Line On Uart Model mobilenet_v1_emitc_static started + # NB: 10 runs of the model + FOR ${i} IN RANGE 10 + Wait For LogEntry "main returned: ", 0 + Wait For Line On Uart Model completed: mask 0b0001 + END + Wait For Line On Uart DONE + Write Line To Uart stop mltest + Wait For Line On Uart Bundle "mltest" stopped + Write Line To Uart uninstall mltest + Wait For Line On Uart Bundle "mltest" uninstalled + Write Line To Uart uninstall mobilenet_v1_emitc_static + Wait For Line On Uart Bundle "mobilenet_v1_emitc_static" uninstalled