/// <summary>
 /// Test page blob reads, expecting lease failure.
 /// </summary>
 /// <param name="testBlob">The page blob.</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 PageBlobReadExpectLeaseFailure(CloudPageBlob testBlob, AccessCondition testAccessCondition, HttpStatusCode expectedStatusCode, string expectedErrorCode, string description)
 {
     TestHelper.ExpectedException(
         () => testBlob.GetPageRanges(null /* offset */, null /* length */, testAccessCondition, null /* options */),
         description + "(Get Page Ranges)",
         expectedStatusCode,
         expectedErrorCode);
 }
 /// <summary>
 /// Test page blob reads, expecting success.
 /// </summary>
 /// <param name="testBlob">The page blob.</param>
 /// <param name="testAccessCondition">The access condition to use.</param>
 private void PageBlobReadExpectSuccess(CloudPageBlob testBlob, AccessCondition testAccessCondition)
 {
     testBlob.GetPageRanges(null /* offset */, null /* length */, testAccessCondition, null /* options */);
 }
        //******************
        //*                *
        //*  ShowPageBlob  *
        //*                *
        //******************
        // Display properties for a specific page blob.
        public void ShowPageBlob(CloudPageBlob blob)
        {
            Cursor = Cursors.Wait;

            try
            {
                PagesTab.Visibility = System.Windows.Visibility.Visible;
                ContentTab.Visibility = System.Windows.Visibility.Collapsed;

                PageBlob = blob;
                IsBlobChanged = false;
                this.Title = "View Blob - " + blob.Name;

                // Display blob properties.

                PropBlobType.Text = "Page";

                PropCacheControl.Text = blob.Properties.CacheControl;

                PropContainer.Text = blob.Container.Name;

                PropContentDisposition.Text = blob.Properties.ContentDisposition;

                PropContentEncoding.Text = blob.Properties.ContentEncoding;

                PropContentLanguage.Text = blob.Properties.ContentLanguage;

                PropContentMD5.Text = blob.Properties.ContentMD5;

                PropContentType.Text = blob.Properties.ContentType;

                if (blob.CopyState != null)
                {
                    PropCopyState.Text = blob.CopyState.ToString();
                }

                if (blob.Properties.ETag != null)
                {
                    PropETag.Text = blob.Properties.ETag.Replace("\"", String.Empty).Replace("0x", String.Empty);
                }

                if (blob.IsSnapshot)
                {
                    PropIsSnapshot.Text = "True";
                }
                else
                {
                    PropIsSnapshot.Text = "False";
                }

                PropLastModified.Text = blob.Properties.LastModified.ToString();

                PropLeaseDuration.Text = blob.Properties.LeaseDuration.ToString();

                PropLeaseState.Text = blob.Properties.LeaseState.ToString();

                PropLeaseStatus.Text = blob.Properties.LeaseStatus.ToString();

                PropLength.Text = blob.Properties.Length.ToString();

                PropName.Text = blob.Name;

                PropParent.Text = blob.Parent.Container.Name;

                PropSnapshotQualifiedStorageUri.Text = blob.SnapshotQualifiedStorageUri.ToString().Replace("; ", ";\n");

                PropSnapshotQualifiedUri.Text = blob.SnapshotQualifiedUri.ToString().Replace("; ", ";\n");

                if (blob.SnapshotTime.HasValue)
                {
                    PropSnapshotTime.Text = blob.SnapshotTime.ToString();
                }

                PropStorageUri.Text = blob.StorageUri.ToString().Replace("; ", ";\n");

                PropStreamMinimumReadSizeInBytes.Text = blob.StreamMinimumReadSizeInBytes.ToString();

                PropStreamWriteSizeInBytes.Text = blob.StreamWriteSizeInBytes.ToString();

                PropUri.Text = blob.Uri.ToString().Replace("; ", ";\n");

                // Read page ranges in use and display in Pages tab.

                MaxPageNumber = (blob.Properties.Length / 512) - 1;

                IEnumerable<Microsoft.WindowsAzure.Storage.Blob.PageRange> ranges = PageBlob.GetPageRanges();

                PageRanges.Items.Clear();

                long startPage, endPage;
                int rangeCount = 0;
                if (ranges != null)
                {
                    long pages = PageBlob.Properties.Length / 512;
                    foreach(Microsoft.WindowsAzure.Storage.Blob.PageRange range in ranges)
                    {
                        startPage = (range.StartOffset) / 512;
                        endPage = (range.EndOffset) / 512;
                        long offset = range.StartOffset;
                        long endOffset = offset + 512 - 1;
                        int index = 0;
                        for (long page = startPage; page <= endPage; page++)
                        {
                            index = PageRanges.Items.Add("Page " + page.ToString() + ": (" + offset.ToString() + " - " + endOffset.ToString() + ")");
                            rangeCount++;
                            offset += 512;
                            endOffset += 512;
                        }
                    }
                }
                if (rangeCount == 0)
                {
                    PageRanges.Items.Add("None - no pages allocated");
                }

                Cursor = Cursors.Arrow;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }