Skip to content

Commit b607f34

Browse files
committed
Regression test for pseudo-hierachy via iterator delimiter and prefix.
Fixes #372.
1 parent 9d6efcf commit b607f34

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed

regression/data/simple.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a simple text file.

regression/storage.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ class TestStorageFiles(TestStorage):
8282
'big': {
8383
'path': 'regression/data/five-mb-file.zip',
8484
},
85+
'simple': {
86+
'path': 'regression/data/simple.txt',
87+
}
8588
}
8689

8790
@staticmethod
@@ -203,6 +206,78 @@ def test_paginate_files(self):
203206
self.assertEqual(len(last_keys), truncation_size)
204207

205208

209+
class TestStoragePseudoHierarchy(TestStorageFiles):
210+
211+
FILENAMES = [
212+
'file01.txt',
213+
'parent/file11.txt',
214+
'parent/child/file21.txt',
215+
'parent/child/file22.txt',
216+
'parent/child/grand/file31.txt',
217+
'parent/child/other/file32.txt',
218+
]
219+
220+
@classmethod
221+
def setUpClass(cls):
222+
super(TestStoragePseudoHierarchy, cls).setUpClass()
223+
# Make sure bucket empty before beginning.
224+
for key in cls.bucket:
225+
key.delete()
226+
227+
simple_path = cls.FILES['simple']['path']
228+
key = cls.bucket.upload_file(simple_path, key=cls.FILENAMES[0])
229+
cls.suite_keys_to_delete = [key]
230+
for filename in cls.FILENAMES[1:]:
231+
new_key = cls.bucket.copy_key(key, cls.bucket, filename)
232+
cls.suite_keys_to_delete.append(new_key)
233+
234+
@classmethod
235+
def tearDownClass(cls):
236+
for key in cls.suite_keys_to_delete:
237+
key.delete()
238+
239+
def test_root_level_w_delimiter(self):
240+
iterator = self.bucket.iterator(delimiter='/')
241+
response = iterator.get_next_page_response()
242+
keys = list(iterator.get_items_from_response(response))
243+
self.assertEqual([key.name for key in keys], ['file01.txt'])
244+
self.assertEqual(iterator.page_number, 1)
245+
self.assertTrue(iterator.next_page_token is None)
246+
self.assertEqual(iterator.prefixes, ('parent/',))
247+
248+
def test_first_level(self):
249+
iterator = self.bucket.iterator(delimiter='/', prefix='parent/')
250+
response = iterator.get_next_page_response()
251+
keys = list(iterator.get_items_from_response(response))
252+
self.assertEqual([key.name for key in keys], ['parent/file11.txt'])
253+
self.assertEqual(iterator.page_number, 1)
254+
self.assertTrue(iterator.next_page_token is None)
255+
self.assertEqual(iterator.prefixes, ('parent/child/',))
256+
257+
def test_second_level(self):
258+
iterator = self.bucket.iterator(delimiter='/', prefix='parent/child/')
259+
response = iterator.get_next_page_response()
260+
keys = list(iterator.get_items_from_response(response))
261+
self.assertEqual([key.name for key in keys],
262+
['parent/child/file21.txt',
263+
'parent/child/file22.txt'])
264+
self.assertEqual(iterator.page_number, 1)
265+
self.assertTrue(iterator.next_page_token is None)
266+
self.assertEqual(iterator.prefixes,
267+
('parent/child/grand/', 'parent/child/other/'))
268+
269+
def test_third_level(self):
270+
iterator = self.bucket.iterator(delimiter='/',
271+
prefix='parent/child/grand/')
272+
response = iterator.get_next_page_response()
273+
keys = list(iterator.get_items_from_response(response))
274+
self.assertEqual([key.name for key in keys],
275+
['parent/child/grand/file31.txt'])
276+
self.assertEqual(iterator.page_number, 1)
277+
self.assertTrue(iterator.next_page_token is None)
278+
self.assertEqual(iterator.prefixes, ())
279+
280+
206281
class TestStorageSignURLs(TestStorageFiles):
207282

208283
def setUp(self):

0 commit comments

Comments
 (0)