public async Task AzureTableDataManager_UpdateTwoTableEntriesConditionallyAsync() { StorageEmulatorUtilities.EnsureEmulatorIsNotUsed(); var data1 = GenerateNewData(); var data2 = GenerateNewData(); try { await manager.UpdateTwoTableEntriesConditionallyAsync(data1, AzureTableUtils.ANY_ETAG, data2, AzureTableUtils.ANY_ETAG); Assert.True(false, "Update should have failed since the data has not been created yet"); } catch (RequestFailedException exc) { Assert.Equal((int)HttpStatusCode.NotFound, exc.Status); // "Update before insert." HttpStatusCode httpStatusCode; string restStatus; AzureTableUtils.EvaluateException(exc, out httpStatusCode, out restStatus, true); Assert.Equal(HttpStatusCode.NotFound, httpStatusCode); Assert.Equal(TableErrorCode.ResourceNotFound.ToString(), restStatus); } string etag = await manager.CreateTableEntryAsync(data2.Clone()); var tuple1 = await manager.InsertTwoTableEntriesConditionallyAsync(data1, data2, etag); _ = await manager.UpdateTwoTableEntriesConditionallyAsync(data1, tuple1.Item1, data2, tuple1.Item2); try { await manager.UpdateTwoTableEntriesConditionallyAsync(data1, tuple1.Item1, data2, tuple1.Item2); Assert.True(false, "Should have thrown RequestFailedException."); } catch (RequestFailedException exc) { Assert.Equal((int)HttpStatusCode.PreconditionFailed, exc.Status); // "Wrong eTag" HttpStatusCode httpStatusCode; string restStatus; AzureTableUtils.EvaluateException(exc, out httpStatusCode, out restStatus, true); Assert.Equal(HttpStatusCode.PreconditionFailed, httpStatusCode); Assert.True(restStatus == TableErrorCode.UpdateConditionNotSatisfied.ToString()); } }
public async Task AzureTableDataManager_UpdateTwoTableEntriesConditionallyAsync() { var data1 = GenerateNewData(); var data2 = GenerateNewData(); try { await manager.UpdateTwoTableEntriesConditionallyAsync(data1, AzureStorageUtils.ANY_ETAG, data2, AzureStorageUtils.ANY_ETAG); } catch (StorageException exc) { Assert.Equal((int)HttpStatusCode.NotFound, exc.RequestInformation.HttpStatusCode); // "Update before insert." HttpStatusCode httpStatusCode; string restStatus; AzureStorageUtils.EvaluateException(exc, out httpStatusCode, out restStatus, true); Assert.Equal(HttpStatusCode.NotFound, httpStatusCode); Assert.Equal(StorageErrorCodeStrings.ResourceNotFound, restStatus); } string etag = await manager.CreateTableEntryAsync(data2.Clone()); var tuple1 = await manager.InsertTwoTableEntriesConditionallyAsync(data1, data2, etag); var tuple2 = await manager.UpdateTwoTableEntriesConditionallyAsync(data1, tuple1.Item1, data2, tuple1.Item2); try { await manager.UpdateTwoTableEntriesConditionallyAsync(data1, tuple1.Item1, data2, tuple1.Item2); Assert.True(false, "Should have thrown StorageException."); } catch (StorageException exc) { Assert.Equal((int)HttpStatusCode.PreconditionFailed, exc.RequestInformation.HttpStatusCode); // "Wrong eTag" HttpStatusCode httpStatusCode; string restStatus; AzureStorageUtils.EvaluateException(exc, out httpStatusCode, out restStatus, true); Assert.Equal(HttpStatusCode.PreconditionFailed, httpStatusCode); Assert.True(restStatus == TableErrorCodeStrings.UpdateConditionNotSatisfied || restStatus == StorageErrorCodeStrings.ConditionNotMet, restStatus); } }