Skip to content

Commit

Permalink
Regression test for pseudo-hierachy via iterator delimiter and prefix.
Browse files Browse the repository at this point in the history
Fixes #372.
  • Loading branch information
tseaver committed Nov 14, 2014
1 parent 9d6efcf commit b607f34
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
1 change: 1 addition & 0 deletions regression/data/simple.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
This is a simple text file.
75 changes: 75 additions & 0 deletions regression/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,9 @@ class TestStorageFiles(TestStorage):
'big': {
'path': 'regression/data/five-mb-file.zip',
},
'simple': {
'path': 'regression/data/simple.txt',
}
}

@staticmethod
Expand Down Expand Up @@ -203,6 +206,78 @@ def test_paginate_files(self):
self.assertEqual(len(last_keys), truncation_size)


class TestStoragePseudoHierarchy(TestStorageFiles):

FILENAMES = [
'file01.txt',
'parent/file11.txt',
'parent/child/file21.txt',
'parent/child/file22.txt',
'parent/child/grand/file31.txt',
'parent/child/other/file32.txt',
]

@classmethod
def setUpClass(cls):
super(TestStoragePseudoHierarchy, cls).setUpClass()
# Make sure bucket empty before beginning.
for key in cls.bucket:
key.delete()

simple_path = cls.FILES['simple']['path']
key = cls.bucket.upload_file(simple_path, key=cls.FILENAMES[0])
cls.suite_keys_to_delete = [key]
for filename in cls.FILENAMES[1:]:
new_key = cls.bucket.copy_key(key, cls.bucket, filename)
cls.suite_keys_to_delete.append(new_key)

@classmethod
def tearDownClass(cls):
for key in cls.suite_keys_to_delete:
key.delete()

def test_root_level_w_delimiter(self):
iterator = self.bucket.iterator(delimiter='/')
response = iterator.get_next_page_response()
keys = list(iterator.get_items_from_response(response))
self.assertEqual([key.name for key in keys], ['file01.txt'])
self.assertEqual(iterator.page_number, 1)
self.assertTrue(iterator.next_page_token is None)
self.assertEqual(iterator.prefixes, ('parent/',))

def test_first_level(self):
iterator = self.bucket.iterator(delimiter='/', prefix='parent/')
response = iterator.get_next_page_response()
keys = list(iterator.get_items_from_response(response))
self.assertEqual([key.name for key in keys], ['parent/file11.txt'])
self.assertEqual(iterator.page_number, 1)
self.assertTrue(iterator.next_page_token is None)
self.assertEqual(iterator.prefixes, ('parent/child/',))

def test_second_level(self):
iterator = self.bucket.iterator(delimiter='/', prefix='parent/child/')
response = iterator.get_next_page_response()
keys = list(iterator.get_items_from_response(response))
self.assertEqual([key.name for key in keys],
['parent/child/file21.txt',
'parent/child/file22.txt'])
self.assertEqual(iterator.page_number, 1)
self.assertTrue(iterator.next_page_token is None)
self.assertEqual(iterator.prefixes,
('parent/child/grand/', 'parent/child/other/'))

def test_third_level(self):
iterator = self.bucket.iterator(delimiter='/',
prefix='parent/child/grand/')
response = iterator.get_next_page_response()
keys = list(iterator.get_items_from_response(response))
self.assertEqual([key.name for key in keys],
['parent/child/grand/file31.txt'])
self.assertEqual(iterator.page_number, 1)
self.assertTrue(iterator.next_page_token is None)
self.assertEqual(iterator.prefixes, ())


class TestStorageSignURLs(TestStorageFiles):

def setUp(self):
Expand Down

0 comments on commit b607f34

Please sign in to comment.