From c9619a490490a8ed29ea002a2f358bbebfb80ef4 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Mon, 28 May 2018 16:25:53 +0100 Subject: [PATCH] tests: Test pull behaviour when network timeouts occur MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extend test-pull-repeated.sh to test error 408 as well as error 500, to ensure that the new retry-on-network-timeout code in ostree-repo-pull.c correctly retries. Rather than the 200 iterations needed for the error 500 tests, only do 5 iterations. The pull code internally does 5 retries (by default), which means a full iteration count of 25. That seems to be sufficient to make the tests reliably pass, in my testing — we can always bump it up to 200 / 5 = 40 in future if needed (to put it in parity with the error 500 tests). Signed-off-by: Philip Withnall Closes: #1594 Approved by: jlebon --- tests/test-pull-repeated.sh | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/tests/test-pull-repeated.sh b/tests/test-pull-repeated.sh index f43f720f..bfc7148a 100755 --- a/tests/test-pull-repeated.sh +++ b/tests/test-pull-repeated.sh @@ -23,12 +23,14 @@ set -euo pipefail . $(dirname $0)/libtest.sh -echo "1..1" +echo "1..2" COMMIT_SIGN="--gpg-homedir=${TEST_GPG_KEYHOME} --gpg-sign=${TEST_GPG_KEYID_1}" + +# Test pulling from a repo which gives error 500 (internal server error) a lot of the time. setup_fake_remote_repo1 "archive" "${COMMIT_SIGN}" --random-500s=50 -cd ${test_tmpdir} +pushd ${test_tmpdir} ostree_repo_init repo --mode=archive ${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo for x in $(seq 200); do @@ -42,4 +44,26 @@ done ${CMD_PREFIX} ostree --repo=repo fsck ${CMD_PREFIX} ostree --repo=repo rev-parse main +popd echo "ok repeated pull after 500s" + +# Now test from a repo which gives error 408 (request timeout) a lot of the time. +rm ostree-srv httpd repo -rf +setup_fake_remote_repo1 "archive" "${COMMIT_SIGN}" --random-408s=50 + +pushd ${test_tmpdir} +ostree_repo_init repo --mode=archive +${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo +for x in $(seq 40); do + if ${CMD_PREFIX} ostree --repo=repo pull --mirror origin main 2>err.txt; then + echo "Success on iteration ${x}" + break; + fi + assert_file_has_content err.txt "\(408.*Request Timeout\)\|\(HTTP 408\)" +done + +${CMD_PREFIX} ostree --repo=repo fsck +${CMD_PREFIX} ostree --repo=repo rev-parse main + +popd +echo "ok repeated pull after 408s"