Skip to content
Snippets Groups Projects
Commit 444ed46d authored by OZGCloud's avatar OZGCloud
Browse files

OZG-5636 use TempFileUtils

parent c55fe77a
No related branches found
No related tags found
No related merge requests found
...@@ -34,6 +34,7 @@ import java.util.concurrent.atomic.AtomicReference; ...@@ -34,6 +34,7 @@ import java.util.concurrent.atomic.AtomicReference;
import com.google.protobuf.ByteString; import com.google.protobuf.ByteString;
import de.ozgcloud.common.binaryfile.TempFileUtils;
import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.common.errorhandling.TechnicalException;
import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Attachment; import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Attachment;
import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder; import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder;
...@@ -81,29 +82,22 @@ public class UploadStreamObserver implements StreamObserver<GrpcSendBayernIdMess ...@@ -81,29 +82,22 @@ public class UploadStreamObserver implements StreamObserver<GrpcSendBayernIdMess
} }
Attachment buildAttachment(GrpcAttachmentMetadata attachmentMetadata) { Attachment buildAttachment(GrpcAttachmentMetadata attachmentMetadata) {
var attachmentFile = createTemporallyFile(attachmentMetadata.getFileName()); try {
return Attachment.builder() return Attachment.builder()
.name(attachmentMetadata.getFileName()) .name(attachmentMetadata.getFileName())
.type(attachmentMetadata.getFileType()) .type(attachmentMetadata.getFileType())
.content(attachmentFile) .content(createTemporallyFile())
.build(); .build();
} catch (IOException e) {
throw new TechnicalException("Can not create temporary file for attachment " + attachmentMetadata.getFileName(), e);
}
} }
InputStream createTemporallyFile(String fileName) { InputStream createTemporallyFile() throws IOException {
try {
closeTemporallyWriter(); closeTemporallyWriter();
var tempFilePath = createFile(fileName); var tempFilePath = TempFileUtils.createTmpFile();
attachmentWriter = newOutputStream(tempFilePath); attachmentWriter = newOutputStream(tempFilePath);
return newInputStream(tempFilePath); return newInputStream(tempFilePath);
} catch (IOException e) {
throw new TechnicalException("Can not create temporary file for attachment " + fileName, e);
}
}
Path createFile(String fileName) throws IOException {
var tmpFile = Files.createTempFile(fileName, ATTACHMENT_FILE_SUFFIX);
tmpFile.toFile().deleteOnExit();
return tmpFile;
} }
OutputStream newOutputStream(Path filePath) throws IOException { OutputStream newOutputStream(Path filePath) throws IOException {
......
...@@ -33,18 +33,19 @@ import java.io.OutputStream; ...@@ -33,18 +33,19 @@ import java.io.OutputStream;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
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.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Spy; import org.mockito.Spy;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.util.ReflectionTestUtils;
import com.google.protobuf.ByteString; import com.google.protobuf.ByteString;
import de.ozgcloud.common.binaryfile.TempFileUtils;
import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.common.errorhandling.TechnicalException;
import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Attachment; import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.Attachment;
import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder; import de.ozgcloud.nachrichten.postfach.bayernid.proxy.message.BayernIdMessage.BayernIdMessageBuilder;
...@@ -193,16 +194,20 @@ class UploadStreamObserverTest { ...@@ -193,16 +194,20 @@ class UploadStreamObserverTest {
@Mock @Mock
private InputStream tmpFileInputStream; private InputStream tmpFileInputStream;
@Nested
class TestBuildSuccessfully {
@SneakyThrows
@BeforeEach @BeforeEach
void setup() { void setup() {
doReturn(tmpFileInputStream).when(uploadStreamObserver).createTemporallyFile(any()); doReturn(tmpFileInputStream).when(uploadStreamObserver).createTemporallyFile();
} }
@SneakyThrows
@Test @Test
void shouldCallCreateTemporallyFile() { void shouldCallCreateTemporallyFile() {
uploadStreamObserver.buildAttachment(grpcAttachmentMetadata); uploadStreamObserver.buildAttachment(grpcAttachmentMetadata);
verify(uploadStreamObserver).createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); verify(uploadStreamObserver).createTemporallyFile();
} }
@Test @Test
...@@ -227,20 +232,42 @@ class UploadStreamObserverTest { ...@@ -227,20 +232,42 @@ class UploadStreamObserverTest {
} }
} }
@SneakyThrows
@Test
void shouldThrowTechnicalException() {
doThrow(IOException.class).when(uploadStreamObserver).createTemporallyFile();
assertThrows(TechnicalException.class, () -> uploadStreamObserver.buildAttachment(grpcAttachmentMetadata));
}
}
@Nested @Nested
class TestCreateTemporallyFile { class TestCreateTemporallyFile {
private static final Path TEMP_FILE_PATH = Path.of("tempFile");
@Mock @Mock
private OutputStream attachmentWriter; private OutputStream attachmentWriter;
@Mock @Mock
private InputStream tmpFileInputStream; private InputStream tmpFileInputStream;
private Path tempFilePath = Path.of("tempFile"); private MockedStatic<TempFileUtils> mockTempFileUtils;
@BeforeEach
void init() {
mockTempFileUtils = mockStatic(TempFileUtils.class);
mockTempFileUtils.when(TempFileUtils::createTmpFile).thenReturn(TEMP_FILE_PATH);
}
@AfterEach
void close() {
mockTempFileUtils.close();
}
@SneakyThrows
@Test @Test
void shouldCallCloseTemporallyFile() { void shouldCallCloseTemporallyFile() {
uploadStreamObserver.createTemporallyFile();
uploadStreamObserver.createTemporallyFile("test.txt");
verify(uploadStreamObserver).closeTemporallyWriter(); verify(uploadStreamObserver).closeTemporallyWriter();
} }
...@@ -248,19 +275,19 @@ class UploadStreamObserverTest { ...@@ -248,19 +275,19 @@ class UploadStreamObserverTest {
@SneakyThrows @SneakyThrows
@Test @Test
void shouldCallCreateFile() { void shouldCallCreateFile() {
uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); mockTempFileUtils.when(TempFileUtils::createTmpFile).thenReturn(TEMP_FILE_PATH);
uploadStreamObserver.createTemporallyFile();
verify(uploadStreamObserver).createFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); mockTempFileUtils.verify(() -> TempFileUtils.createTmpFile());
} }
@SneakyThrows @SneakyThrows
@Test @Test
void shouldCallNewOutputStream() { void shouldCallNewOutputStream() {
doReturn(tempFilePath).when(uploadStreamObserver).createFile(any()); uploadStreamObserver.createTemporallyFile();
uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME);
verify(uploadStreamObserver).newOutputStream(tempFilePath); verify(uploadStreamObserver).newOutputStream(TEMP_FILE_PATH);
} }
@SneakyThrows @SneakyThrows
...@@ -268,7 +295,7 @@ class UploadStreamObserverTest { ...@@ -268,7 +295,7 @@ class UploadStreamObserverTest {
void shouldInitializeOutputWriter() { void shouldInitializeOutputWriter() {
doReturn(attachmentWriter).when(uploadStreamObserver).newOutputStream(any()); doReturn(attachmentWriter).when(uploadStreamObserver).newOutputStream(any());
uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); uploadStreamObserver.createTemporallyFile();
assertThat(getAttachmentWriter()).isEqualTo(attachmentWriter); assertThat(getAttachmentWriter()).isEqualTo(attachmentWriter);
} }
...@@ -276,11 +303,9 @@ class UploadStreamObserverTest { ...@@ -276,11 +303,9 @@ class UploadStreamObserverTest {
@SneakyThrows @SneakyThrows
@Test @Test
void shouldCallNewInputStream() { void shouldCallNewInputStream() {
doReturn(tempFilePath).when(uploadStreamObserver).createFile(any()); uploadStreamObserver.createTemporallyFile();
uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); verify(uploadStreamObserver).newInputStream(TEMP_FILE_PATH);
verify(uploadStreamObserver).newInputStream(tempFilePath);
} }
@SneakyThrows @SneakyThrows
...@@ -288,19 +313,11 @@ class UploadStreamObserverTest { ...@@ -288,19 +313,11 @@ class UploadStreamObserverTest {
void shouldReturnInputStream() { void shouldReturnInputStream() {
doReturn(tmpFileInputStream).when(uploadStreamObserver).newInputStream(any()); doReturn(tmpFileInputStream).when(uploadStreamObserver).newInputStream(any());
var result = uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME); var result = uploadStreamObserver.createTemporallyFile();
assertThat(result).isEqualTo(tmpFileInputStream); assertThat(result).isEqualTo(tmpFileInputStream);
} }
@SneakyThrows
@Test
void shouldThrowException() {
doThrow(new IOException()).when(uploadStreamObserver).createFile(any());
assertThrows(TechnicalException.class, () -> uploadStreamObserver.createTemporallyFile(GrpcAttachmentMetadataTestFactory.FILE_NAME));
}
private OutputStream getAttachmentWriter() { private OutputStream getAttachmentWriter() {
return (OutputStream) ReflectionTestUtils.getField(uploadStreamObserver, "attachmentWriter"); return (OutputStream) ReflectionTestUtils.getField(uploadStreamObserver, "attachmentWriter");
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment