import json
import httplib2
import threading
+import itertools
import xml.etree.ElementTree as ET
check_head_obj_content(key, contents[-1])
i = len(contents)
for key in bucket.list_versions():
+ if key.name != objname:
+ continue
+
i -= 1
eq(keys[i].version_id or 'null', key.version_id)
print 'testing obj version-id=', key.version_id
k_pos = len(k)
i = 0
for o in bucket.list_versions():
+ if o.name != objname:
+ continue
i += 1
if i > num_versions:
break
+@attr(resource='object')
+@attr(method='multipart')
+@attr(operation='list versioned objects')
+@attr(assertion='everything works')
+@attr('versioning')
+def test_versioning_obj_list_marker():
+ bucket = get_new_bucket()
+ check_configure_versioning_retry(bucket, True, "Enabled")
+
+ objname = 'testobj'
+ objname2 = 'testobj-1'
+
+ num_vers = 5
+
+ (k, c) = create_multiple_versions(bucket, objname, num_vers)
+ (k2, c2) = create_multiple_versions(bucket, objname2, num_vers)
+
+ k.reverse()
+ k2.reverse()
+
+ allkeys = k + k2
+
+ names = []
+
+ for key1, key2 in itertools.izip_longest(bucket.list_versions(), allkeys):
+ eq(key1.version_id, key2.version_id)
+ names.append(key1.name)
+
+ for i in xrange(len(allkeys)):
+ for key1, key2 in itertools.izip_longest(bucket.list_versions(key_marker=names[i], version_id_marker=allkeys[i].version_id), allkeys[i+1:]):
+ eq(key1.version_id, key2.version_id)
+
+ # with nonexisting version id, skip to next object
+ for key1, key2 in itertools.izip_longest(bucket.list_versions(key_marker=objname, version_id_marker='nosuchversion'), allkeys[5:]):
+ eq(key1.version_id, key2.version_id)
+
+
@attr(resource='object')
@attr(method='multipart')
@attr(operation='create and test versioned object copying')