diff --git a/factcast-client-grpc/src/test/java/org/factcast/client/grpc/FactCastGrpcStubsFactoryImplTest.java b/factcast-client-grpc/src/test/java/org/factcast/client/grpc/FactCastGrpcStubsFactoryImplTest.java new file mode 100644 index 0000000000..c89ea7e81b --- /dev/null +++ b/factcast-client-grpc/src/test/java/org/factcast/client/grpc/FactCastGrpcStubsFactoryImplTest.java @@ -0,0 +1,39 @@ +package org.factcast.client.grpc; + +import io.grpc.Channel; +import org.factcast.grpc.api.gen.RemoteFactStoreGrpc; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class FactCastGrpcStubsFactoryImplTest { + + @Mock + Channel channel; + + final FactCastGrpcStubsFactory uut = new FactCastGrpcStubsFactoryImpl(); + + @Test + public void createsBlockingStub() { + try (MockedStatic mock = mockStatic(RemoteFactStoreGrpc.class)) { + RemoteFactStoreGrpc.RemoteFactStoreBlockingStub stub = mock(RemoteFactStoreGrpc.RemoteFactStoreBlockingStub.class); + mock.when(() -> RemoteFactStoreGrpc.newBlockingStub(channel)).thenReturn(stub); + assertEquals(stub, uut.createBlockingStub(channel)); + } + } + + @Test + public void createsStub() { + try (MockedStatic mock = mockStatic(RemoteFactStoreGrpc.class)) { + RemoteFactStoreGrpc.RemoteFactStoreStub stub = mock(RemoteFactStoreGrpc.RemoteFactStoreStub.class); + mock.when(() -> RemoteFactStoreGrpc.newStub(channel)).thenReturn(stub); + assertEquals(stub, uut.createStub(channel)); + } + } +} \ No newline at end of file diff --git a/factcast-client-grpc/src/test/java/org/factcast/client/grpc/GrpcFactStoreTest.java b/factcast-client-grpc/src/test/java/org/factcast/client/grpc/GrpcFactStoreTest.java index b392342204..8171a39438 100644 --- a/factcast-client-grpc/src/test/java/org/factcast/client/grpc/GrpcFactStoreTest.java +++ b/factcast-client-grpc/src/test/java/org/factcast/client/grpc/GrpcFactStoreTest.java @@ -603,13 +603,58 @@ void setSnapshotException() { void setSnapshot() { SnapshotId id = SnapshotId.of("foo", UUID.randomUUID()); Snapshot snap = new Snapshot(id, UUID.randomUUID(), "".getBytes(), false); - when(blockingStub.setSnapshot(eq(conv.toProto(snap)))).thenReturn(conv.empty()); uut.setSnapshot(snap); verify(blockingStub).setSnapshot(conv.toProto(snap)); } + @Test + void setSnapshotWithCompressionInTransit() { + // set compression and mock + RemoteFactStoreBlockingStub compBlockingStub = mock(RemoteFactStoreBlockingStub.class); + RemoteFactStoreStub compStub = mock(RemoteFactStoreStub.class); + Map serverProps = new HashMap<>(); + serverProps.put(Capabilities.CODECS.toString(), "gzip"); + when(blockingStub.handshake(any())) + .thenReturn(conv.toProto(ServerConfig.of(GrpcFactStore.PROTOCOL_VERSION, serverProps))); + when(blockingStub.withCompression(any())).thenReturn(compBlockingStub); + when(compBlockingStub.withInterceptors(any())).thenReturn(compBlockingStub); + when(stub.withCompression(any())).thenReturn(compStub); + when(compStub.withInterceptors(any())).thenReturn(compStub); + + SnapshotId id = SnapshotId.of("foo", UUID.randomUUID()); + Snapshot snap = new Snapshot(id, UUID.randomUUID(), "".getBytes(), false); + + uut.setSnapshot(snap); + + // uses the stub w compression enabled + verify(compBlockingStub).setSnapshot(conv.toProto(snap)); + } + + @Test + void setSnapshotAlreadyCompressed() { + // set compression and mock + RemoteFactStoreBlockingStub compBlockingStub = mock(RemoteFactStoreBlockingStub.class); + RemoteFactStoreStub compStub = mock(RemoteFactStoreStub.class); + Map serverProps = new HashMap<>(); + serverProps.put(Capabilities.CODECS.toString(), "gzip"); + when(blockingStub.handshake(any())) + .thenReturn(conv.toProto(ServerConfig.of(GrpcFactStore.PROTOCOL_VERSION, serverProps))); + when(blockingStub.withCompression(any())).thenReturn(compBlockingStub); + when(compBlockingStub.withInterceptors(any())).thenReturn(compBlockingStub); + when(stub.withCompression(any())).thenReturn(compStub); + when(compStub.withInterceptors(any())).thenReturn(compStub); + + SnapshotId id = SnapshotId.of("foo", UUID.randomUUID()); + Snapshot snap = new Snapshot(id, UUID.randomUUID(), "".getBytes(), true); + + uut.setSnapshot(snap); + + // uses the stub w/o compression + verify(blockingStub).setSnapshot(conv.toProto(snap)); + } + @Test void clearSnapshotException() { SnapshotId id = SnapshotId.of("foo", UUID.randomUUID()); @@ -824,4 +869,13 @@ void initializationCreatesNewStubs() { // should work after multiple re-initializations (issue #2868) uut.currentTime(); } + + @Test + void resetsInitializationFlag() { + uut.reset(); + uut.initializeIfNecessary(); + uut.reset(); + uut.initializeIfNecessary(); + verify(blockingStub, times(2)).handshake(any()); + } }