From 97fe4956f2b2b6b0177b306c2319adf913ac887c Mon Sep 17 00:00:00 2001 From: Shwetha-H-Panduranga Date: Wed, 4 Jan 2012 18:56:45 +0530 Subject: Adding afr basic testcases(fileops, dirops tests) Change-Id: I2705e70dccf0c96206d8f73e84eaaca760ffe753 Signed-off-by: Shwetha-H-Panduranga --- TestUnits/xlators/cluster/afr/basic/testcases.py | 897 ++++++++++++++++++++++ TestUnits/xlators/cluster/afr/basic/testcaseslist | 22 + TestUnits/xlators/cluster/afr/basic/testenv.cfg | 81 ++ TestUnits/xlators/cluster/afr/basic/testunit.py | 129 ++++ 4 files changed, 1129 insertions(+) create mode 100644 TestUnits/xlators/cluster/afr/basic/testcases.py create mode 100644 TestUnits/xlators/cluster/afr/basic/testcaseslist create mode 100644 TestUnits/xlators/cluster/afr/basic/testenv.cfg create mode 100644 TestUnits/xlators/cluster/afr/basic/testunit.py (limited to 'TestUnits') diff --git a/TestUnits/xlators/cluster/afr/basic/testcases.py b/TestUnits/xlators/cluster/afr/basic/testcases.py new file mode 100644 index 0000000..e2b3f95 --- /dev/null +++ b/TestUnits/xlators/cluster/afr/basic/testcases.py @@ -0,0 +1,897 @@ +"""testcases for afr/basic +""" + +import sys +import time +import os +import hostutils +import managerutils +import glusterutils +import atfutils +import clientutils +import serverutils +import parser +import validate + +write_op = ">" +append_op = ">>" +mounts = ['mount1'] +commands = { + 'ls' : 'ls', + 'stat' : 'stat', + 'echo' : 'echo', + 'cat' : 'cat', + 'touch' : 'touch', + 'rename': 'mv', + 'unlink': 'rm', + 'mkdir' : 'mkdir -p', + 'hardlink' : 'ln', + 'symlink' : 'ln -s', + 'setattr' : 'setfattr', + 'getattr' : 'getfattr', + 'truncate' : 'truncate', + 'unlink_force' : 'rm -f', + 'unlink_dir_force' : 'rm -rf' + } + +def reset_testenv(): + return_status = clientutils.umountall() + if return_status: + return return_status + glusterutils.volume_stop("server1", force=True) + glusterutils.volume_delete("server1") + glusterutils.glusterd_stop_allservers() + glusterutils.glusterd_remove_dir_allservers() + glusterutils.glusterd_remove_logs_allservers() + return 0 + +def setup_testenv(): + """ + """ + return_status = glusterutils.glusterd_start_allservers(force=True) + if return_status: + return return_status + + return_status = glusterutils.peer_probe("server1") + if return_status: + return return_status + + return_status = glusterutils.create_brick_allservers() + if return_status: + return return_status + + return_status = glusterutils.volume_create("server1") + if return_status: + return return_status + + glusterutils.volume_set("server1", key="diagnostics.client-log-level", value="DEBUG") + + return_status = glusterutils.volume_start("server1") + if return_status: + return return_status + + return_status = clientutils.mountall() + if return_status: + return return_status + + return 0 + +def file_write(): + """ + Description: Test 'write' operation + """ + return_status = 1 + data = "Hello World. This is testing write file operation" + filename = "write.txt" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['echo'], data, write_op, filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['ls'], filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = filename + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def file_lookup(): + """ + Description: Test 'lookup' operation + """ + return_status = 1 + filename = "stat.txt" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['touch'], filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['stat'], filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "regular empty file" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def file_read(): + """ + Description: Test 'read' operation + """ + return_status = 1 + data = "Hello World. This is testing read file operation" + filename = "read.txt" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['echo'], data, write_op, filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['cat'], filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = data + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + return 0 + +def file_append(): + """ + Description: Test 'append' operation + """ + return_status = 1 + data1 = "Hello World. This is testing append file operation." + data2 = "Appending data to file." + filename = "append.txt" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['echo'], data1, write_op, filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['cat'], filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = data1 + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['echo'], data2, append_op, filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['cat'], filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = str([data1 + "\n", data2 + "\n"]) + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def file_truncate(): + """ + """ + return_status = 1 + data = "Hello World. This is testing truncate file operation" + filename = "truncate.txt" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['echo'], data, write_op, filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['cat'], filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = data + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['truncate'], "-s 0", filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def file_hardlink(): + """ + """ + return_status = 1 + filename1 = "testlink.txt" + filename2 = "hardlink_to_testlink.txt" + data = "Hello World. This is testing file hard link operation" + bricks = ['brick1', 'brick2'] + + # Create a file + command = ' '.join([commands['echo'], data, write_op, filename1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + # Check whether the file has been created on mount, bricks + command = ' '.join([commands['cat'], filename1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = data + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + # Create Hardlink + command = ' '.join([commands['hardlink'], filename1, filename2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + # Check whether the hardlink has been created on mount, bricks + # Check the Link Count + # Cat the data of new hard_link + for filename in [filename1, filename2]: + command = ' '.join([commands['stat'], filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "Links: 2" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['cat'], filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = data + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def file_symlink(): + """ + """ + return_status = 1 + filename1 = "testsymlink.txt" + filename2 = "symlink_to_testsymlink.txt" + data = "Hello World. This is testing file sym link operation" + bricks = ['brick1', 'brick2'] + + # Create a file + command = ' '.join([commands['echo'], data, write_op, filename1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + # Check whether the file has been created on mount, bricks + command = ' '.join([commands['cat'], filename1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = data + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + # Create Symlink + command = ' '.join([commands['symlink'], filename1, filename2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + # Check whether the symlink has been created on mount, bricks + # Check the Sym Link in stat structure + # Cat the data of sym_link and output's the original file data + command = ' '.join([commands['stat'], filename2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "symbolic link" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['cat'], filename2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = data + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def file_set_get_fattr(): + """ + """ + return_status = 1 + name = "trusted.name" + value = "set_get_attr_test" + data = "Hello World. This is testing set_get_attr file operation" + filename = "set_get_fattr.txt" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['echo'], data, write_op, filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['setattr'],"-n", name, "-v", value, filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['getattr'], "-n", name, filename]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = value + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def file_rename(): + """ + """ + return_status = 1 + data = "Hello World. This is testing rename file operation" + filename1 = "rename_me.txt" + filename2 = "rename_to.txt" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['echo'], data, write_op, filename1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['ls'], filename1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = filename1 + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['rename'], filename1, filename2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['ls'], filename1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "No such file or directory" + return_status = atfutils.validate_output(output, 1, expected_output, stream="stderr") + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 1, expected_output, stream="stderr") + if return_status is not 0: + return return_status + + command = ' '.join([commands['ls'], filename2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = filename2 + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['cat'], filename2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = data + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def file_unlink(): + """ + """ + return_status = 1 + data = "Hello World. This is testing unlink file operation" + filename1 = "unlink_me.txt" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['echo'], data, write_op, filename1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['ls'], filename1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = filename1 + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['unlink_force'], filename1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['ls'], filename1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "No such file or directory" + return_status = atfutils.validate_output(output, 1, expected_output, stream="stderr") + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 1, expected_output, stream="stderr") + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def dir_mkdir(): + """ + """ + return_status = 1 + dirname = "dir_mkdir" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['mkdir'], dirname]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['stat'], dirname]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = dirname + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def dir_lookup(): + """ + """ + return_status = 1 + dirname = "dir_lookup" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['mkdir'], dirname]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['stat'], dirname]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "directory" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def dir_read(): + """ + """ + return_status = 1 + dirname = "dir_read" + bricks = ['brick1', 'brick2'] + subdirlist = [] + + command = ' '.join([commands['mkdir'], dirname]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + subdirs = os.path.join(dirname, "{1..4}") + command = ' '.join([commands['mkdir'], subdirs]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + for x in range(1,5): + subdirlist.append(str(x) + "\n") + + command = ' '.join([commands['ls'], dirname]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = str(subdirlist) + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def dir_hardlink(): + """ + """ + return_status = 1 + dirname1 = "dir_hlink" + dirname2 = "hardlink_to_dir_hlink" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['mkdir'], dirname1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['stat'], dirname1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = dirname1 + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['hardlink'], dirname1, dirname2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "hard link not allowed for directory" + return_status = atfutils.validate_output(output, 1, expected_output, stream="stderr") + if return_status is not 0: + return return_status + + command = ' '.join([commands['stat'], dirname2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "No such file or directory" + return_status = atfutils.validate_output(output, 1, expected_output, stream="stderr") + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 1, expected_output, stream="stderr") + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def dir_symlink(): + """ + """ + return_status = 1 + dirname1 = "dir_symlink" + dirname2 = "symlink_to_dir_symlink" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['mkdir'], dirname1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['stat'], dirname1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = dirname1 + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['symlink'], dirname1, dirname2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['stat'], dirname2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "symbolic link" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def dir_set_get_fattr(): + """ + """ + return_status = 1 + name = "trusted.name" + value = "set_get_attr_test" + dirname = "set_get_attr" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['mkdir'], dirname]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['stat'], dirname]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = dirname + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['setattr'], "-n", name, "-v", value, dirname]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['getattr'], "-n", name, dirname]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = value + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def dir_rename(): + """ + """ + return_status = 1 + dirname1 = "dir_rename_me" + dirname2 = "dir_rename_to" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['mkdir'], dirname1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['stat'], dirname1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = dirname1 + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['rename'], dirname1, dirname2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['stat'], dirname1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "No such file or directory" + if atfutils.validate_output(output, 1, expected_output, stream="stderr"): + return return_status + if validate.validate_on_bricks(bricks, command, 1, expected_output, stream="stderr"): + return return_status + + command = ' '.join([commands['stat'], dirname2]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = dirname2 + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 + +def dir_unlink(): + """ + """ + return_status = 1 + dirname1 = "dir_unlink_me" + bricks = ['brick1', 'brick2'] + + command = ' '.join([commands['mkdir'], dirname1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['stat'], dirname1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = dirname1 + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + return_status = validate.validate_on_bricks(bricks, command, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['unlink_dir_force'], dirname1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "" + return_status = atfutils.validate_output(output, 0, expected_output) + if return_status is not 0: + return return_status + + command = ' '.join([commands['stat'], dirname1]) + output = clientutils.execute_on_mount("mount1", command) + expected_output = "No such file or directory" + if atfutils.validate_output(output, 1, expected_output, stream="stderr"): + return return_status + if validate.validate_on_bricks(bricks, command, 1, expected_output, stream="stderr"): + return return_status + + return_status = validate.validate_md5sums(mounts, bricks) + if return_status is not 0: + return return_status + + return 0 diff --git a/TestUnits/xlators/cluster/afr/basic/testcaseslist b/TestUnits/xlators/cluster/afr/basic/testcaseslist new file mode 100644 index 0000000..027b4f1 --- /dev/null +++ b/TestUnits/xlators/cluster/afr/basic/testcaseslist @@ -0,0 +1,22 @@ +################################################################# +# List of testcases for the basic feature of afr. +# TestCaseId : Version : Keyword +################################################################## +file_write : >= 3.2 : art +file_lookup : >= 3.2 : art +file_read : >= 3.2 : art +file_append : >= 3.2 : art +file_truncate : >= 3.2 : art +file_hardlink : >= 3.2 : art +file_symlink : >= 3.2 : art +file_set_get_fattr : >= 3.2 : art +file_rename : >= 3.2 : art +file_unlink : >= 3.2 : art +dir_mkdir : >= 3.2 : art +dir_lookup : >= 3.2 : art +dir_read : >= 3.2 : art +dir_hardlink : >= 3.2 : art +dir_symlink : >= 3.2 : art +dir_set_get_fattr : >= 3.2 : art +dir_rename : >= 3.2 : art +dir_unlink : >= 3.2 : art diff --git a/TestUnits/xlators/cluster/afr/basic/testenv.cfg b/TestUnits/xlators/cluster/afr/basic/testenv.cfg new file mode 100644 index 0000000..a38571e --- /dev/null +++ b/TestUnits/xlators/cluster/afr/basic/testenv.cfg @@ -0,0 +1,81 @@ +[DEFAULT] +user = +password = +glusterversion = +installpath = +downloadpath = + +# ExportDir Section. +# Necessary Options: dir +# Optional: fstype, device +[export1] +dir = +fstype = +device = +options = + +[export2] +dir = +fstype = +device = + +# Server Section +# Necessary Options: hostname, username, password, glusterversion. +# The username, password, glusterversion defaults from DEFAULTS Section and +# can be overridden +# Optional: installpath +[server1] +hostname = + +[server2] +hostname = + +# Brick Section +# Necessary Options: hostname, path +[brick1] +hostname = server1.hostname +path = export1 + +[brick2] +hostname = server2.hostname +path = export2 + +# Volume Section +# Necessary Options: volumename, bricks +# Optional replica=, stripe= +# +[volume1] +volumename = replicate +replica=2 +stripe= +transporttype = tcp +bricks = brick1, brick2 + +# Client Section +# Necessary Options: hostname, username, password, glusterversion. +# The username, password, glusterversion defaults from DEFAULTS Section and +# can be overridden +# Optional: installpath +[client1] +hostname = + +# MountDevice Section +# Necessary Options: hostname, volume +# The Server1.hostname could be a VIP also. Need not be a server hostname +# IN a general case,(without NFS) we keep the 1st server from serverpool +# The volume specified in this section is the "active_volume" onto which all +# clients will be mounting to. This active volume and hostname can be changed +# during testrun. +[mountdevice1] +hostname = server1.hostname +volumename = volume1.volumename + +# Mount Section +# addMount(dir, type, client, device=master.volume, logfile=None) +[mount1] +dir = +client = +device = +type = +logfile = +options = diff --git a/TestUnits/xlators/cluster/afr/basic/testunit.py b/TestUnits/xlators/cluster/afr/basic/testunit.py new file mode 100644 index 0000000..1f8e7d2 --- /dev/null +++ b/TestUnits/xlators/cluster/afr/basic/testunit.py @@ -0,0 +1,129 @@ +"""testunit.py is the main module for the testunit. + +This module "main" function is called from atfexecute to execute the testunit. +""" +from atfglobals import GlobalObj +import os +import parser +import atfutils +import managerutils +import testcases + +reload(testcases) + +filename = os.path.abspath(__file__) +dir_path = os.path.dirname(filename) + +def initialize(): + """ + """ + logger = GlobalObj.getLoggerObj() + return_status = 1 + testenv_file = GlobalObj.testenv_file + testenv_abspath = os.path.join(dir_path, testenv_file) + + if not (os.path.isfile(testenv_abspath)): + logger.error("%s not found in %s" % (testenv_file, dir_path)) + + if parser.parse_testenv_configfile(testenv_abspath): + return return_status + if managerutils.ssh_connect_allhosts(): + return return_status + + return 0 + +def setup(): + """ + """ + return_status = 1 + if atfutils.set_active_volume("volume1"): + return return_status + return 0 + +def execute(): + """ + """ + logger = GlobalObj.getLoggerObj() + return_status = 1 + testcaseslist_file = GlobalObj.testcaseslist_file + testcaseslist_abspath = os.path.join(dir_path, testcaseslist_file) + + if not (os.path.isfile(testcaseslist_abspath)): + logger.error("%s not found in %s" % (testcaseslist_file, dir_path)) + return return_status + + else: + testcaseslist = [] + testcaseslist = parser.parse_testcaseslist_file(testcaseslist_abspath) + if not testcaseslist: + logger.error("Skipping TestUnit %s. No testcases to execute" + % dir_path) + return 0 + else: + passedtestcases = 0 + failedtestcases = 0 + selectedtestcases = len(testcaseslist) + + logger.info("Starting TestUnit: '%s' test execution" % dir_path) + + return_status = testcases.reset_testenv() + if return_status is not 0: + return return_status + + return_status = testcases.setup_testenv() + if return_status is not 0: + return return_status + + for testcase in testcaseslist: + function_obj = getattr(testcases, testcase) + if function_obj: + logger.debug("Starting Test: ' %s '" % testcase) + + return_status = function_obj() + if return_status: + logger.debug("TestCase '%s' Failed" % testcase) + failedtestcases += 1 + else: + logger.debug("TestCase '%s' Passed" % testcase) + passedtestcases += 1 + + logger.debug("Ending Test: '%s'" % testcase) + + else: + logger.info("TestCase %s not defined in 'testcases' module" + % testcase) + continue + + logger.info("Selected %d : Passed %d, Failed %d" + % (selectedtestcases, + passedtestcases, + failedtestcases)) + logger.info("Ending TestUnit: '%s' test execution" % dir_path) + + return 0 + +def cleanup(): + """ + """ + pass + +def main(): + """ + """ + return_status = initialize() + if return_status is not 0: + return return_status + + return_status = setup() + if return_status is not 0: + return return_status + + return_status = execute() + if return_status is not 0: + return return_status + + return_status = cleanup() + if return_status is not 0: + return return_status + + return 0 -- cgit