From f8fb35c27aa68e68b4e1da92695dd000df3abec5 Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Fri, 11 Jun 2021 15:28:12 -0400 Subject: [PATCH] Make sure chip-all-clusters-app is ready before we try to do PASE setup with it. We were racing startup of chip-tool against that of chip-all-clusters-app, and if the former started faster it would send the first PASE handshake message before the latter was ready. Then it would wait 5 seconds before resending, which slowed the test down quite a bit --- .github/workflows/tests.yaml | 3 ++- scripts/tests/test_suites.sh | 25 +++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 448fc94fb6f20d..7f07f46cb42bd0 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -75,7 +75,8 @@ jobs: with: submodules: true - name: Setup Environment - run: brew install openssl pkg-config + # coreutils for stdbuf + run: brew install openssl pkg-config coreutils - name: Try to ensure the directories for core dumping and diagnostic log collection exist and we can write them. run: | sudo chown ${USER} /cores || true diff --git a/scripts/tests/test_suites.sh b/scripts/tests/test_suites.sh index 997f9ac08e03b7..65e6b960389cd4 100755 --- a/scripts/tests/test_suites.sh +++ b/scripts/tests/test_suites.sh @@ -54,8 +54,29 @@ for j in "${iter_array[@]}"; do echo " ===== Running test: $i" echo " * Starting cluster server" rm -rf /tmp/chip_tool_config.ini - out/debug/chip-all-clusters-app & - background_pid=$! + # This part is a little complicated. We want to + # 1) Start chip-all-clusters-app in the background + # 2) Pipe its output through tee so we can wait until it's ready for a + # PASE handshake. + # 3) Save its pid off so we can kill it. + # + # The subshell with echoing of $! to a file descriptor and + # then reading things out of there accomplishes item 3; + # otherwise $! would be the last-started command which would + # be the tee. This part comes from https://stackoverflow.com/a/3786955 + # and better ideas are welcome. + # + # The stdbuf -o0 is to make sure our output is flushed through + # tee expeditiously; otherwise it will buffer things up and we + # will never see the string we want. + ( + stdbuf -o0 out/debug/chip-all-clusters-app & + echo $! >&3 + ) 3>/tmp/pid | tee /tmp/all-clusters-log & + background_pid="$(