From c35f0e11c610609a8f7124209b5585ecbc5e4425 Mon Sep 17 00:00:00 2001 From: Charlie Stanley Date: Mon, 25 Jan 2021 11:26:36 -0800 Subject: [PATCH] Added unit tests for nullable etag #442 --- .../io/dapr/client/DaprClientGrpcTest.java | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/sdk/src/test/java/io/dapr/client/DaprClientGrpcTest.java b/sdk/src/test/java/io/dapr/client/DaprClientGrpcTest.java index 525b32c51d..0df44775bb 100644 --- a/sdk/src/test/java/io/dapr/client/DaprClientGrpcTest.java +++ b/sdk/src/test/java/io/dapr/client/DaprClientGrpcTest.java @@ -34,6 +34,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.mockito.ArgumentCaptor; import org.mockito.ArgumentMatcher; import org.mockito.stubbing.Answer; import reactor.core.publisher.Mono; @@ -43,6 +44,7 @@ import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -1548,6 +1550,29 @@ public void saveStatesIllegalArgumentExceptionTest() { }); } + @Test + public void saveBulkStateTestNullEtag() { + List> states = new ArrayList>(); + states.add(new State("null_etag_value", "null_etag_key", null, (StateOptions)null)); + states.add(new State("empty_etag_value", "empty_etag_key", "", (StateOptions)null)); + + ArgumentCaptor argument = ArgumentCaptor.forClass(DaprProtos.SaveStateRequest.class); + doAnswer((Answer) invocation -> { + StreamObserver observer = (StreamObserver) invocation.getArguments()[1]; + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + return null; + }).when(daprStub).saveState(argument.capture(), any()); + + StateOptions options = buildStateOptions(StateOptions.Consistency.STRONG, StateOptions.Concurrency.FIRST_WRITE); + Mono result = client.saveBulkState(STATE_STORE_NAME, states); + + result.block(); + assertFalse(argument.getValue().getStates(0).hasEtag()); + assertTrue(argument.getValue().getStates(1).hasEtag()); + assertEquals("", argument.getValue().getStates(1).getEtag().getValue()); + } + @Test public void saveStateExceptionThrownTest() { String key = "key1"; @@ -1621,6 +1646,26 @@ public void saveStateTest() { result.block(); } + @Test + public void saveStateTestNullEtag() { + String key = "key1"; + String etag = null; + String value = "State value"; + ArgumentCaptor argument = ArgumentCaptor.forClass(DaprProtos.SaveStateRequest.class); + doAnswer((Answer) invocation -> { + StreamObserver observer = (StreamObserver) invocation.getArguments()[1]; + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + return null; + }).when(daprStub).saveState(argument.capture(), any()); + + StateOptions options = buildStateOptions(StateOptions.Consistency.STRONG, StateOptions.Concurrency.FIRST_WRITE); + Mono result = client.saveState(STATE_STORE_NAME, key, etag, value, options); + + result.block(); + assertFalse(argument.getValue().getStates(0).hasEtag()); + } + @Test public void saveStateTestNoHotMono() { AtomicBoolean called = new AtomicBoolean(false); @@ -1765,6 +1810,25 @@ public void getStateThenDelete() throws Exception { resultDelete.block(); } + @Test + public void deleteStateNullEtag() { + String key = "key1"; + String etag = null; + ArgumentCaptor argument = ArgumentCaptor.forClass(DaprProtos.DeleteStateRequest.class); + doAnswer((Answer) invocation -> { + StreamObserver observer = (StreamObserver) invocation.getArguments()[1]; + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + return null; + }).when(daprStub).deleteState(argument.capture(), any()); + + StateOptions options = buildStateOptions(StateOptions.Consistency.STRONG, StateOptions.Concurrency.FIRST_WRITE); + Mono result = client.deleteState(STATE_STORE_NAME, key, etag, options); + + result.block(); + assertFalse(argument.getValue().hasEtag()); + } + @Test public void getStateNullEtag() throws Exception { String etag = null;