Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 60 additions & 2 deletions tests/test_page_blob.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,18 @@
TestMode,
record,
)
from azure.common import (
AzureException,
)

#------------------------------------------------------------------------------
TEST_BLOB_PREFIX = 'blob'
FILE_PATH = 'blob_input.temp.dat'
LARGE_BLOB_SIZE = 64 * 1024 + 512
EIGHT_TB = 8 * 1024 * 1024 * 1024 * 1024
#------------------------------------------------------------------------------s

class StoragePageBlobTest(StorageTestCase):
class StoragePageBlobTest(StorageTestCase):

def setUp(self):
super(StoragePageBlobTest, self).setUp()
Expand Down Expand Up @@ -82,6 +86,10 @@ def assertBlobEqual(self, container_name, blob_name, expected_data):
actual_data = self.bs.get_blob_to_bytes(container_name, blob_name)
self.assertEqual(actual_data.content, expected_data)

def assertRangeEqual(self, container_name, blob_name, expected_data, start_range, end_range):
actual_data = self.bs.get_blob_to_bytes(container_name, blob_name, None, start_range, end_range)
self.assertEqual(actual_data.content, expected_data)

def _wait_for_async_copy(self, container_name, blob_name):
count = 0
blob = self.bs.get_blob_properties(container_name, blob_name)
Expand Down Expand Up @@ -116,7 +124,7 @@ def test_create_blob(self):
# Assert
self.assertIsNotNone(resp.etag)
self.assertIsNotNone(resp.last_modified)
self.bs.exists(self.container_name, blob_name)
self.assertTrue(self.bs.exists(self.container_name, blob_name))

@record
def test_create_blob_with_metadata(self):
Expand Down Expand Up @@ -160,6 +168,56 @@ def test_update_page(self):
self.assertIsNotNone(resp.sequence_number)
self.assertBlobEqual(self.container_name, blob_name, data)

@record
def test_create_8tb_blob(self):
# Arrange
blob_name = self._get_blob_reference()

# Act
resp = self.bs.create_blob(self.container_name, blob_name, EIGHT_TB)
blob = self.bs.get_blob_properties(self.container_name, blob_name)
ranges = self.bs.get_page_ranges(self.container_name, blob_name)

# Assert
self.assertIsNotNone(resp.etag)
self.assertIsNotNone(resp.last_modified)
self.assertIsInstance(blob, Blob)
self.assertEqual(blob.properties.content_length, EIGHT_TB)
self.assertEqual(0, len(ranges))

@record
def test_create_larger_than_8tb_blob_fail(self):
# Arrange
blob_name = self._get_blob_reference()

# Act
with self.assertRaises(AzureHttpError):
self.bs.create_blob(self.container_name, blob_name, EIGHT_TB + 1)

@record
def test_update_8tb_blob_page(self):
# Arrange
blob_name = self._get_blob_reference()
self.bs.create_blob(self.container_name, blob_name, EIGHT_TB)

# Act
data = self.get_random_bytes(512)
start_range = EIGHT_TB - 512
end_range = EIGHT_TB - 1
resp = self.bs.update_page(self.container_name, blob_name, data, start_range, end_range)
blob = self.bs.get_blob_properties(self.container_name, blob_name)
ranges = self.bs.get_page_ranges(self.container_name, blob_name)

# Assert
self.assertIsNotNone(resp.etag)
self.assertIsNotNone(resp.last_modified)
self.assertIsNotNone(resp.sequence_number)
self.assertRangeEqual(self.container_name, blob_name, data, start_range, end_range)
self.assertEqual(blob.properties.content_length, EIGHT_TB)
self.assertEqual(1, len(ranges))
self.assertEqual(ranges[0].start, start_range)
self.assertEqual(ranges[0].end, end_range)

@record
def test_update_page_with_md5(self):
# Arrange
Expand Down