From b12e5c6ffaf2156c5767de59ca5073f8df4be1a0 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sun, 20 Sep 2026 14:26:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/service/PdaPackageStorageTest.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 file/src/test/java/com/baiyue/file/service/PdaPackageStorageTest.java diff --git a/file/src/test/java/com/baiyue/file/service/PdaPackageStorageTest.java b/file/src/test/java/com/baiyue/file/service/PdaPackageStorageTest.java new file mode 100644 index 000000000..e0ca4e4f8 --- /dev/null +++ b/file/src/test/java/com/baiyue/file/service/PdaPackageStorageTest.java @@ -0,0 +1,52 @@ +package com.baiyue.file.service; + +import com.baiyue.common.core.exception.BizException; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; +import org.springframework.mock.web.MockMultipartFile; + +import java.io.ByteArrayOutputStream; +import java.nio.file.Path; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +class PdaPackageStorageTest { + @TempDir Path root; + + @Test + void rejectsWrongContentAndExtension() { + var storage = new PdaPackageStorage(root.toString()); + var invalid = new MockMultipartFile("file", "app.wgt", "application/octet-stream", new byte[] {1, 2, 3}); + assertThatThrownBy(() -> storage.store("domestic", "11111111-1111-1111-1111-111111111111", "wgt", invalid)) + .isInstanceOf(BizException.class); + var wrongName = new MockMultipartFile("file", "app.apk", "application/octet-stream", archive("manifest.json")); + assertThatThrownBy(() -> storage.store("domestic", "11111111-1111-1111-1111-111111111111", "wgt", wrongName)) + .isInstanceOf(BizException.class); + } + + @Test + void validatesPackageStructureAndReadsStoredContent() throws Exception { + var storage = new PdaPackageStorage(root.toString()); + byte[] content = archive("manifest.json"); + var file = new MockMultipartFile("file", "app.wgt", "application/octet-stream", content); + var stored = storage.store("overseas", "22222222-2222-2222-2222-222222222222", "wgt", file); + assertThat(stored.key()).isEqualTo("overseas/22222222-2222-2222-2222-222222222222.wgt"); + assertThat(stored.sha256()).hasSize(64); + assertThat(storage.load(stored.key()).getContentAsByteArray()).isEqualTo(content); + assertThatThrownBy(() -> storage.load("../domestic/22222222-2222-2222-2222-222222222222.wgt")) + .isInstanceOf(BizException.class); + } + + private static byte[] archive(String entryName) throws Exception { + var output = new ByteArrayOutputStream(); + try (var zip = new ZipOutputStream(output)) { + zip.putNextEntry(new ZipEntry(entryName)); + zip.write("{}".getBytes(java.nio.charset.StandardCharsets.UTF_8)); + zip.closeEntry(); + } + return output.toByteArray(); + } +}