/// <summary> /// Test container reads and writes, expecting success. /// </summary> /// <param name="testContainer">The container.</param> /// <param name="testAccessCondition">The access condition to use.</param> private void ContainerReadWriteExpectLeaseSuccessAPM(CloudBlobContainer testContainer, AccessCondition testAccessCondition) { using (AutoResetEvent waitHandle = new AutoResetEvent(false)) { IAsyncResult result = testContainer.BeginFetchAttributes(testAccessCondition, null /* options */, null /* operationContext */, ar => waitHandle.Set(), null); waitHandle.WaitOne(); testContainer.EndFetchAttributes(result); result = testContainer.BeginGetPermissions(testAccessCondition, null /* options */, null /* operationContext */, ar => waitHandle.Set(), null); waitHandle.WaitOne(); testContainer.EndGetPermissions(result); result = testContainer.BeginSetMetadata(testAccessCondition, null /* options */, null /* operationContext */, ar => waitHandle.Set(), null); waitHandle.WaitOne(); testContainer.EndSetMetadata(result); result = testContainer.BeginSetPermissions(new BlobContainerPermissions(), testAccessCondition, null /* options */, null /* operationContext */, ar => waitHandle.Set(), null); waitHandle.WaitOne(); testContainer.EndSetPermissions(result); } }
/// <summary> /// Test container reads and writes, expecting lease failure. /// </summary> /// <param name="testContainer">The container.</param> /// <param name="testAccessCondition">The failing access condition to use.</param> /// <param name="expectedErrorCode">The expected error code.</param> /// <param name="description">The reason why these calls should fail.</param> private void ContainerReadWriteExpectLeaseFailureAPM(CloudBlobContainer testContainer, AccessCondition testAccessCondition, HttpStatusCode expectedStatusCode, string expectedErrorCode, string description) { using (AutoResetEvent waitHandle = new AutoResetEvent(false)) { IAsyncResult result = testContainer.BeginFetchAttributes(testAccessCondition, null /* options */, null /* operationContext */, ar => waitHandle.Set(), null); waitHandle.WaitOne(); // FetchAttributes is a HEAD request with no extended error info, so it returns with the generic ConditionFailed error code. TestHelper.ExpectedException( () => testContainer.EndFetchAttributes(result), description + "(Fetch Attributes)", HttpStatusCode.PreconditionFailed); result = testContainer.BeginGetPermissions(testAccessCondition, null /* options */, null /* operationContext */, ar => waitHandle.Set(), null); waitHandle.WaitOne(); TestHelper.ExpectedException( () => testContainer.EndGetPermissions(result), description + " (Get Permissions)", expectedStatusCode, expectedErrorCode); result = testContainer.BeginSetMetadata(testAccessCondition, null /* options */, null /* operationContext */, ar => waitHandle.Set(), null); waitHandle.WaitOne(); TestHelper.ExpectedException( () => testContainer.EndSetMetadata(result), description + " (Set Metadata)", expectedStatusCode, expectedErrorCode); result = testContainer.BeginSetPermissions(new BlobContainerPermissions(), testAccessCondition, null /* options */, null /* operationContext */, ar => waitHandle.Set(), null); waitHandle.WaitOne(); TestHelper.ExpectedException( () => testContainer.EndSetPermissions(result), description + " (Set Permissions)", expectedStatusCode, expectedErrorCode); } }