优化
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user