*** Comments ***
Stress test for shodan system.

*** Variables ***
${MAX_ITER}                      100

${LOG_TIMEOUT}                   2
${ROOTDIR}                       ${CURDIR}/../..
${SCRIPT}                        sim/config/shodan.resc
${PROMPT}                        CANTRIP>
${UART5}                         sysbus.uart5

${MATCHA_BUNDLE_RELEASE}         ${ROOTDIR}/out/matcha-bundle-release.elf
${CANTRIP_KERNEL_RELEASE}        ${ROOTDIR}/out/cantrip/riscv32-unknown-elf/release/kernel/kernel.elf
${CANTRIP_ROOTSERVER_RELEASE}    ${ROOTDIR}/out/cantrip/riscv32-unknown-elf/release/capdl-loader

${OUT_TMP}                       ${ROOTDIR}/out/tmp

${FLASH_RELEASE_TAR}             out/ext_flash_release.tar
${CPIO_RELEASE}                  out/cantrip/riscv32-unknown-elf/release/ext_builtins.cpio

*** Keywords ***
Prepare Machine
    Execute Command             path set @${ROOTDIR}
    Execute Command             $tar=@${FLASH_RELEASE_TAR}
    Execute Command             $cpio=@${CPIO_RELEASE}
    Execute Command             $kernel=@${CANTRIP_KERNEL_RELEASE}
    Set Default Uart Timeout    10
    Create Log Tester           ${LOG_TIMEOUT}
    Execute Script              ${SCRIPT}
    # Add UART5 virtual time so we can check the machine execution time
    Execute Command             uart5-analyzer TimestampFormat Virtual
    Execute Command             cpu0 IsHalted false

Stop App
    [Arguments]                 ${app}
    Write Line To Uart          stop ${app}
    Wait For Line On Uart       Bundle "${app}" stopped

*** Test Cases ***
Prepare Flash Tarball
    Run Process                 mkdir  -p    ${ROOTDIR}/out/tmp
    Run Process                 cp     -f  ${MATCHA_BUNDLE_RELEASE}       ${OUT_TMP}/matcha-tock-bundle-release
    Run Process                 riscv32-unknown-elf-strip  ${OUT_TMP}/matcha-tock-bundle-release
    Run Process                 riscv32-unknown-elf-objcopy  -O  binary  -g  ${OUT_TMP}/matcha-tock-bundle-release  ${OUT_TMP}/matcha-tock-bundle.bin
    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_RELEASE_TAR}  matcha-tock-bundle.bin  kernel  capdl-loader
    Provides                    flash-tarball

Test Shodan Boot
    Requires                    flash-tarball
    Prepare Machine
    Start Emulation
    Create Terminal Tester      ${UART5}
    Wait For Prompt On Uart     ${PROMPT}

    FOR    ${iter}    IN RANGE    ${MAX_ITER}
      IF     ${{random.randint(0, 2)}} == 0
        Write Line to Uart          start hello
        Wait For Line On Uart       Done, sleeping in WFI loop
        Stop App                    hello
      END

      IF     ${{random.randint(0, 2)}} == 0
        Write Line to Uart          start fibonacci
        Wait For Line On Uart       [10]
        Stop App                    fibonacci
      END

      IF     ${{random.randint(0, 2)}} == 0
        Write Line to Uart          start keyval
        Wait For Line On Uart       delete ok (for missing key)
        Stop App                    keyval
      END

      IF     ${{random.randint(0, 2)}} == 0
        Write Line to Uart          start logtest
        Wait For Line On Uart       DONE
        Stop App                    logtest
      END

      IF     ${{random.randint(0, 2)}} == 0
        Write Line to Uart          start panic
        Wait For Line On Uart       Goodbye, cruel world
        Stop App                    panic
      END

      IF     ${{random.randint(0, 2)}} == 0
        Write Line to Uart          start timer
        Wait For Line On Uart       DONE!
        Stop App                    timer
      END

      IF     ${{random.randint(0, 4)}} == 0
        Write Line to Uart          start mltest
        Wait For Line On Uart       DONE!
        Stop App                    mltest
      END

      Write Line to Uart          mdebug
      Wait For Prompt On Uart     ${PROMPT}
    END
