public void CopyFromToRestoreSnapshot(BlobContext context, string containerName, string blobName) { string oldText = "Old stuff"; string newText = "New stuff"; StorageCredentials accountAndKey = new StorageCredentials(context.Account, context.Key); CloudStorageAccount account = new CloudStorageAccount(accountAndKey, false); CloudBlobClient blobClient = new CloudBlobClient(new Uri(context.Address), account.Credentials); CloudBlobContainer container = blobClient.GetContainerReference(containerName); CloudBlockBlob blob = container.GetBlockBlobReference(blobName); BlobTestBase.UploadText(blob, oldText, Encoding.UTF8); CloudBlockBlob snapshot = blob.CreateSnapshot(); Assert.IsNotNull(snapshot.SnapshotTime); BlobTestBase.UploadText(blob, newText, Encoding.UTF8); Uri sourceUri = new Uri(snapshot.Uri.AbsoluteUri + "?snapshot=" + BlobRequest.ConvertDateTimeToSnapshotString(snapshot.SnapshotTime.Value)); OperationContext opContext = new OperationContext(); HttpWebRequest request = BlobHttpWebRequestFactory.CopyFrom(blob.Uri, 30, sourceUri, null, null, opContext); Assert.IsTrue(request != null, "Failed to create HttpWebRequest"); BlobTests.SignRequest(request, context); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Assert.AreEqual <HttpStatusCode>(response.StatusCode, HttpStatusCode.Accepted); string text = BlobTestBase.DownloadText(blob, Encoding.UTF8); Assert.AreEqual <string>(text, oldText); blob.Delete(DeleteSnapshotsOption.IncludeSnapshots, null, null); }
public async static void AcquireAndReleaseLeaseTest(BlobContext context, string containerName, string blobName) { CloudStorageAccount account = new CloudStorageAccount(new StorageCredentials(context.Account, context.Key), false); CloudBlobClient client = new CloudBlobClient(new Uri(context.Address), account.Credentials); CloudBlobContainer container = client.GetContainerReference(containerName); CloudBlockBlob blob = container.GetBlockBlobReference(blobName); BlobTestBase.UploadText(blob, "Text sent to cloud", Encoding.UTF8); // acquire a release on the blob and check LeaseStatus to be "locked" OperationContext opContext = new OperationContext(); HttpRequestMessage blobRequest = BlobHttpRequestMessageFactory.Lease( blob.Uri, context.Timeout, LeaseAction.Acquire, null /* proposed lease ID */, 60 /* lease duration */, null /* break period */, null /* access condition */, null, opContext, SharedKeyCanonicalizer.Instance, context.Credentials); string leaseId = null; using (HttpResponseMessage response = await BlobTestUtils.GetResponse(blobRequest, context)) { leaseId = HttpResponseParsers.GetHeader(response, "x-ms-lease-id"); Assert.AreEqual <HttpStatusCode>(response.StatusCode, HttpStatusCode.Created); } blob.FetchAttributes(); Assert.AreEqual <LeaseStatus>(blob.Properties.LeaseStatus, LeaseStatus.Locked); // release the release on the blob and check LeaseStatus to be "unlocked" opContext = new OperationContext(); blobRequest = BlobHttpRequestMessageFactory.Lease( blob.Uri, context.Timeout, LeaseAction.Release, null /* proposed lease ID */, null /* lease duration */, null /* break period */, AccessCondition.GenerateLeaseCondition(leaseId), null, opContext, SharedKeyCanonicalizer.Instance, context.Credentials); using (HttpResponseMessage response = await BlobTestUtils.GetResponse(blobRequest, context)) { Assert.AreEqual <HttpStatusCode>(response.StatusCode, HttpStatusCode.OK); } blob.FetchAttributes(); Assert.AreEqual <LeaseStatus>(blob.Properties.LeaseStatus, LeaseStatus.Unlocked); blob.Delete(); }