set etag to be null if it's empty (#414)

Signed-off-by: Arghya Sadhu <arghya88@gmail.com>
This commit is contained in:
Arghya Sadhu 2020-12-19 01:43:46 +05:30 committed by GitHub
parent 7f1ce0bed7
commit a35e41480e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 75 additions and 10 deletions

View File

@ -74,13 +74,11 @@ public abstract class AbstractStateClientIT extends BaseIT {
Assert.assertNotNull(state);
Assert.assertEquals("unknownKey", state.getKey());
Assert.assertNull(state.getValue());
// gRPC returns empty eTag while HTTP returns null.
// TODO(artursouza): https://github.com/dapr/java-sdk/issues/405
Assert.assertTrue(state.getEtag() == null || state.getEtag().isEmpty());
Assert.assertNull(state.getEtag());
}
@Test
public void saveAndGetBulkStates() {
public void saveAndGetBulkState() {
final String stateKeyOne = UUID.randomUUID().toString();
final String stateKeyTwo = UUID.randomUUID().toString();
final String stateKeyThree = "NotFound";
@ -114,8 +112,8 @@ public abstract class AbstractStateClientIT extends BaseIT {
assertEquals(stateKeyThree, result.stream().skip(2).findFirst().get().getKey());
assertNull(result.stream().skip(2).findFirst().get().getValue());
assertEquals("", result.stream().skip(2).findFirst().get().getEtag());
assertNull("not found", result.stream().skip(2).findFirst().get().getError());
assertNull(result.stream().skip(2).findFirst().get().getEtag());
assertNull(result.stream().skip(2).findFirst().get().getError());
}
@Test

View File

@ -320,6 +320,9 @@ public class DaprClientGrpc extends AbstractDaprClient {
byte[] data = payload == null ? null : payload.toByteArray();
T value = stateSerializer.deserialize(data, type);
String etag = item.getEtag();
if (etag.equals("")) {
etag = null;
}
return new State<>(value, key, etag, item.getMetadataMap(), null);
}
@ -332,6 +335,9 @@ public class DaprClientGrpc extends AbstractDaprClient {
byte[] data = payload == null ? null : payload.toByteArray();
T value = stateSerializer.deserialize(data, type);
String etag = response.getEtag();
if (etag.equals("")) {
etag = null;
}
return new State<>(value, requestedKey, etag, response.getMetadataMap(), stateOptions);
}

View File

@ -542,6 +542,9 @@ public class DaprClientHttp extends AbstractDaprClient {
}
String etag = node.path("etag").asText();
if (etag.equals("")) {
etag = null;
}
// TODO(artursouza): JSON cannot differentiate if data returned is String or byte[], it is ambiguous.
// This is not a high priority since GRPC is the default (and recommended) client implementation.
byte[] data = node.path("data").toString().getBytes(Properties.STRING_CHARSET.get());

View File

@ -1657,6 +1657,62 @@ public class DaprClientGrpcTest {
assertTrue(callbackDelete.wasCalled);
}
@Test
public void getStateNullEtag() throws Exception {
String etag = null;
String key1 = "key1";
String expectedValue1 = "Expected state 1";
State<String> expectedState1 = buildStateKey(expectedValue1, key1, etag, new HashMap<>(), null);
Map<String, SettableFuture<DaprProtos.GetStateResponse>> futuresMap = new HashMap<>();
DaprProtos.GetStateResponse envelope = DaprProtos.GetStateResponse.newBuilder()
.setData(serialize(expectedValue1))
.build();
SettableFuture<DaprProtos.GetStateResponse> settableFuture = SettableFuture.create();
MockCallback<DaprProtos.GetStateResponse> callback = new MockCallback<>(envelope);
addCallback(settableFuture, callback, directExecutor());
settableFuture.set(envelope);
futuresMap.put(key1, settableFuture);
when(client.getState(argThat(new GetStateRequestKeyMatcher(key1)))).thenReturn(futuresMap.get(key1));
State<String> keyRequest1 = buildStateKey(null, key1, null, null);
Mono<State<String>> resultGet1 = adapter.getState(STATE_STORE_NAME, keyRequest1, String.class);
assertEquals(expectedState1, resultGet1.block());
}
@Test
public void getBulkStateNullEtag() throws Exception {
DaprProtos.GetBulkStateResponse responseEnvelope = DaprProtos.GetBulkStateResponse.newBuilder()
.addItems(DaprProtos.BulkStateItem.newBuilder()
.setData(serialize("hello world"))
.setKey("100")
.build())
.addItems(DaprProtos.BulkStateItem.newBuilder()
.setKey("200")
.setEtag("")
.setError("not found")
.build())
.build();
SettableFuture<DaprProtos.GetBulkStateResponse> settableFuture = SettableFuture.create();
MockCallback<DaprProtos.GetBulkStateResponse> callback = new MockCallback<>(responseEnvelope);
addCallback(settableFuture, callback, directExecutor());
when(client.getBulkState(any(DaprProtos.GetBulkStateRequest.class)))
.thenAnswer(c -> {
settableFuture.set(responseEnvelope);
return settableFuture;
});
List<State<String>> result = adapter.getBulkState(STATE_STORE_NAME, Arrays.asList("100", "200"), String.class).block();
assertTrue(callback.wasCalled);
assertEquals(2, result.size());
assertEquals("100", result.stream().findFirst().get().getKey());
assertEquals("hello world", result.stream().findFirst().get().getValue());
assertNull(result.stream().findFirst().get().getEtag());
assertNull(result.stream().findFirst().get().getError());
assertEquals("200", result.stream().skip(1).findFirst().get().getKey());
assertNull(result.stream().skip(1).findFirst().get().getValue());
assertNull(result.stream().skip(1).findFirst().get().getEtag());
assertEquals("not found", result.stream().skip(1).findFirst().get().getError());
}
@Test
public void getSecrets() {
String expectedKey = "attributeKey";

View File

@ -640,8 +640,9 @@ public class DaprClientHttpTest {
.respond("\"" + EXPECTED_RESULT + "\"");
daprHttp = new DaprHttp(Properties.SIDECAR_IP.get(), 3000, okHttpClient);
daprClientHttp = new DaprClientHttp(daprHttp);
Mono<State<String>> monoEmptyEtag = daprClientHttp.getState(STATE_STORE_NAME, stateEmptyEtag, String.class);
assertEquals(monoEmptyEtag.block().getKey(), "key");
State<String> monoEmptyEtag = daprClientHttp.getState(STATE_STORE_NAME, stateEmptyEtag, String.class).block();
assertEquals(monoEmptyEtag.getKey(), "key");
assertNull(monoEmptyEtag.getEtag());
}
@Test
@ -667,8 +668,9 @@ public class DaprClientHttpTest {
.respond("\"" + EXPECTED_RESULT + "\"");
daprHttp = new DaprHttp(Properties.SIDECAR_IP.get(), 3000, okHttpClient);
daprClientHttp = new DaprClientHttp(daprHttp);
Mono<State<String>> monoNullEtag = daprClientHttp.getState(STATE_STORE_NAME, stateNullEtag, String.class);
assertEquals(monoNullEtag.block().getKey(), "key");
State<String> monoNullEtag = daprClientHttp.getState(STATE_STORE_NAME, stateNullEtag, String.class).block();
assertEquals(monoNullEtag.getKey(), "key");
assertNull(monoNullEtag.getEtag());
}
@Test