diff --git a/lib/owncloud/test_sharePropagation.py b/lib/owncloud/test_sharePropagation.py new file mode 100644 index 0000000..3f5e6b8 --- /dev/null +++ b/lib/owncloud/test_sharePropagation.py @@ -0,0 +1,257 @@ +__doc__ = """ +Test share etag propagation + ++-------------+-------------------------+-------------------------+----------------------+ +| step number | owner | R2 R3 | R4 | ++-------------+-------------------------+-------------------------+----------------------+ +| 2 | create working dir | create working dir | create working dir | +| | share folder with R2 R3 | | | ++-------------+-------------------------+-------------------------+----------------------+ +| 3 | sync | | | ++-------------+-------------------------+-------------------------+----------------------+ +| 4 | verify propagation | verify propagation | | ++-------------+-------------------------+-------------------------+----------------------+ +| 5 | | upload in shared dir | | ++-------------+-------------------------+-------------------------+----------------------+ +| 6 | verify propagation | verify propagation | | ++-------------+-------------------------+-------------------------+----------------------+ +| 7 | unshare folder | | | ++-------------+-------------------------+-------------------------+----------------------+ +| 8 | verify etag is the same | verify propagation | | ++-------------+-------------------------+-------------------------+----------------------+ +| 9 | share folder with R2 R3 | | | ++-------------+-------------------------+-------------------------+----------------------+ +| 10 | | R2 reshare with R4 | | ++-------------+-------------------------+-------------------------+----------------------+ +| 11 | verify etag is the same | verify propagation | verify propagation | ++-------------+-------------------------+-------------------------+----------------------+ +| 12 | | R2 upload in shared dir | | ++-------------+-------------------------+-------------------------+----------------------+ +| 13 | verify propagation | verify propagation | verify propagation | ++-------------+-------------------------+-------------------------+----------------------+ +| 14 | | | upload in shared dir | ++-------------+-------------------------+-------------------------+----------------------+ +| 15 | verify propagation | verify propagation | verify propagation | ++-------------+-------------------------+-------------------------+----------------------+ +| 16 | | R2 unshares folder | | ++-------------+-------------------------+-------------------------+----------------------+ +| 17 | verify etag is the same | verify etag is the same | verify propagation | ++-------------+-------------------------+-------------------------+----------------------+ +""" + +from smashbox.utilities import * +import itertools +import os.path +import re + +def parse_worker_number(worker_name): + match = re.search(r'(\d+)$', worker_name) + if match is not None: + return int(match.group()) + else: + return None + +@add_worker +def setup(step): + + step(1, 'create test users') + + num_users = 4 + + # Create additional accounts + if config.oc_number_test_users < num_users: + for i in range(config.oc_number_test_users + 1, num_users + 1): + username = "%s%i" % (config.oc_account_name, i) + delete_owncloud_account(username) + create_owncloud_account(username, config.oc_account_password) + login_owncloud_account(username, config.oc_account_password) + + check_users(num_users) + +@add_worker +def owner(step): + + user = '%s%i' % (config.oc_account_name, 1) + + step (2, 'Create workdir') + d = make_workdir() + + mkdir(os.path.join(d, 'test', 'sub')) + run_ocsync(d, user_num=1) + + client = get_oc_api() + client.login(user, config.oc_account_password) + # make sure folder is shared + user2 = '%s%i' % (config.oc_account_name, 2) + share1_data = client.share_file_with_user('/test', user2, perms=31) + fatal_check(share1_data, 'failed sharing a file with %s' % (user2,)) + + user3 = '%s%i' % (config.oc_account_name, 3) + share2_data = client.share_file_with_user('/test', user3, perms=31) + fatal_check(share2_data, 'failed sharing a file with %s' % (user3,)) + + root_etag = client.file_info('/').get_etag() + + step(3, 'Upload file') + createfile(os.path.join(d, 'test', 'test.txt'), '1', count=1000, bs=10) + run_ocsync(d, user_num=1) + + step(4, 'Verify etag propagation') + root_etag2 = client.file_info('/').get_etag() + error_check(root_etag != root_etag2, 'owner uploads /test/test.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag, root_etag2)) + + step(6, 'verify another etag propagation') + root_etag3 = client.file_info('/').get_etag() + error_check(root_etag2 != root_etag3, 'recipients upload to /test/test2.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag2, root_etag3)) + + step(7, 'unshare') + client.delete_share(share1_data.share_id) + client.delete_share(share2_data.share_id) + + step(8, 'verify etag propagation') + root_etag4 = client.file_info('/').get_etag() + error_check(root_etag3 == root_etag4, 'owner unshares ' + 'etag for / previous [%s] new [%s]' % (root_etag3, root_etag4)) + + step(9, 'share again the files') + share1_data = client.share_file_with_user('/test', user2, perms=31) + fatal_check(share1_data, 'failed sharing a file with %s' % (user2,)) + share2_data = client.share_file_with_user('/test', user3, perms=31) + fatal_check(share2_data, 'failed sharing a file with %s' % (user3,)) + + step(11, 'verify etag propagation') + root_etag5 = client.file_info('/').get_etag() + error_check(root_etag4 == root_etag5, 'recipient 2 reshares /test to recipient 4 ' + 'etag for / previous [%s] new [%s]' % (root_etag4, root_etag5)) + + step(13, 'verify etag propagation') + root_etag6 = client.file_info('/').get_etag() + error_check(root_etag5 != root_etag6, 'recipient 2 uploads to /test/test3.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag5, root_etag6)) + + step(15, 'verify etag propagation') + root_etag7 = client.file_info('/').get_etag() + error_check(root_etag6 != root_etag7, 'recipient 4 uploads /test/test4.txt through reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag6, root_etag7)) + + step(17, 'verify etag is the same') + root_etag8 = client.file_info('/').get_etag() + # It shoudn't be propagated here in this case + error_check(root_etag7 == root_etag8, 'recipient 2 unshares the reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag7, root_etag8)) + +def recipients(step): + + usernum = parse_worker_number(reflection.getProcessName()) + user = '%s%i' % (config.oc_account_name, usernum) + + step (2, 'Create workdir') + + d = make_workdir() + run_ocsync(d, user_num=usernum) + + client = get_oc_api() + client.login(user, config.oc_account_password) + root_etag = client.file_info('/').get_etag() + + step(4, 'verify etag propagation') + run_ocsync(d, user_num=usernum) + + root_etag2 = client.file_info('/').get_etag() + error_check(root_etag != root_etag2, 'owner uploads /test/test.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag, root_etag2)) + + step(5, 'upload to shared folder') + if usernum is 2: + createfile(os.path.join(d, 'test', 'test2.txt'), '2', count=1000, bs=10) + run_ocsync(d, user_num=usernum) + + step(6, 'verify another etag propagation') + root_etag3 = client.file_info('/').get_etag() + error_check(root_etag2 != root_etag3, 'recipients upload to /test/test2.txt' + 'etag for / previous [%s] new [%s]' % (root_etag2, root_etag3)) + + step(8, 'verify etag propagation') + root_etag4 = client.file_info('/').get_etag() + error_check(root_etag3 != root_etag4, 'owner unshares ' + 'etag for / previous [%s] new [%s]' % (root_etag3, root_etag4)) + + step(10, 'reshare file') + if usernum is 2: + user4 = '%s%i' % (config.oc_account_name, 4) + share_data = client.share_file_with_user('/test', user4, perms=31) + + step(11, 'verify etag propagation') + root_etag5 = client.file_info('/').get_etag() + error_check(root_etag4 != root_etag5, 'recipient 2 reshares /test to recipient 4 ' + 'etag for / previous [%s] new [%s]' % (root_etag4, root_etag5)) + + step(12, 'recipient 2 upload a file') + if usernum is 2: + createfile(os.path.join(d, 'test', 'test3.txt'), '3', count=1000, bs=10) + run_ocsync(d, user_num=usernum) + + step(13, 'verify etag propagation') + root_etag6 = client.file_info('/').get_etag() + error_check(root_etag5 != root_etag6, 'recipient 2 uploads to /test/test3.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag5, root_etag6)) + + step(15, 'verify etag propagation') + root_etag7 = client.file_info('/').get_etag() + error_check(root_etag6 != root_etag7, 'recipient 4 uploads /test/test4.txt through reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag6, root_etag7)) + + step(16, 'unshare file') + if usernum is 2: + client.delete_share(share_data.share_id) + + step(17, 'verify etag propagation') + root_etag8 = client.file_info('/').get_etag() + # recipients 2 and 3 aren't affected by the unshare + error_check(root_etag7 == root_etag8, 'recipient 2 unshares the reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag7, root_etag8)) + +@add_worker +def recipient_4(step): + usernum = parse_worker_number(reflection.getProcessName()) + user = '%s%i' % (config.oc_account_name, usernum) + + step (2, 'Create workdir') + + d = make_workdir() + run_ocsync(d, user_num=usernum) + + client = get_oc_api() + client.login(user, config.oc_account_password) + root_etag = client.file_info('/').get_etag() + + step(11, 'verify etag propagation') + root_etag5 = client.file_info('/').get_etag() + error_check(root_etag != root_etag5, 'recipient 2 reshares /test to recipient 4 ' + 'etag for / previous [%s] new [%s]' % (root_etag, root_etag5)) + + step(13, 'verify etag propagation') + root_etag6 = client.file_info('/').get_etag() + error_check(root_etag5 != root_etag6, 'recipient 2 uploads to /test/test3.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag5, root_etag6)) + + step(14, 'upload file') + run_ocsync(d, user_num=usernum) + createfile(os.path.join(d, 'test', 'test4.txt'), '4', count=1000, bs=10) + run_ocsync(d, user_num=usernum) + + step(15, 'verify etag propagation') + root_etag7 = client.file_info('/').get_etag() + error_check(root_etag6 != root_etag7, 'recipient 4 uploads /test/test4.txt through reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag6, root_etag7)) + + step(17, 'verify etag propagation') + root_etag8 = client.file_info('/').get_etag() + error_check(root_etag7 != root_etag8, 'recipient 2 unshares the reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag7, root_etag8)) + +for i in range(2,4): + add_worker(recipients, name='recipient_%s' % (i,)) + diff --git a/lib/owncloud/test_sharePropagationInside.py b/lib/owncloud/test_sharePropagationInside.py new file mode 100644 index 0000000..0983eb8 --- /dev/null +++ b/lib/owncloud/test_sharePropagationInside.py @@ -0,0 +1,407 @@ +__doc__ = """ ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| step | owner | R1 | R2 | R3 | R4 | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 2 | create dir | create dir | create dir | create dir | create dir | +| | share /test | | | | | +| | -> R1 R2 | | | | | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 3 | | | reshare /test | | | +| | | | -> R3 | | | +| | | | reshare /test/sub | | | +| | | | -> R4 | | | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 4 | get etags | get etags | get etags | get etags | get etags | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 5 | upload to | | | | | +| | -> /test | | | | | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 6 | propagation | propagation | propagation | propagation | NOT propagation | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 7 | | | upload to | | | +| | | | -> /test | | | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 8 | propagation | propagation | propagation | propagation | NOT propagation | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 9 | upload to | | | | | +| | -> /test/sub | | | | | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 10 | propagation | propagation | propagation | propagation | propagation | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 11 | | upload to | | | | +| | | -> /test/sub | | | | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 12 | propagation | propagation | propagation | propagation | propagation | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 13 | | | | | upload to /sub | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 14 | propagation | propagation | propagation | propagation | propagation | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 15 | | | unshare | | | +| | | | -> /test/sub | | | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +| 16 | NOT propagation | NOT | NOT propagation | NOT | propagation | +| | | propagation | | propagation | | ++-------+-----------------+----------------+-------------------+-------------+-----------------+ +""" +from smashbox.utilities import * +import itertools +import os.path +import re + +@add_worker +def setup(step): + + step(1, 'create test users') + + num_users = 5 + + # Create additional accounts + if config.oc_number_test_users < num_users: + for i in range(config.oc_number_test_users + 1, num_users + 1): + username = "%s%i" % (config.oc_account_name, i) + delete_owncloud_account(username) + create_owncloud_account(username, config.oc_account_password) + login_owncloud_account(username, config.oc_account_password) + + check_users(num_users) + +@add_worker +def owner(step): + user = '%s%i' % (config.oc_account_name, 1) + + step (2, 'Create workdir') + d = make_workdir() + + mkdir(os.path.join(d, 'test', 'sub')) + run_ocsync(d, user_num=1) + + client = get_oc_api() + client.login(user, config.oc_account_password) + # make sure folder is shared + user2 = '%s%i' % (config.oc_account_name, 2) + share1_data = client.share_file_with_user('/test', user2, perms=31) + fatal_check(share1_data, 'failed sharing a file with %s' % (user2,)) + + user3 = '%s%i' % (config.oc_account_name, 3) + share1_data = client.share_file_with_user('/test', user3, perms=31) + fatal_check(share1_data, 'failed sharing a file with %s' % (user3,)) + + step(4, 'get base etags to compare') + root_etag = client.file_info('/').get_etag() + test_etag = client.file_info('/test').get_etag() + + step(5, 'Upload to /test') + createfile(os.path.join(d, 'test', 'test2.txt'), '2', count=1000, bs=10) + run_ocsync(d, user_num=1) + + step(6, 'verify etag propagation') + root_etag2 = client.file_info('/').get_etag() + error_check(root_etag != root_etag2, 'owner uploads to /test/test2.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag, root_etag2)) + + step(8, 'verify etag propagation') + root_etag3 = client.file_info('/').get_etag() + error_check(root_etag2 != root_etag3, 'recipient2 uploads to /test/test3.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag2, root_etag3)) + + step(9, 'Upload to /test/sub') + createfile(os.path.join(d, 'test', 'sub', 'test4.txt'), '4', count=1000, bs=10) + run_ocsync(d, user_num=1) + + step(10, 'verify etag propagation') + root_etag4 = client.file_info('/').get_etag() + test_etag2 = client.file_info('/test').get_etag() + error_check(root_etag3 != root_etag4, 'owner uploads to /test/sub/test4.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag3, root_etag4)) + error_check(test_etag != test_etag2, 'owner uploads to /test/sub/test4.txt ' + 'etag for /test previous [%s] new [%s]' % (test_etag, test_etag2)) + + step(12, 'verify etag propagation') + root_etag5 = client.file_info('/').get_etag() + test_etag3 = client.file_info('/test').get_etag() + error_check(root_etag4 != root_etag5, 'recipient 1 uploads to /test/sub/test5.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag4, root_etag5)) + error_check(test_etag2 != test_etag3, 'recipient 1 uploads to /test/sub/test5.txt ' + 'etag for /test previous [%s] new [%s]' % (test_etag2, test_etag3)) + + step(14, 'verify etag propagation') + root_etag6 = client.file_info('/').get_etag() + test_etag4 = client.file_info('/test').get_etag() + error_check(root_etag5 != root_etag6, 'recipient 4 uploads to /sub/test6.txt through reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag5, root_etag6)) + error_check(test_etag3 != test_etag4, 'recipient 4 uploads to /sub/test6.txt through reshare ' + 'etag for /test previous [%s] new [%s]' % (test_etag3, test_etag4)) + + step(16, 'verify etag is NOT propagated') + root_etag7 = client.file_info('/').get_etag() + test_etag5 = client.file_info('/test').get_etag() + error_check(root_etag6 == root_etag7, 'recipient 2 unshares reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag6, root_etag7)) + error_check(test_etag4 == test_etag5, 'recipient 2 unshares reshare ' + 'etag for /test previous [%s] new [%s]' % (test_etag4, test_etag5)) + +@add_worker +def recipient1(step): + + user = '%s%i' % (config.oc_account_name, 2) + + step (2, 'Create workdir') + + d = make_workdir() + run_ocsync(d, user_num=2) + + client = get_oc_api() + client.login(user, config.oc_account_password) + + step(4, 'get base etags to compare') + root_etag = client.file_info('/').get_etag() + test_etag = client.file_info('/test').get_etag() + + step(6, 'verify etag propagation') + root_etag2 = client.file_info('/').get_etag() + error_check(root_etag != root_etag2, 'owner uploads to /test/test2.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag, root_etag2)) + + step(8, 'verify etag propagation') + root_etag3 = client.file_info('/').get_etag() + error_check(root_etag2 != root_etag3, 'recipient2 uploads to /test/test3.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag2, root_etag3)) + + step(10, 'verify etag propagation') + root_etag4 = client.file_info('/').get_etag() + test_etag2 = client.file_info('/test').get_etag() + error_check(root_etag3 != root_etag4, 'owner uploads to /test/sub/test4.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag3, root_etag4)) + error_check(test_etag != test_etag2, 'owner uploads to /test/sub/test4.txt ' + 'etag for /test previous [%s] new [%s]' % (test_etag, test_etag2)) + + step(11, 'Upload to /test/sub') + run_ocsync(d, user_num=2) + createfile(os.path.join(d, 'test', 'sub', 'test5.txt'), '5', count=1000, bs=10) + run_ocsync(d, user_num=2) + + step(12, 'verify etag propagation') + root_etag5 = client.file_info('/').get_etag() + test_etag3 = client.file_info('/test').get_etag() + error_check(root_etag4 != root_etag5, 'recipient 1 uploads to /test/sub/test5.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag4, root_etag5)) + error_check(test_etag2 != test_etag3, 'recipient 1 uploads to /test/sub/test5.txt ' + 'etag for /test previous [%s] new [%s]' % (test_etag2, test_etag3)) + + step(14, 'verify etag propagation') + root_etag6 = client.file_info('/').get_etag() + test_etag4 = client.file_info('/test').get_etag() + error_check(root_etag5 != root_etag6, 'recipient 4 uploads to /sub/test6.txt through reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag5, root_etag6)) + error_check(test_etag3 != test_etag4, 'recipient 4 uploads to /sub/test6.txt through reshare ' + 'etag for /test previous [%s] new [%s]' % (test_etag3, test_etag4)) + + step(16, 'verify etag propagation') + root_etag7 = client.file_info('/').get_etag() + test_etag5 = client.file_info('/test').get_etag() + # not affected by the unshare + error_check(root_etag6 == root_etag7, 'recipient 2 unshares reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag6, root_etag7)) + error_check(test_etag4 == test_etag5, 'recipient 2 unshares reshare ' + 'etag for /test previous [%s] new [%s]' % (test_etag4, test_etag5)) + +@add_worker +def recipient2(step): + + user = '%s%i' % (config.oc_account_name, 3) + + step (2, 'Create workdir') + + d = make_workdir() + run_ocsync(d, user_num=3) + + client = get_oc_api() + client.login(user, config.oc_account_password) + root_etag = client.file_info('/').get_etag() + + user4 = '%s%i' % (config.oc_account_name, 4) + user5 = '%s%i' % (config.oc_account_name, 5) + + step(3, 'Reshare /test folder with %s and /test/sub with %s' % (user4, user5)) + + share1_data = client.share_file_with_user('/test', user4, perms=31) + fatal_check(share1_data, 'failed sharing a file with %s' % (user4,)) + share2_data = client.share_file_with_user('/test/sub', user5, perms=31) + fatal_check(share2_data, 'failed sharing a file with %s' % (user5,)) + + step(4, 'get base etags to compare') + root_etag = client.file_info('/').get_etag() + test_etag = client.file_info('/test').get_etag() + + step(6, 'verify etag propagation') + root_etag2 = client.file_info('/').get_etag() + error_check(root_etag != root_etag2, 'owner uploads to /test/test2.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag, root_etag2)) + + step(7, 'Upload to /test') + run_ocsync(d, user_num=3) + createfile(os.path.join(d, 'test', 'test3.txt'), '3', count=1000, bs=10) + run_ocsync(d, user_num=3) + + step(8, 'verify etag propagation') + root_etag3 = client.file_info('/').get_etag() + error_check(root_etag2 != root_etag3, 'recipient2 uploads to /test/test3.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag2, root_etag3)) + + step(10, 'verify etag propagation') + root_etag4 = client.file_info('/').get_etag() + test_etag2 = client.file_info('/test').get_etag() + error_check(root_etag3 != root_etag4, 'owner uploads to /test/sub/test4.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag3, root_etag4)) + error_check(test_etag != test_etag2, 'owner uploads to /test/sub/test4.txt ' + 'etag for /test previous [%s] new [%s]' % (test_etag, test_etag2)) + + step(12, 'verify etag propagation') + root_etag5 = client.file_info('/').get_etag() + test_etag3 = client.file_info('/test').get_etag() + error_check(root_etag4 != root_etag5, 'recipient 1 uploads to /test/sub/test5.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag4, root_etag5)) + error_check(test_etag2 != test_etag3, 'recipient 1 uploads to /test/sub/test5.txt ' + 'etag for /test previous [%s] new [%s]' % (test_etag2, test_etag3)) + + step(14, 'verify etag propagation') + root_etag6 = client.file_info('/').get_etag() + test_etag4 = client.file_info('/test').get_etag() + error_check(root_etag5 != root_etag6, 'recipient 4 uploads to /sub/test6.txt through reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag5, root_etag6)) + error_check(test_etag3 != test_etag4, 'recipient 4 uploads to /sub/test6.txt through reshare ' + 'etag for /test previous [%s] new [%s]' % (test_etag3, test_etag4)) + + step(15, 'Unshare reshared /test/sub') + client.delete_share(share2_data.share_id) + + step(16, 'verify etag propagation') + root_etag7 = client.file_info('/').get_etag() + test_etag5 = client.file_info('/test').get_etag() + error_check(root_etag6 == root_etag7, 'recipient 2 unshares reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag6, root_etag7)) + error_check(test_etag4 == test_etag5, 'recipient 2 unshares reshare ' + 'etag for /test previous [%s] new [%s]' % (test_etag4, test_etag5)) + +@add_worker +def recipient3(step): + + user = '%s%i' % (config.oc_account_name, 4) + + step (2, 'Create workdir') + + d = make_workdir() + run_ocsync(d, user_num=4) + + client = get_oc_api() + client.login(user, config.oc_account_password) + + step(4, 'get base etags to compare') + root_etag = client.file_info('/').get_etag() + test_etag = client.file_info('/test').get_etag() + + step(6, 'verify etag propagation') + root_etag2 = client.file_info('/').get_etag() + error_check(root_etag != root_etag2, 'owner uploads to /test/test2.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag, root_etag2)) + + step(8, 'verify etag propagation') + root_etag3 = client.file_info('/').get_etag() + error_check(root_etag2 != root_etag3, 'recipient2 uploads to /test/test3.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag2, root_etag3)) + + step(10, 'verify etag propagation') + root_etag4 = client.file_info('/').get_etag() + test_etag2 = client.file_info('/test').get_etag() + error_check(root_etag3 != root_etag4, 'owner uploads to /test/sub/test4.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag3, root_etag4)) + error_check(test_etag != test_etag2, 'owner uploads to /test/sub/test4.txt ' + 'etag for /test previous [%s] new [%s]' % (test_etag, test_etag2)) + + step(12, 'verify etag propagation') + root_etag5 = client.file_info('/').get_etag() + test_etag3 = client.file_info('/test').get_etag() + error_check(root_etag4 != root_etag5, 'recipient 1 uploads to /test/sub/test5.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag4, root_etag5)) + error_check(test_etag2 != test_etag3, 'recipient 1 uploads to /test/sub/test5.txt ' + 'etag for /test previous [%s] new [%s]' % (test_etag2, test_etag3)) + + step(14, 'verify etag propagation') + root_etag6 = client.file_info('/').get_etag() + test_etag4 = client.file_info('/test').get_etag() + error_check(root_etag5 != root_etag6, 'recipient 4 uploads to /sub/test6.txt through reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag5, root_etag6)) + error_check(test_etag3 != test_etag4, 'recipient 4 uploads to /sub/test6.txt through reshare ' + 'etag for /test previous [%s] new [%s]' % (test_etag3, test_etag4)) + + step(16, 'verify etag propagation') + root_etag7 = client.file_info('/').get_etag() + test_etag5 = client.file_info('/test').get_etag() + error_check(root_etag6 == root_etag7, 'recipient 2 unshares reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag6, root_etag7)) + error_check(test_etag4 == test_etag5, 'recipient 2 unshares reshare ' + 'etag for /test previous [%s] new [%s]' % (test_etag4, test_etag5)) + +@add_worker +def recipient4(step): + + user = '%s%i' % (config.oc_account_name, 5) + + step (2, 'Create workdir') + + d = make_workdir() + run_ocsync(d, user_num=5) + + client = get_oc_api() + client.login(user, config.oc_account_password) + + step(4, 'get base etags to compare') + root_etag = client.file_info('/').get_etag() + sub_etag = client.file_info('/sub').get_etag() + + step(6, 'verify etag is NOT propagated') + root_etag2 = client.file_info('/').get_etag() + error_check(root_etag == root_etag2, 'owner uploads to /test/test2.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag, root_etag2)) + + step(8, 'verify etag is NOT propagated') + root_etag3 = client.file_info('/').get_etag() + error_check(root_etag2 == root_etag3, 'recipient2 uploads to /test/test3.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag2, root_etag3)) + + step(10, 'verify etag propagation') + root_etag4 = client.file_info('/').get_etag() + sub_etag2 = client.file_info('/sub').get_etag() + error_check(root_etag3 != root_etag4, 'owner uploads to /test/sub/test4.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag3, root_etag4)) + error_check(sub_etag != sub_etag2, 'owner uploads to /test/sub/test4.txt ' + 'etag for /sub previous [%s] new [%s]' % (sub_etag, sub_etag2)) + + step(12, 'verify etag propagation') + root_etag5 = client.file_info('/').get_etag() + sub_etag3 = client.file_info('/sub').get_etag() + error_check(root_etag4 != root_etag5, 'recipient 1 uploads to /test/sub/test5.txt ' + 'etag for / previous [%s] new [%s]' % (root_etag4, root_etag5)) + error_check(sub_etag2 != sub_etag3, 'recipient 1 uploads to /test/sub/test5.txt ' + 'etag for /sub previous [%s] new [%s]' % (sub_etag2, sub_etag3)) + + step(13, 'Upload to /sub') + run_ocsync(d, user_num=5) + createfile(os.path.join(d, 'sub', 'test6.txt'), '6', count=1000, bs=10) + run_ocsync(d, user_num=5) + + step(14, 'verify etag propagation') + root_etag6 = client.file_info('/').get_etag() + sub_etag4 = client.file_info('/sub').get_etag() + error_check(root_etag5 != root_etag6, 'recipient 4 uploads to /sub/test6.txt through reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag5, root_etag6)) + error_check(sub_etag3 != sub_etag4, 'recipient 4 uploads to /sub/test6.txt through reshare ' + 'etag for /sub previous [%s] new [%s]' % (sub_etag3, sub_etag4)) + + step(16, 'verify etag propagation') + root_etag7 = client.file_info('/').get_etag() + error_check(root_etag6 != root_etag7, 'recipient 2 unshares reshare ' + 'etag for / previous [%s] new [%s]' % (root_etag6, root_etag7)) + # /sub folder should be deleted at this point, so no checking +