public void CloudBlobContainerSetMetadataAPM() { CloudBlobContainer container = GetRandomContainerReference(); try { container.Create(); using (AutoResetEvent waitHandle = new AutoResetEvent(false)) { CloudBlobContainer container2 = container.ServiceClient.GetContainerReference(container.Name); IAsyncResult result = container2.BeginFetchAttributes( ar => waitHandle.Set(), null); waitHandle.WaitOne(); container2.EndFetchAttributes(result); Assert.AreEqual(0, container2.Metadata.Count); container.Metadata.Add("key1", "value1"); result = container.BeginSetMetadata( ar => waitHandle.Set(), null); waitHandle.WaitOne(); container.EndSetMetadata(result); result = container2.BeginFetchAttributes( ar => waitHandle.Set(), null); waitHandle.WaitOne(); container2.EndFetchAttributes(result); Assert.AreEqual(1, container2.Metadata.Count); Assert.AreEqual("value1", container2.Metadata["key1"]); result = container.ServiceClient.BeginListContainersSegmented(container.Name, ContainerListingDetails.Metadata, null, null, null, null, ar => waitHandle.Set(), null); waitHandle.WaitOne(); CloudBlobContainer container3 = container.ServiceClient.EndListContainersSegmented(result).Results.First(); Assert.AreEqual(1, container3.Metadata.Count); Assert.AreEqual("value1", container3.Metadata["key1"]); container.Metadata.Clear(); result = container.BeginSetMetadata( ar => waitHandle.Set(), null); waitHandle.WaitOne(); container.EndSetMetadata(result); result = container2.BeginFetchAttributes( ar => waitHandle.Set(), null); waitHandle.WaitOne(); container2.EndFetchAttributes(result); Assert.AreEqual(0, container2.Metadata.Count); } } finally { container.DeleteIfExists(); } }
/// <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); } }
/// <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); } }
public void CloudBlobContainerSetMetadataAPMCancel() { CloudBlobContainer container = GetRandomContainerReference(); try { container.Create(); container.Metadata.Add("key1", "value1"); TestHelper.ExecuteAPMMethodWithCancellation(4000, new[] { DelayBehaviors.DelayAllRequestsIf(4000 * 3, AzureStorageSelectors.BlobTraffic().IfHostNameContains(container.ServiceClient.Credentials.AccountName)) }, (options, opContext, callback, state) => container.BeginSetMetadata(null, (BlobRequestOptions)options, opContext, callback, state), container.EndSetMetadata); } finally { container.DeleteIfExists(); } }