@@ -9,7 +9,8 @@ S3_LISTING_FILE=""
99
1010cleanup ()
1111{
12- rm -rf " $OUTPUT_DIR " " ${OUTPUT_DIR_S3:- } " " $S3_LISTING_FILE "
12+ rm -rf " $OUTPUT_DIR " " ${OUTPUT_DIR_S3:- } " " ${OUTPUT_DIR_OVERRIDE:- } " \
13+ " ${EMPTY_BASE_PATH:- } " " $S3_LISTING_FILE "
1314}
1415
1516trap cleanup EXIT
@@ -87,11 +88,41 @@ assert_equals()
8788 fi
8889}
8990
91+ assert_fails_with ()
92+ {
93+ local expected_msg=" $1 "
94+ shift
95+ local output=" "
96+
97+ if output=$( " $@ " 2>&1 ) ; then
98+ echo " ERROR: expected command to fail: $* " >&2
99+ exit 1
100+ fi
101+
102+ if [[ -n " $expected_msg " ]] && ! grep -Fq " $expected_msg " <<< " $output" ; then
103+ echo " ERROR: expected error message '$expected_msg ', got: $output " >&2
104+ exit 1
105+ fi
106+ }
107+
108+ assert_versions_json_match ()
109+ {
110+ local left=" $1 "
111+ local right=" $2 "
112+
113+ if ! diff <( jq -S ' del(.generated_at)' " $left " ) \
114+ <( jq -S ' del(.generated_at)' " $right " ) > /dev/null; then
115+ echo " ERROR: versions.json mismatch between $left and $right " >&2
116+ diff -u <( jq -S ' del(.generated_at)' " $left " ) \
117+ <( jq -S ' del(.generated_at)' " $right " ) >&2 || true
118+ exit 1
119+ fi
120+ }
121+
90122setup_local_fixture " $OUTPUT_DIR "
91123
92124BASE_PATH=" $OUTPUT_DIR " \
93125AWS_S3_REMOTE_DISCOVERY=false \
94- LATEST_VERSION=4.2.7 \
95126BASE_URL=https://packages.example.test \
96127" $GENERATOR "
97128
@@ -125,13 +156,18 @@ if ! jq -e '.versions[] | select(.version == "4.2.7") | .artifacts.windows.win64
125156 exit 1
126157fi
127158
159+ if ! jq -e ' .versions[] | select(.version == "4.2.7") | .artifacts.macos.pkg' \
160+ " $OUTPUT_DIR /versions.json" > /dev/null; then
161+ echo " ERROR: versions.json missing macOS pkg artifact for 4.2.7" >&2
162+ exit 1
163+ fi
164+
128165echo " packages-index generator test passed"
129166
130167OUTPUT_DIR_S3=" $( mktemp -d) "
131168setup_s3_listing_fixture
132169
133170BASE_PATH=" $OUTPUT_DIR_S3 " \
134- LATEST_VERSION=4.2.7 \
135171BASE_URL=https://packages.example.test \
136172AWS_S3_BUCKET=packages.example.test \
137173AWS_S3_REMOTE_DISCOVERY=true \
@@ -140,11 +176,45 @@ AWS_S3_LISTING_FILE="$S3_LISTING_FILE" \
140176
141177assert_equals " $OUTPUT_DIR_S3 /latest-version.txt" " 4.2.7"
142178assert_contains " $OUTPUT_DIR_S3 /index.html" " fluent-bit-4.2.7-win64.exe"
179+ assert_versions_json_match " $OUTPUT_DIR /versions.json" " $OUTPUT_DIR_S3 /versions.json"
143180
144- if ! jq -e ' .latest == "4.2.7" and (.versions | length) == 2' " $OUTPUT_DIR_S3 /versions.json" > /dev/null; then
145- echo " ERROR: S3 listing parse did not produce expected versions" >&2
181+ if ! jq -e ' .latest == "4.2.7" and .base_url == "https://packages.example.test" and (.versions | length) == 2' \
182+ " $OUTPUT_DIR_S3 /versions.json" > /dev/null; then
183+ echo " ERROR: S3 listing parse did not produce expected catalog metadata" >&2
146184 jq . " $OUTPUT_DIR_S3 /versions.json" >&2 || true
147185 exit 1
148186fi
149187
150188echo " packages-index S3 listing parse test passed"
189+
190+ OUTPUT_DIR_OVERRIDE=" $( mktemp -d) "
191+ setup_local_fixture " $OUTPUT_DIR_OVERRIDE "
192+
193+ BASE_PATH=" $OUTPUT_DIR_OVERRIDE " \
194+ AWS_S3_REMOTE_DISCOVERY=false \
195+ LATEST_VERSION=4.2.6 \
196+ BASE_URL=https://packages.example.test \
197+ " $GENERATOR "
198+
199+ assert_equals " $OUTPUT_DIR_OVERRIDE /latest-version.txt" " 4.2.6"
200+ if ! jq -e ' .latest == "4.2.6"' " $OUTPUT_DIR_OVERRIDE /versions.json" > /dev/null; then
201+ echo " ERROR: LATEST_VERSION override did not update latest field" >&2
202+ exit 1
203+ fi
204+
205+ assert_fails_with " LATEST_VERSION '9.9.9' was not found among discovered versions" \
206+ env BASE_PATH=" $OUTPUT_DIR " AWS_S3_REMOTE_DISCOVERY=false LATEST_VERSION=9.9.9 \
207+ BASE_URL=https://packages.example.test " $GENERATOR "
208+
209+ EMPTY_BASE_PATH=" $( mktemp -d) "
210+ assert_fails_with " ERROR: no objects found under" \
211+ env BASE_PATH=" $EMPTY_BASE_PATH " AWS_S3_REMOTE_DISCOVERY=false \
212+ BASE_URL=https://packages.example.test " $GENERATOR "
213+
214+ assert_fails_with " AWS_S3_LISTING_FILE does not exist" \
215+ env BASE_PATH=" $OUTPUT_DIR_S3 " AWS_S3_REMOTE_DISCOVERY=true \
216+ AWS_S3_BUCKET=packages.example.test \
217+ AWS_S3_LISTING_FILE=/tmp/does-not-exist-packages-index-test \
218+ BASE_URL=https://packages.example.test " $GENERATOR "
219+
220+ echo " packages-index validation error handling test passed"
0 commit comments