Skip to content

Commit 3434ae4

Browse files
Fixing encryption create with contentResponseOnWriteEnabled false (Azure#23218)
* Fixing encryption create with contentResponseOnWriteEnabled false * resolving comments * fixing spot bugs
1 parent 1b4741d commit 3434ae4

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

sdk/cosmos/azure-cosmos-encryption/src/main/java/com/azure/cosmos/encryption/CosmosEncryptionAsyncContainer.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ public <T> Mono<CosmosItemResponse<T>> readItem(String id,
183183
PartitionKey partitionKey,
184184
CosmosItemRequestOptions requestOptions,
185185
Class<T> classType) {
186+
if (requestOptions == null) {
187+
requestOptions = new CosmosItemRequestOptions();
188+
}
189+
186190
Mono<CosmosItemResponse<byte[]>> responseMessageMono = this.readItemHelper(id, partitionKey, requestOptions, false);
187191

188192
return responseMessageMono.publishOn(encryptionScheduler).flatMap(cosmosItemResponse -> setByteArrayContent(cosmosItemResponse,
@@ -311,7 +315,7 @@ private Mono<CosmosItemResponse<byte[]>> setByteArrayContent(CosmosItemResponse<
311315
this.cosmosItemResponseBuilderAccessor.setByteArrayContent(rsp, bytes);
312316
return Mono.just(rsp);
313317
}
314-
);
318+
).defaultIfEmpty(rsp);
315319
}
316320

317321
private <T> Function<CosmosPagedFluxOptions, Flux<FeedResponse<T>>> queryDecryptionTransformer(Class<T> classType,

sdk/cosmos/azure-cosmos-encryption/src/main/java/com/azure/cosmos/encryption/implementation/EncryptionProcessor.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,8 +344,12 @@ public Mono<byte[]> decrypt(byte[] input) {
344344
input == null ? null : input.length,
345345
Thread.currentThread().getName());
346346
}
347-
ObjectNode itemJObj = Utils.parse(input, ObjectNode.class);
348347

348+
if (input == null || input.length == 0) {
349+
return Mono.empty();
350+
}
351+
352+
ObjectNode itemJObj = Utils.parse(input, ObjectNode.class);
349353
assert (itemJObj != null);
350354
return initEncryptionSettingsIfNotInitializedAsync().then(Mono.defer(() -> {
351355
for (ClientEncryptionIncludedPath includedPath : this.clientEncryptionPolicy.getIncludedPaths()) {

sdk/cosmos/azure-cosmos-encryption/src/test/java/com/azure/cosmos/encryption/EncryptionAsyncApiCrudTest.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public EncryptionAsyncApiCrudTest(CosmosClientBuilder clientBuilder) {
6060
public void before_CosmosItemTest() {
6161
assertThat(this.client).isNull();
6262
this.client = getClientBuilder().buildAsyncClient();
63-
EncryptionKeyStoreProvider encryptionKeyStoreProvider = new TestEncryptionKeyStoreProvider();
63+
TestEncryptionKeyStoreProvider encryptionKeyStoreProvider = new TestEncryptionKeyStoreProvider();
6464
cosmosAsyncDatabase = getSharedCosmosDatabase(this.client);
6565
cosmosEncryptionAsyncClient = CosmosEncryptionAsyncClient.createCosmosEncryptionAsyncClient(this.client,
6666
encryptionKeyStoreProvider);
@@ -123,6 +123,17 @@ public void createItemEncrypt_readItemDecrypt() {
123123
validateResponse(properties, responseItem);
124124
}
125125

126+
@Test(groups = {"encryption"}, timeOut = TIMEOUT)
127+
public void createItemEncryptWithContentResponseOnWriteEnabledFalse() {
128+
CosmosItemRequestOptions requestOptions = new CosmosItemRequestOptions();
129+
requestOptions.setContentResponseOnWriteEnabled(false);
130+
EncryptionPojo properties = getItem(UUID.randomUUID().toString());
131+
CosmosItemResponse<EncryptionPojo> itemResponse = cosmosEncryptionAsyncContainer.createItem(properties,
132+
new PartitionKey(properties.getMypk()), requestOptions).block();
133+
assertThat(itemResponse.getRequestCharge()).isGreaterThan(0);
134+
assertThat(itemResponse.getItem()).isNull();
135+
}
136+
126137
@Test(groups = {"encryption"}, timeOut = TIMEOUT)
127138
public void upsertItem_readItem() {
128139
EncryptionPojo properties = getItem(UUID.randomUUID().toString());

0 commit comments

Comments
 (0)