This commit is contained in:
2026-09-20 14:26:49 +08:00
parent b3162c6d69
commit b12e5c6ffa
@@ -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();
}
}