From 1a19547ec8a134bb0a78fc56266dcc0e48ab2c90 Mon Sep 17 00:00:00 2001 From: Daniel Kennedy Date: Tue, 10 Mar 2026 15:40:25 -0400 Subject: [PATCH] Add regression tests for CJK characters --- .github/workflows/test.yml | 139 +++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d291b02..e0aa942 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -154,3 +154,142 @@ jobs: } Write-Host "Successfully downloaded artifact without decompressing: $rawFile (size: $($fileInfo.Length) bytes)" shell: pwsh + + # Test uploading and downloading artifacts with CJK (Chinese, Japanese, Korean) characters + # Regression test: certain non-ASCII chars (e.g. U+571F 土) caused 400 errors from + # Azure Blob Storage due to encoding issues in the Content-Disposition / rscd parameter + - name: Create artifacts with CJK names + shell: bash + run: | + mkdir -p path/to/cjk-artifacts + # Chinese - 土 (U+571F) known to fail, 日 (U+65E5) known to work + echo "Content for 土" > path/to/cjk-artifacts/file-土.txt + echo "Content for 中文测试" > path/to/cjk-artifacts/file-中文测试.txt + # Japanese - katakana and kanji + echo "Content for テスト" > path/to/cjk-artifacts/file-テスト.txt + echo "Content for 東京タワー" > path/to/cjk-artifacts/file-東京タワー.txt + # Korean - Hangul + echo "Content for 테스트" > path/to/cjk-artifacts/file-테스트.txt + echo "Content for 서울시" > path/to/cjk-artifacts/file-서울시.txt + + - name: Upload CJK artifact - Chinese 土 + uses: actions/upload-artifact@v7 + with: + name: CJK-土-${{ matrix.runs-on }} + path: path/to/cjk-artifacts/file-土.txt + archive: false + + - name: Upload CJK artifact - Chinese 中文测试 + uses: actions/upload-artifact@v7 + with: + name: CJK-中文测试-${{ matrix.runs-on }} + path: path/to/cjk-artifacts/file-中文测试.txt + archive: false + + - name: Upload CJK artifact - Japanese テスト + uses: actions/upload-artifact@v7 + with: + name: CJK-テスト-${{ matrix.runs-on }} + path: path/to/cjk-artifacts/file-テスト.txt + archive: false + + - name: Upload CJK artifact - Japanese 東京タワー + uses: actions/upload-artifact@v7 + with: + name: CJK-東京タワー-${{ matrix.runs-on }} + path: path/to/cjk-artifacts/file-東京タワー.txt + archive: false + + - name: Upload CJK artifact - Korean 테스트 + uses: actions/upload-artifact@v7 + with: + name: CJK-테스트-${{ matrix.runs-on }} + path: path/to/cjk-artifacts/file-테스트.txt + archive: false + + - name: Upload CJK artifact - Korean 서울시 + uses: actions/upload-artifact@v7 + with: + name: CJK-서울시-${{ matrix.runs-on }} + path: path/to/cjk-artifacts/file-서울시.txt + archive: false + + - name: Download CJK artifact - Chinese 土 + uses: ./ + with: + name: CJK-土-${{ matrix.runs-on }} + path: cjk-download/土 + + - name: Download CJK artifact - Chinese 中文测试 + uses: ./ + with: + name: CJK-中文测试-${{ matrix.runs-on }} + path: cjk-download/中文测试 + + - name: Download CJK artifact - Japanese テスト + uses: ./ + with: + name: CJK-テスト-${{ matrix.runs-on }} + path: cjk-download/テスト + + - name: Download CJK artifact - Japanese 東京タワー + uses: ./ + with: + name: CJK-東京タワー-${{ matrix.runs-on }} + path: cjk-download/東京タワー + + - name: Download CJK artifact - Korean 테스트 + uses: ./ + with: + name: CJK-테스트-${{ matrix.runs-on }} + path: cjk-download/테스트 + + - name: Download CJK artifact - Korean 서울시 + uses: ./ + with: + name: CJK-서울시-${{ matrix.runs-on }} + path: cjk-download/서울시 + + - name: Verify CJK artifact downloads + shell: bash + run: | + set -e + fail=0 + + check_file() { + local file="$1" + local expected="$2" + if [ ! -f "$file" ]; then + echo "FAIL: Missing file: $file" + fail=1 + return + fi + actual=$(cat "$file") + if [ "$actual" != "$expected" ]; then + echo "FAIL: Content mismatch in $file" + echo " Expected: '$expected'" + echo " Got: '$actual'" + fail=1 + return + fi + echo "PASS: $file" + } + + echo "=== Chinese ===" + check_file "cjk-download/土/file-土.txt" "Content for 土" + check_file "cjk-download/中文测试/file-中文测试.txt" "Content for 中文测试" + + echo "=== Japanese ===" + check_file "cjk-download/テスト/file-テスト.txt" "Content for テスト" + check_file "cjk-download/東京タワー/file-東京タワー.txt" "Content for 東京タワー" + + echo "=== Korean ===" + check_file "cjk-download/테스트/file-테스트.txt" "Content for 테스트" + check_file "cjk-download/서울시/file-서울시.txt" "Content for 서울시" + + if [ "$fail" -ne 0 ]; then + echo "Some CJK artifact checks failed" + ls -alR cjk-download/ || true + exit 1 + fi + echo "All CJK artifact downloads verified successfully"