Skip to content
Snippets Groups Projects
Commit 0d95d49b authored by Jan Zickermann's avatar Jan Zickermann
Browse files

OZG-6922 Fix handling of unexpected zip contentType

parent 3534727e
Branches
Tags
No related merge requests found
...@@ -26,10 +26,8 @@ package de.ozgcloud.eingang.xta; ...@@ -26,10 +26,8 @@ package de.ozgcloud.eingang.xta;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.function.Predicate;
import java.util.stream.Stream; import java.util.stream.Stream;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import de.ozgcloud.eingang.common.formdata.IncomingFile; import de.ozgcloud.eingang.common.formdata.IncomingFile;
...@@ -44,14 +42,11 @@ class XtaIncomingFilesMapper { ...@@ -44,14 +42,11 @@ class XtaIncomingFilesMapper {
private final ZipFileExtractor zipFileExtractor; private final ZipFileExtractor zipFileExtractor;
public static final String ZIP_CONTENT_TYPE = "application/zip";
static final Predicate<IncomingFile> IS_ZIP_FILE = contentType -> ZIP_CONTENT_TYPE.equals(contentType.getContentType());
public List<IncomingFile> toIncomingFiles(Collection<XtaFile> messageFiles) { public List<IncomingFile> toIncomingFiles(Collection<XtaFile> messageFiles) {
if (Objects.nonNull(messageFiles)) { if (Objects.nonNull(messageFiles)) {
return messageFiles.stream() return messageFiles.stream()
.map(this::toIncomingFile) .map(this::toIncomingFile)
.flatMap(this::extractZip) .flatMap(this::tryToExtractZip)
.toList(); .toList();
} }
return List.of(); return List.of();
...@@ -66,16 +61,11 @@ class XtaIncomingFilesMapper { ...@@ -66,16 +61,11 @@ class XtaIncomingFilesMapper {
.build(); .build();
} }
Stream<IncomingFile> extractZip(IncomingFile incomingFile) { Stream<IncomingFile> tryToExtractZip(IncomingFile incomingFile) {
if (IS_ZIP_FILE.test(incomingFile)) {
try { try {
List<IncomingFile> extractedZips = zipFileExtractor.extractIncomingFilesSafely(incomingFile); List<IncomingFile> extractedZips = zipFileExtractor.extractIncomingFilesSafely(incomingFile);
return extractedZips.stream(); return extractedZips.stream();
} catch (RuntimeException e) { } catch (RuntimeException e) {
LOG.error("Cannot read source ZIP. Not extracting file", e);
return Stream.of(incomingFile);
}
} else {
return Stream.of(incomingFile); return Stream.of(incomingFile);
} }
} }
......
...@@ -27,10 +27,8 @@ import static org.assertj.core.api.Assertions.*; ...@@ -27,10 +27,8 @@ import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import java.util.List; import java.util.List;
import java.util.UUID;
import java.util.stream.Stream; import java.util.stream.Stream;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
...@@ -49,8 +47,6 @@ class XtaIncomingFilesMapperTest { ...@@ -49,8 +47,6 @@ class XtaIncomingFilesMapperTest {
@Mock @Mock
private ZipFileExtractor extractor; private ZipFileExtractor extractor;
private static final String ZIP_CONTENT_TYPE = "application/zip";
@Nested @Nested
class TestToIncomingFiles { class TestToIncomingFiles {
...@@ -59,12 +55,12 @@ class XtaIncomingFilesMapperTest { ...@@ -59,12 +55,12 @@ class XtaIncomingFilesMapperTest {
var xtaFile = XtaFileTestFactory.create(); var xtaFile = XtaFileTestFactory.create();
var incomingFile = IncomingFileTestFactory.create(); var incomingFile = IncomingFileTestFactory.create();
when(mapper.toIncomingFile(xtaFile)).thenReturn(incomingFile); when(mapper.toIncomingFile(xtaFile)).thenReturn(incomingFile);
when(mapper.extractZip(incomingFile)).thenAnswer(x -> Stream.of(incomingFile)); when(mapper.tryToExtractZip(incomingFile)).thenAnswer(x -> Stream.of(incomingFile));
mapper.toIncomingFiles(List.of(xtaFile, xtaFile)); mapper.toIncomingFiles(List.of(xtaFile, xtaFile));
inOrder(mapper).verify(mapper, calls(2)).toIncomingFile(xtaFile); inOrder(mapper).verify(mapper, calls(2)).toIncomingFile(xtaFile);
inOrder(mapper).verify(mapper, calls(2)).extractZip(incomingFile); inOrder(mapper).verify(mapper, calls(2)).tryToExtractZip(incomingFile);
} }
@Test @Test
...@@ -107,7 +103,7 @@ class XtaIncomingFilesMapperTest { ...@@ -107,7 +103,7 @@ class XtaIncomingFilesMapperTest {
} }
@Nested @Nested
class TestExtractZip { class TestTryToExtractZip {
@Mock @Mock
IncomingFile outFile1; IncomingFile outFile1;
...@@ -115,40 +111,29 @@ class XtaIncomingFilesMapperTest { ...@@ -115,40 +111,29 @@ class XtaIncomingFilesMapperTest {
@Mock @Mock
IncomingFile outFile2; IncomingFile outFile2;
private final IncomingFile zipFile = IncomingFileTestFactory.createBuilder()
.name("attachments.zip")
.build();
@Test @Test
void shouldExtractZipFiles() { void shouldExtractZipFiles() {
var expectedExtractedFiles = List.of(outFile1, outFile2); var expectedExtractedFiles = List.of(outFile1, outFile2);
var zipFile = createTestIncomingFile();
when(extractor.extractIncomingFilesSafely(zipFile)).thenReturn(expectedExtractedFiles); when(extractor.extractIncomingFilesSafely(zipFile)).thenReturn(expectedExtractedFiles);
var extractedFiles = mapper.extractZip(zipFile).toList(); var extractedFiles = mapper.tryToExtractZip(zipFile).toList();
assertThat(extractedFiles).isEqualTo(expectedExtractedFiles); assertThat(extractedFiles).isEqualTo(expectedExtractedFiles);
} }
IncomingFile createTestIncomingFile() {
return IncomingFileTestFactory.createBuilder()
.name("attachments.zip")
.contentType(ZIP_CONTENT_TYPE)
.build();
}
@Test @Test
void shouldIgnoreNonZipFiles() { void shouldIgnoreNonZipFiles() {
when(extractor.extractIncomingFilesSafely(zipFile)).thenThrow(new RuntimeException());
var incomingFile = IncomingFileTestFactory.create(); var incomingFile = IncomingFileTestFactory.create();
var extractedFiles = mapper.extractZip(incomingFile).toList(); var extractedFiles = mapper.tryToExtractZip(incomingFile).toList();
assertThat(extractedFiles).containsExactly(incomingFile); assertThat(extractedFiles).containsExactly(incomingFile);
} }
} }
@Test
void testIsZipFilePredicate() {
assertThat(XtaIncomingFilesMapper.IS_ZIP_FILE.test(IncomingFileTestFactory.create())).isFalse();
assertThat(XtaIncomingFilesMapper.IS_ZIP_FILE.test(IncomingFileTestFactory.createBuilder().contentType(ZIP_CONTENT_TYPE).build()))
.isTrue();
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment