summaryrefslogtreecommitdiffstats
path: root/TestUnits/xlators/cluster/afr/self_heal/testcases.py
diff options
context:
space:
mode:
Diffstat (limited to 'TestUnits/xlators/cluster/afr/self_heal/testcases.py')
-rw-r--r--TestUnits/xlators/cluster/afr/self_heal/testcases.py2408
1 files changed, 2340 insertions, 68 deletions
diff --git a/TestUnits/xlators/cluster/afr/self_heal/testcases.py b/TestUnits/xlators/cluster/afr/self_heal/testcases.py
index e175ba7..6efff62 100644
--- a/TestUnits/xlators/cluster/afr/self_heal/testcases.py
+++ b/TestUnits/xlators/cluster/afr/self_heal/testcases.py
@@ -1,21 +1,41 @@
"""testcases for replicate/self-heal
"""
-
+import re
+import os
import sys
import time
-import hostutils
-import managerutils
-import glusterutils
+import afrutils
import atfutils
import clientutils
+import glusterutils
+import hostutils
import serverutils
-import parser
-import pdb
+import validate
+from atfglobals import GlobalObj
+from atfutils import commands
+
+urandom = "/dev/urandom"
+write_op = ">"
+append_op = ">>"
+mounts = ['mount1']
+bricks = ['brick1', 'brick2']
+brick_reboot_time = 15
def reset_testenv():
- return_status = 1
- if clientutils.umountall():
- return return_status
+ """
+ Description:
+ * Unmount all mounts specified in the testenv file.
+ * Stop the Volume (Active Volume)
+ * Delete the Volume
+ * Stop Glusterd on all servers
+ * Remove the glusterd dir (/etc/glusterd)
+ * Remove all glusterd logs from all servers
+ """
+ output = clientutils.umountall()
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
glusterutils.volume_stop("server1", force=True)
glusterutils.volume_delete("server1")
glusterutils.glusterd_stop_allservers()
@@ -25,73 +45,2325 @@ def reset_testenv():
def setup_testenv():
"""
+ Description:
+ * Start glusterd on all servers
+ * Peer Probe all servers in the storage pool
+ * Create Bricks on the servers
+ * Create Volume
+ * Start Volume
+ * Mount to the Volume from all mounts specified in testenv
"""
- return_status = 1
- if glusterutils.glusterd_start_allservers(force=True):
+ output = glusterutils.glusterd_start_allservers(force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = glusterutils.create_brick_allservers()
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = glusterutils.peer_probe("server1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = glusterutils.volume_create("server1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = glusterutils.volume_set("server1", key="self-heal-daemon",
+ value="off")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = glusterutils.volume_set("server1",
+ key="diagnostics.client-log-level",
+ value="DEBUG")
+
+ output = glusterutils.volume_set("server1",
+ key="diagnostics.brick-log-level",
+ value="DEBUG")
+
+ output = glusterutils.volume_start("server1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = clientutils.mountall()
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ return 0
+
+def test001():
+ """
+ Description:
+ Testing if the source is selected based on
+ entry transaction for directory
+ """
+ return_status = reset_testenv()
+ if return_status is not 0:
return return_status
- if glusterutils.peer_probe("server1"):
+
+ return_status = setup_testenv()
+ if return_status is not 0:
return return_status
- if glusterutils.create_brick_allservers():
+
+ dirname = "test1/d1"
+ command = ' '.join([commands['mkdir'], dirname])
+ expected_output = ""
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = afrutils.set_read_subvolume("server1", "client-0")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = afrutils.disable_self_heal("server1", 'data', 'entry', 'metadata')
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ filename = "f1"
+ abs_path = os.path.join(dirname, filename)
+ command = ' '.join([commands['touch'], abs_path])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['ls'], abs_path])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = abs_path
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test002():
+ """
+ Description:
+ Test if the source is selected based on data transaction for reg file
+ """
+ filename = "file1"
+ input_file = urandom
+ output_file = filename
+
+ return_status = reset_testenv()
+ if return_status is not 0:
return return_status
- if glusterutils.volume_create("server1"):
- return 1
- glusterutils.volume_set("server1", key="diagnostics.client-log-level", value="DEBUG")
- if glusterutils.volume_start("server1"):
- return 1
- if clientutils.mountall():
- return 1
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ output = afrutils.set_read_subvolume("server1", "client-0")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = afrutils.disable_self_heal("server1", 'data', 'entry', 'metadata')
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=10"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "10485760"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['ls'], "-l", filename ])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "10485760"
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
return 0
-def test001():
+def test003():
"""
- Description: Test for failure when the entry does not exist
+ Description:
+ Test if the source is selected based on metadata transaction
+ for linkfile
"""
- return_status = 1
- if reset_testenv():
- return return_status
- if setup_testenv():
+ filename1 = "testsymlink.txt"
+ filename2 = "symlink_to_testsymlink.txt"
+ input_file = urandom
+
+ return_status = reset_testenv()
+ if return_status is not 0:
return return_status
- return_status = clientutils.execute_on_mount("mount1", "ls abcd")
-
- if return_status:
- test_status = 0
- else:
- test_status = 1
-
- return test_status
-def test002():
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ output = afrutils.set_read_subvolume("server1", "client-0")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = afrutils.disable_self_heal("server1", 'data', 'entry', 'metadata')
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ """ Create a file
+ """
+ command = ' '.join([commands['touch'], filename1])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ """ Create a symlink to the file created above
+ """
+ command = ' '.join([commands['symlink'], filename1, filename2])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ """ Stop brick2
+ """
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ """ execute dd on the symlink
+ provide rwx permissions to all
+ """
+ output_file = filename2
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=10"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "10485760"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['chmod'], "777", filename2])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ """ Restart the brick2
+ """
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['ls'], "-l", filename1])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "10485760"
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], "-l", filename1])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "-rwxrwxrwx"
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test004():
+ """
+ Description:
+ Self-Heal: Enoent + Success
+ """
+ input_file = urandom
+ dir1 = "d1"
+ dir2 = "d2"
+ file1 = "f1"
+ file2 = "f2"
+ testdir1 = "testdir1"
+ testdir2 = "testdir2"
+ t1_d1 = os.path.join(testdir1, dir1)
+ t1_d2 = os.path.join(testdir1, dir2)
+ t2_d1 = os.path.join(testdir2, dir1)
+ t2_d2 = os.path.join(testdir2, dir2)
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ command = ' '.join([commands['mkdir'], t1_d1, t1_d2])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ t1_f1 = os.path.join(testdir1, file1)
+ output_file = t1_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t1_d1_f1= os.path.join(t1_d1, file1)
+ output_file = t1_d1_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t1_d1_f2 = os.path.join(t1_d1, file2)
+ output_file = t1_d1_f2
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=2"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "2097152"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t1_d2_f1 = os.path.join(t1_d2, file1)
+ output_file = t1_d2_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t1_d2_f2 = os.path.join(t1_d2, file2)
+ output_file = t1_d2_f2
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=2"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "2097152"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ """ Stop brick2
+ """
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['unlink_dir_force'], t1_d2])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['truncate'], "-s 0", t1_d1_f1])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['chmod'], "777", t1_d1_f2])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['mkdir'], t2_d1, t2_d2])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ t2_f1 = os.path.join(testdir2, file1)
+ output_file = t2_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t2_d1_f1= os.path.join(t2_d1, file1)
+ output_file = t2_d1_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t2_d1_f2 = os.path.join(t2_d1, file2)
+ output_file = t2_d1_f2
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=2"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "2097152"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t2_d2_f1 = os.path.join(t2_d2, file1)
+ output_file = t2_d2_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t2_d2_f2 = os.path.join(t2_d2, file2)
+ output_file = t2_d2_f2
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=2"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "2097152"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['chmod'], "777", t2_d1_f2])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ """ Restart the brick2
+ """
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = "find . | xargs stat"
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ selfheal_completion_status = afrutils.wait_till_selfheal_completes(30)
+ if selfheal_completion_status is not 0:
+ return selfheal_completion_status
+
+ validation_status = validate.validate_md5sums(mounts, bricks)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test005():
+ """
+ Description:
+ Self-heal: Success + File type differs
+ """
+ data = "Hello World. TestCase : Self-heal - Success + File type differs "
+ filename = dirname = "test"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ command = ' '.join([commands['echo'], data, write_op, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['stat'], filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "regular file"
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ """ Stop Brick2 """
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['unlink_force'], filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['mkdir'], dirname])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ """ Force Start the Volume. This will restart the brick2 """
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = ' '.join([commands['stat'], dirname])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "directory"
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ validation_status = validate.validate_md5sums(mounts, bricks)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test006():
+ """
+ Description:
+ Self-heal: Success + Permission differs
+ """
+ data = "Hello World. TestCase: Self-heal - Success + Permission differs"
+ filename = "test"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ command = ' '.join([commands['echo'], data, write_op, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['chmod'], "666", filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['chmod'], "777", filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = ' '.join([commands['ls'], "-l", filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "-rwxrwxrwx"
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test007():
+ """
+ Description:
+ Self-heal: Success + Ownership differs
+ """
+ user = "qa"
+ data = "Hello World. testcase: Self-heal - Success Ownership differs"
+ filename = "test"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ command = ' '.join([commands['echo'], data, write_op, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ user_group = ':'.join([user, user])
+ command = ' '.join([commands['chown'], user_group, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = ' '.join([commands['ls'], "-l", filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ' '.join([user, user])
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test008():
+ """
+ Description:
+ Self-Heal: Success + Size Differs
+ """
+ data1 = "Hello World. TestCase: Self-Heal - Success + Size Differs"
+ data2 = "Appending data to file."
+ filename = "test"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ command = ' '.join([commands['echo'], data1, write_op, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['echo'], data2, append_op, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = "find . | xargs stat"
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ validation_status = validate.validate_md5sums(mounts, bricks)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['truncate'], "-s 0", filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = ' '.join([commands['stat'], filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "regular empty file"
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ validation_status = validate.validate_md5sums(mounts, bricks)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test009():
+ """
+ Description:
+ Self-Heal: Success + gfid differs
+ """
+ data = "Hello World. TestCase : Self-heal - Success + GFID differs"
+ filename = "test"
+ file_gfids = {}
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ command = ' '.join([commands['echo'], data, write_op, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['unlink_force'], filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['echo'], data, write_op, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = ' '.join([commands['cat'], filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ validation_status = validate.validate_gfids(bricks, filename)
+ if validation_status is not 0:
+ return validation_status
+
+ validation_status = validate.validate_md5sums(mounts, bricks)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test010a():
+ """
+ Description:
+ Self-Heal: xattr data pending
+ """
+ data1 = "Hello World. TestCase: Self-Heal - Success + Size Differs"
+ data2 = data1 * 50
+ filename = "test"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ command = ' '.join([commands['echo'], data1, write_op, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['echo'], data2, append_op, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = "find . | xargs stat"
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ validation_status = validate.validate_md5sums(mounts, bricks)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test010b():
+ """
+ Description:
+ Self-heal: xattr metadata pending
+ """
+ user1 = "qa"
+ user2 = "root"
+ data = "Hello World. testcase: Self-heal - Success Ownership differs"
+ filename = "test"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ command = ' '.join([commands['echo'], data, write_op, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['chown'], user1, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['chown'], user2, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['chmod'], "777", filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = ' '.join([commands['ls'], "-l", filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ' '.join(["-rwxrwxrwx.", "1", user2])
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test010c():
+ """
+ Description:
+ Self-heal: xattr entry pending
+ """
+ input_file = urandom
+ dir1 = "d1"
+ dir2 = "d2"
+ file1 = "f1"
+ file2 = "f2"
+ testdir1 = "testdir1"
+ testdir2 = "testdir2"
+ t1_d1 = os.path.join(testdir1, dir1)
+ t1_d2 = os.path.join(testdir1, dir2)
+ t2_d1 = os.path.join(testdir2, dir1)
+ t2_d2 = os.path.join(testdir2, dir2)
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ command = ' '.join([commands['mkdir'], t1_d1, t1_d2])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ t1_d1_f1= os.path.join(t1_d1, file1)
+ output_file = t1_d1_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t1_d2_f1 = os.path.join(t1_d2, file1)
+ output_file = t1_d2_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t1_d2_f2 = os.path.join(t1_d2, file2)
+ output_file = t1_d2_f2
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=2"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "2097152"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ """ Stop brick2
+ """
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['unlink_dir_force'], t1_d2])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['mkdir'], t2_d1, t2_d2])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ t2_f1 = os.path.join(testdir2, file1)
+ output_file = t2_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t2_d1_f1= os.path.join(t2_d1, file1)
+ output_file = t2_d1_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t2_d2_f2 = os.path.join(t2_d2, file2)
+ output_file = t2_d2_f2
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=2"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "2097152"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ """ Restart the brick2
+ """
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = "find . | xargs stat"
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ selfheal_completion_status = afrutils.wait_till_selfheal_completes(30)
+ if selfheal_completion_status is not 0:
+ return selfheal_completion_status
+
+ validation_status = validate.validate_md5sums(mounts, bricks)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test011():
+ """
+ Description:
+ Mark source with the lowest uid
+ """
+ user1 = "qa"
+ user2 = "root"
+ data = "Hello World. testcase: Self-heal - Source with the Lowest UID"
+ filename = "test"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ command = ' '.join([commands['echo'], data, write_op, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ user_group = ':'.join([user1, user1])
+ command = ' '.join([commands['chown'], user_group, filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ # Change the user, group ownership to root on one of the brick from backend
+ user_group = ':'.join([user2, user2])
+ command = ' '.join([commands['chown'], user_group, filename])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], "-l", filename])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ' '.join([user2, user2])
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test012():
+ """
+ Description:
+ Forced merge of directory test
+ """
+ input_file = urandom
+ file1 = "f1"
+ file2 = "f2"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = afrutils.setup_testenv_gfid_heal()
+ if return_status is not 0:
+ return return_status
+
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+file1,
+ "bs=1M", "count=1"])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ name = "trusted.gfid"
+ value = "0s+wqm/34LQnm8Ec8tCmoHEg=="
+ command = ' '.join([commands['setattr'],"-n", name, "-v", value, file1])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+file2,
+ "bs=1M", "count=1"])
+ output = serverutils.execute_on_brick("brick2", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ name = "trusted.gfid"
+ value = "0sQTi1LjUkQwOhek4Oqx+daA=="
+ command = ' '.join([commands['setattr'],"-n", name, "-v", value, file2])
+ output = serverutils.execute_on_brick("brick2", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ return_status = afrutils.create_volume_gfid_heal("server1")
+ if return_status is not 0:
+ return return_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = clientutils.mount("mount1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['ls'], "-l"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ base_command = "getfattr -d -m . -e hex"
+ for _file in (file1, file2):
+ command = ' '.join([base_command, _file])
+ outputs = serverutils.execute_on_bricks(bricks, command)
+ assert_success_status = atfutils.assert_success_of_outputs(outputs)
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ selfheal_completion_status = afrutils.wait_till_selfheal_completes(15)
+ if selfheal_completion_status is not 0:
+ return selfheal_completion_status
+
+ for _file in (file1, file2):
+ command = ' '.join([commands['ls'], "-l", _file])
+ expected_output = "1048576"
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ validation_status = validate.validate_md5sums(mounts, bricks)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test013():
+ """
+ Description:
+ Do not selfheal files without gfid's, when path to the files to be
+ self-heal is not specified
+
+ Ex:- Execution of find . | xargs stat on mount point will not self heal
+ files if the files doesn't have gfid
+ """
+ input_file = urandom
+ file1 = "f1"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = afrutils.setup_testenv_gfid_heal()
+ if return_status is not 0:
+ return return_status
+
+ output_file = file1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], output_file])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = output_file
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ return_status = afrutils.create_volume_gfid_heal("server1")
+ if return_status is not 0:
+ return return_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = clientutils.mount("mount1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = "find . | xargs stat"
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], output_file])
+ output = serverutils.execute_on_brick("brick2", command)
+ expected_output = "No such file or directory"
+ validation_status = atfutils.validate_output(output, 1, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test014():
+ """
+ Description:
+ Selfheal files without gfid's when path to the files to be
+ self-heal is specified
+
+ Ex:- Execution of ls <files_to_be_selfhealed> on mount point
+ will self heal files even if the files doesn't have gfid
"""
- Description: Test for estale when the fs is stale
- """
- return_status = 1
- if reset_testenv():
- return return_status
- if setup_testenv():
- return return_status
-
- clientutils.execute_on_mount("mount1", "touch file")
- serverutils.execute_on_brick("brick1",
- "setfattr -n trusted.gfid -v 0sBfz5vAdHTEK1GZ99qjqTIg== file")
- return_status = clientutils.execute_on_mount("mount1", "find file | xargs stat")
-
- if return_status:
- test_status = 0
- else:
- test_status = 1
-
- return test_status
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ input_file = urandom
+ file1 = "f1"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = afrutils.setup_testenv_gfid_heal()
+ if return_status is not 0:
+ return return_status
+
+ output_file = file1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], output_file])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = output_file
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], output_file])
+ output = serverutils.execute_on_brick("brick2", command)
+ expected_output = "No such file or directory"
+ validation_status = atfutils.validate_output(output, 1, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ return_status = afrutils.create_volume_gfid_heal("server1")
+ if return_status is not 0:
+ return return_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = clientutils.mount("mount1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['ls'], "-l", output_file])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ validation_status = validate.validate_md5sums(mounts, bricks)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test015():
+ """
+ Description:
+ * Birck1 has data without GFID
+ * Brick2 doesn't have data
+ * Create Volume
+ * Start volume
+ * execute 'ls -lR <DIRNAME>'
+ * Triggers Self-Heal.
+ """
+ input_file = urandom
+ dir1 = "d1"
+ dir2 = "d2"
+ file1 = "f1"
+ file2 = "f2"
+ testdir1 = "testdir1"
+ t1_d1 = os.path.join(testdir1, dir1)
+ t1_d2 = os.path.join(testdir1, dir2)
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = afrutils.setup_testenv_gfid_heal()
+ if return_status is not 0:
+ return return_status
+
+ command = ' '.join([commands['mkdir'], t1_d1, t1_d2])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ t1_f1 = os.path.join(testdir1, file1)
+ output_file = t1_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t1_d1_f1= os.path.join(t1_d1, file1)
+ output_file = t1_d1_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t1_d1_f2 = os.path.join(t1_d1, file2)
+ output_file = t1_d1_f2
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=2"])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = "2097152"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t1_d2_f1 = os.path.join(t1_d2, file1)
+ output_file = t1_d2_f1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ t1_d2_f2 = os.path.join(t1_d2, file2)
+ output_file = t1_d2_f2
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=2"])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = "2097152"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ return_status = afrutils.create_volume_gfid_heal("server1")
+ if return_status is not 0:
+ return return_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = clientutils.mount("mount1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['ls'], "-Rl", testdir1])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ selfheal_completion_status = afrutils.wait_till_selfheal_completes(30)
+ if selfheal_completion_status is not 0:
+ return selfheal_completion_status
+
+ validation_status = validate.validate_md5sums(mounts, bricks)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test016():
+ """
+ Description:
+ Self-Heal of files without GFID should return I/O Error
+ when some childern are down
+ """
+ input_file = urandom
+ file1 = "f1"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = afrutils.setup_testenv_gfid_heal()
+ if return_status is not 0:
+ return return_status
+
+ output_file = file1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], output_file])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = output_file
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], output_file])
+ output = serverutils.execute_on_brick("brick2", command)
+ expected_output = "No such file or directory"
+ validation_status = atfutils.validate_output(output, 1, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ return_status = afrutils.create_volume_gfid_heal("server1")
+ if return_status is not 0:
+ return return_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = clientutils.mount("mount1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = "find . | xargs stat"
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "Input/output error"
+ validation_status = atfutils.validate_output(output, 1, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], "-Rl"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "Input/output error"
+ validation_status = atfutils.validate_output(output, 1, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], "-Rl", output_file])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "Input/output error"
+ validation_status = atfutils.validate_output(output, 1, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], output_file])
+ output = serverutils.execute_on_brick("brick2", command)
+ expected_output = "No such file or directory"
+ validation_status = atfutils.validate_output(output, 1, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test017():
+ """
+ Description:
+ * create a <file1> on brick1 from the backend
+ * create a replicate volume with brick1, brick2
+ * brick down brick1
+ * from the mount, dd <file1>
+ * bring back brick1
+ * ls <file1>
+ * The file <file1> on brick1 has to be replaced by new file <file1>
+ """
+ input_file = urandom
+ file1 = "f1"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = afrutils.setup_testenv_gfid_heal()
+ if return_status is not 0:
+ return return_status
+
+ output_file = file1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], output_file])
+ output = serverutils.execute_on_brick("brick1", command)
+ expected_output = output_file
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], output_file])
+ output = serverutils.execute_on_brick("brick2", command)
+ expected_output = "No such file or directory"
+ validation_status = atfutils.validate_output(output, 1, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ return_status = afrutils.create_volume_gfid_heal("server1")
+ if return_status is not 0:
+ return return_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = glusterutils.volume_stop_brick("brick1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = clientutils.mount("mount1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['ls'], "|", commands['wc'], "-l"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "0"
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output_file = file1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=10"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "10485760"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = ' '.join([commands['ls'], "-l", output_file])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "10485760"
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ selfheal_completion_status = afrutils.wait_till_selfheal_completes(15)
+ if selfheal_completion_status is not 0:
+ return selfheal_completion_status
+
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ validation_status = validate.validate_md5sums(mounts, bricks)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test018():
+ """
+ Testing split-brain
+ """
+ input_file = urandom
+ file1 = "f1"
+ file2 = "f2"
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = afrutils.setup_testenv_gfid_heal()
+ if return_status is not 0:
+ return return_status
+
+ return_status = afrutils.create_volume_gfid_heal("server1")
+ if return_status is not 0:
+ return return_status
+
+ output = glusterutils.volume_start("server1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output = clientutils.mount("mount1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output_file = file1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=10"])
+ expected_output = "10485760"
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], "-l", output_file])
+ expected_output = "10485760"
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ output = serverutils.execute_on_brick("brick1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ output = glusterutils.volume_stop_brick("brick1")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output_file = file2
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=10"])
+ expected_output = "10485760"
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], "-l", output_file])
+ expected_output = "10485760"
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ output = serverutils.execute_on_brick("brick2", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = ""
+ expected_output = "Input/output error"
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 1, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def bug2840():
+ """
+ Description:
+ Device Files not getting self-healed
+ """
+ file1 = "file1"
+ device_file = "devicefile"
+ input_file = urandom
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ output_file = file1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ expected_output = "1048576"
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+
+ command = ' '.join([commands['ls'], "-l", output_file])
+ expected_output = "1048576"
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = "mknod -m 0600 %s b 2 0" % device_file
+ expected_output = ""
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], "-l", device_file])
+ expected_output = "brw-------."
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ output = serverutils.execute_on_brick("brick1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ expected_output = "No such file or directory"
+ output = serverutils.execute_on_brick("brick2", command)
+ validation_status = atfutils.validate_output(output, 1, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = "find . | xargs stat"
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], "-l", device_file])
+ expected_output = device_file
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ validation_status = validate.validate_md5sums(mounts, bricks)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def bug3503():
+ """
+ Description:
+ open should trigger data self-heal instead of lookup
+ """
+ file1 = "file1"
+ input_file = urandom
+
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ output = glusterutils.volume_set("server1", key="data-self-heal",
+ value="open")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ output_file = file1
+ command = ' '.join([commands['dd'], "if="+input_file, "of="+output_file,
+ "bs=1M", "count=1"])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output,
+ stream="stderr")
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], "-l", output_file])
+ expected_output = "1048576"
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['truncate'], "-s 0", output_file])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], "-l", output_file])
+ expected_output = "0"
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ output = serverutils.execute_on_brick("brick1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ output = serverutils.execute_on_brick("brick2", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ # Do not data self heal when ls <filename> is executed
+ command = ' '.join([commands['ls'], "-l", output_file])
+ expected_output = "0"
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ output = serverutils.execute_on_brick("brick1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ output = serverutils.execute_on_brick("brick2", command)
+ expected_output = "1048576"
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ # Self heal with open or fd based fop
+ command = ' '.join([commands['cat'], output_file])
+ output = clientutils.execute_on_mount("mount1", command)
+ expected_output = ""
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ command = ' '.join([commands['ls'], "-l", output_file])
+ expected_output = "0"
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0
+
+def test019():
+ """
+ Self-Heal of Special Files
+ """
+ return_status = reset_testenv()
+ if return_status is not 0:
+ return return_status
+
+ return_status = setup_testenv()
+ if return_status is not 0:
+ return return_status
+
+ fifo_file = "fifo"
+ block_file = "block"
+ char_file = "char"
+ user = "qa"
+ root = "root"
+
+ # Create a FIFO file
+ command = "mkfifo -m 0600 %s" % fifo_file
+ output = clientutils.execute_on_mount("mount1", command)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['ls'], "-l", fifo_file])
+ expected_output = "prw-------."
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ # Create a Block File
+ command = "mknod -m 0600 %s b 2 0" % block_file
+ output = clientutils.execute_on_mount("mount1", command)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['ls'], "-l", block_file])
+ expected_output = "brw-------."
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ # Create a Char File
+ command = "mknod -m 0600 %s c 2 0" % char_file
+ output = clientutils.execute_on_mount("mount1", command)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ command = ' '.join([commands['ls'], "-l", char_file])
+ expected_output = "crw-------."
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_stop_brick("brick2")
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ # Change the User and Group of FIFO, Block, Char Files
+ user_group = ':'.join([user, user])
+ for _file in (fifo_file, block_file, char_file):
+ command = ' '.join([commands['chown'], user_group, _file])
+ output = clientutils.execute_on_mount("mount1", command)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ # Validate the changes made to FIFO, Block, Char Files
+ for _file in (fifo_file, block_file, char_file):
+ command = ' '.join([commands['ls'], "-l", _file])
+ expected_output = ' '.join([user, user])
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ output = serverutils.execute_on_brick("brick1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ expected_output = ' '.join([root, root])
+ output = serverutils.execute_on_brick("brick2", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ # Change the Permissions for FIFO, Block, Char Files
+ for _file in (fifo_file, block_file, char_file):
+ command = ' '.join([commands['chmod'], "0644", _file])
+ output = clientutils.execute_on_mount("mount1", command)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ # Validate the Permission changes performed on FIFO File
+ command = ' '.join([commands['ls'], "-l", fifo_file])
+ expected_output = "prw-r--r--."
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ output = serverutils.execute_on_brick("brick1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ expected_output = "prw-------."
+ output = serverutils.execute_on_brick("brick2", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ # Validate the Permission changes performed on Block File
+ command = ' '.join([commands['ls'], "-l", block_file])
+ expected_output = "brw-r--r--."
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ output = serverutils.execute_on_brick("brick1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ expected_output = "brw-------."
+ output = serverutils.execute_on_brick("brick2", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ # Validate the Permission changes performed on Char File
+ command = ' '.join([commands['ls'], "-l", char_file])
+ expected_output = "crw-r--r--."
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ output = serverutils.execute_on_brick("brick1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ expected_output = "crw-------."
+ output = serverutils.execute_on_brick("brick2", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ output = glusterutils.volume_start("server1", force=True)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ brick_reboot_status = afrutils.wait_till_brick_reboot(brick_reboot_time)
+ if brick_reboot_status is not 0:
+ return brick_reboot_status
+
+ command = "find . | xargs stat"
+ output = clientutils.execute_on_mount("mount1", command)
+ assert_success_status = atfutils.assert_success(output["exitstatus"])
+ if assert_success_status is not 0:
+ return assert_success_status
+
+ # Validate the changes made to FIFO, Block, Char Files
+ for _file in (fifo_file, block_file, char_file):
+ command = ' '.join([commands['ls'], "-l", _file])
+ expected_output = ' '.join([user, user])
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ # Validate the Permission changes performed on FIFO File
+ command = ' '.join([commands['ls'], "-l", fifo_file])
+ expected_output = "prw-r--r--."
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ # Validate the Permission changes performed on Block File
+ command = ' '.join([commands['ls'], "-l", block_file])
+ expected_output = "brw-r--r--."
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ # Validate the Permission changes performed on Char File
+ command = ' '.join([commands['ls'], "-l", char_file])
+ expected_output = "crw-r--r--."
+ output = clientutils.execute_on_mount("mount1", command)
+ validation_status = atfutils.validate_output(output, 0, expected_output)
+ if validation_status is not 0:
+ return validation_status
+ validation_status = validate.validate_on_bricks(bricks, command, 0,
+ expected_output)
+ if validation_status is not 0:
+ return validation_status
+
+ return 0