Skip to content
Snippets Groups Projects
Commit 158e157b authored by Krzysztof Witukiewicz's avatar Krzysztof Witukiewicz
Browse files

OZG-7573 OZG-7991 Make FileSender extend (not delegate to) StreamExclusiveFileSender

parent 18ec1687
No related branches found
No related tags found
1 merge request!12Ozg 7573 files weiterleitung bug
......@@ -32,51 +32,47 @@ import io.grpc.stub.CallStreamObserver;
import io.grpc.stub.StreamObserver;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.extern.log4j.Log4j2;
@Log4j2
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class GrpcFileUploadUtils {
/*
* Q = Request Type; S = Response Type
/**
* @param <Q> Request Type
* @param <S> Response Type
* @deprecated use {@link #createStreamExclusiveFileSender(BiFunction, InputStream, Function)} instead
*/
@Deprecated(since = "4.13.0")
public static <Q, S> FileSender<Q, S> createSender(BiFunction<byte[], Integer, Q> chunkBuilder, InputStream inputStream,
Function<StreamObserver<S>, CallStreamObserver<Q>> reqObserverBuilder) {
return new FileSender<>(chunkBuilder, inputStream, reqObserverBuilder);
}
/**
* @param <Q> Request Type
* @param <S> Response Type
*/
public static <Q, S> StreamingFileSender<Q, S> createStreamExclusiveFileSender(BiFunction<byte[], Integer, Q> chunkBuilder, InputStream inputStream,
Function<StreamObserver<S>, CallStreamObserver<Q>> reqObserverBuilder) {
return new StreamExclusiveFileSender<>(chunkBuilder, inputStream, reqObserverBuilder);
}
/**
* @param <Q> Request Type
* @param <S> Response Type
*/
public static <Q, S> StreamingFileSender<Q, S> createStreamSharingSender(BiFunction<byte[], Integer, Q> chunkBuilder, InputStream inputStream,
CallStreamObserver<Q> requestObserver, Consumer<Runnable> onReadyHandlerRegistrar) {
return new StreamSharingFileSender<>(chunkBuilder, inputStream, requestObserver, onReadyHandlerRegistrar);
}
public static class FileSender<Q, S> {
private final StreamExclusiveFileSender<Q, S> sender;
// for backwards compatibility
public static class FileSender<Q, S> extends StreamExclusiveFileSender<Q, S> {
FileSender(BiFunction<byte[], Integer, Q> chunkBuilder, InputStream inputStream,
Function<StreamObserver<S>, CallStreamObserver<Q>> reqObserverBuilder) {
this.sender = new StreamExclusiveFileSender<>(chunkBuilder, inputStream, reqObserverBuilder);
}
public FileSender<Q, S> withMetaData(@NonNull Q metaData) {
sender.withMetaData(metaData);
return this;
}
public FileSender<Q, S> send() {
sender.send();
return this;
}
public void cancelOnTimeout() {
sender.cancelOnTimeout();
}
public void cancelOnError(Throwable t) {
sender.cancelOnError(t);
super(chunkBuilder, inputStream, reqObserverBuilder);
}
}
......
......@@ -24,22 +24,18 @@
package de.ozgcloud.common.binaryfile;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.io.InputStream;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import de.ozgcloud.common.binaryfile.BinaryFileTestFactory.TestRequestType;
import de.ozgcloud.common.binaryfile.BinaryFileTestFactory.TestResponseType;
import de.ozgcloud.common.binaryfile.GrpcFileUploadUtils.FileSender;
import de.ozgcloud.common.test.ReflectionTestUtils;
import io.grpc.stub.CallStreamObserver;
import io.grpc.stub.StreamObserver;
......@@ -60,107 +56,32 @@ class GrpcFileUploadUtilsTest {
class TestCreateSender {
@Test
void shouldReturnInstanceOfFileSender() {
void shouldReturnInstanceOfStreamExclusiveFileSender() {
var createdSender = GrpcFileUploadUtils.createSender(chunkBuilder, inputStream, reqObserverBuilder);
assertThat(createdSender).isInstanceOf(FileSender.class);
assertThat(createdSender).isInstanceOf(StreamExclusiveFileSender.class);
}
}
@Nested
class TestCreateStreamSharingSender {
class TestCreateStreamExclusiveFileSender {
@Test
void shouldReturnInstanceOfStreamSharingSender() {
var createdSender = GrpcFileUploadUtils.createStreamSharingSender(chunkBuilder, inputStream, requestObserver, onReadyHandlerRegistrar);
void shouldReturnInstanceOfStreamExclusiveFileSender() {
var createdSender = GrpcFileUploadUtils.createStreamExclusiveFileSender(chunkBuilder, inputStream, reqObserverBuilder);
assertThat(createdSender).isInstanceOf(StreamSharingFileSender.class);
assertThat(createdSender).isInstanceOf(StreamExclusiveFileSender.class);
}
}
@Nested
class TestFileSender {
private final FileSender<TestRequestType, TestResponseType> fileSender = new FileSender<>(chunkBuilder, inputStream, reqObserverBuilder);
@Mock
private StreamExclusiveFileSender<TestRequestType, TestResponseType> streamExclusiveFileSender;
class TestCreateStreamSharingSender {
@Test
void shouldCreateStreamExclusiveFileSender() {
var internalFileSender = ReflectionTestUtils.getField(fileSender, "sender", StreamExclusiveFileSender.class);
assertThat(internalFileSender).isInstanceOf(StreamExclusiveFileSender.class);
}
@Nested
class TestMethods {
@BeforeEach
void init() {
ReflectionTestUtils.setField(fileSender, "sender", streamExclusiveFileSender);
}
@Nested
class TestWithMetaData {
private final TestRequestType request = new TestRequestType();
@Test
void shouldDelegate() {
fileSender.withMetaData(request);
verify(streamExclusiveFileSender).withMetaData(request);
}
@Test
void shouldReturnItself() {
var senderWithMetaData = fileSender.withMetaData(request);
assertThat(senderWithMetaData).isSameAs(fileSender);
}
}
@Nested
class TestSend {
@Test
void shouldDelegate() {
fileSender.send();
verify(streamExclusiveFileSender).send();
}
@Test
void shouldReturnItself() {
var returnedSender = fileSender.send();
assertThat(returnedSender).isSameAs(fileSender);
}
}
@Nested
class TestCancelOnTimeout {
@Test
void shouldDelegate() {
fileSender.cancelOnTimeout();
verify(streamExclusiveFileSender).cancelOnTimeout();
}
}
@Nested
class TestCancelOnError {
@Test
void shouldDelegate() {
var error = new Throwable();
fileSender.cancelOnError(error);
void shouldReturnInstanceOfStreamSharingSender() {
var createdSender = GrpcFileUploadUtils.createStreamSharingSender(chunkBuilder, inputStream, requestObserver, onReadyHandlerRegistrar);
verify(streamExclusiveFileSender).cancelOnError(error);
}
}
assertThat(createdSender).isInstanceOf(StreamSharingFileSender.class);
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment