diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/distaf/tests_d/sanity/__init__.py | 0 | ||||
| -rw-r--r-- | tests/distaf/tests_d/sanity/io_config.yml | 14 | ||||
| -rw-r--r-- | tests/distaf/tests_d/sanity/test_dd_writes.py | 139 | 
3 files changed, 153 insertions, 0 deletions
diff --git a/tests/distaf/tests_d/sanity/__init__.py b/tests/distaf/tests_d/sanity/__init__.py new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/tests/distaf/tests_d/sanity/__init__.py diff --git a/tests/distaf/tests_d/sanity/io_config.yml b/tests/distaf/tests_d/sanity/io_config.yml new file mode 100644 index 00000000000..577c43eda09 --- /dev/null +++ b/tests/distaf/tests_d/sanity/io_config.yml @@ -0,0 +1,14 @@ +gluster: +    tests: +        io: +            dd_writes: +                num_of_files: 1 +                num_of_process_per_file: 1 +                input_file: /dev/urandom +                block_size: random +                count: 1 +              #  oflag: append,direct,nonblock +              #  conv: fsync + + + diff --git a/tests/distaf/tests_d/sanity/test_dd_writes.py b/tests/distaf/tests_d/sanity/test_dd_writes.py new file mode 100644 index 00000000000..3cff3ef8d82 --- /dev/null +++ b/tests/distaf/tests_d/sanity/test_dd_writes.py @@ -0,0 +1,139 @@ +from distaf.util import tc, testcase, globl_configs +from distaflibs.gluster.gluster_base_class import GlusterBaseClass +from distaflibs.gluster.mount_ops import mount_volume, umount_volume +import os +import random +import yaml + +@testcase("test_dd_writes") +class TestDdWrites(GlusterBaseClass): +    """ +        runs_on_volumes: [ distribute, replicate, dist_rep ] +        runs_on_protocol: [ glusterfs, nfs ] +        reuse_setup: True +    """ +    def __init__(self, globl_configs): +        GlusterBaseClass.__init__(self, globl_configs) +        self.filename = "dd_testfile" +        io_config_file = os.path.join(os.path.dirname +                                      (os.path.realpath(__file__)), +                                      "io_config.yml") +        dd_writes_config = yaml.load(open(io_config_file)) +        # Num of dd's to start per client/per file +        self.num_of_dd_writes_process = (dd_writes_config['gluster']['tests'] +                                         ['io']['dd_writes'] +                                         ['num_of_process_per_file']) + +        # Num of files to create +        self.num_of_files = (dd_writes_config['gluster']['tests'] +                             ['io']['dd_writes']['num_of_files']) + +        # Input file for dd command +        self.dd_input_file = (dd_writes_config['gluster']['tests'] +                              ['io']['dd_writes']['input_file']) + +        # Block size +        self.block_size = (dd_writes_config['gluster']['tests'] +                           ['io']['dd_writes']['block_size']) +        if "random" in self.block_size: +            self.block_size = ["1k", "10k", "256k", "512k" ,"1M", +                              "10M", "100M", "256M", "512M", "1G"] + +        # dd count +        self.dd_count = (dd_writes_config['gluster']['tests'] +                         ['io']['dd_writes']['count']) + +        # dd CONV +        if (dd_writes_config['gluster']['tests']['io'] +            ['dd_writes']).has_key('conv'): +            self.dd_conv = (dd_writes_config['gluster']['tests'] +                             ['io']['dd_writes']['conv']) +        else: +            self.dd_conv = None + +        # dd OFLAG +        if (dd_writes_config['gluster']['tests']['io'] +            ['dd_writes']).has_key('oflag'): +            self.dd_oflag = (dd_writes_config['gluster']['tests'] +                             ['io']['dd_writes']['oflag']) +        else: +            self.dd_oflag = None + + +    def setup(self): +        ret = GlusterBaseClass.setup(self) +        if not ret: +            return False + +        if self.mounts: +            for mount_obj in self.mounts: +                ret = mount_obj.mount() +                if not ret: +                    tc.logger.error("Mounting Volume %s failed on %s:%s" % +                                    (mount_obj.volname, +                                     mount_obj.client_system, +                                     mount_obj.mountpoint)) +                    return False +        return True + + +    def run(self): +        rc = True +        dd_cmd = "dd if=%s count=%s " % (self.dd_input_file, self.dd_count) +        if self.dd_conv is not None: +            dd_cmd += "conv=%s " % self.dd_conv + +        if self.dd_oflag is not None: +            dd_cmd += "oflag=%s " % self.dd_oflag + +        all_mounts_cmd_runs = [] +        for mount_obj in self.mounts: +            all_cmd_runs = [] +            for i in range(1, (self.num_of_files + 1)): +                cmd_runs = [] +                for j in range(1, (self.num_of_dd_writes_process + 1)): +                    cmd = dd_cmd + ("of=%s bs=%s" % +                                    (os.path.join(mount_obj.mountpoint, +                                                  self.filename + "_" + str(i)), +                                     random.choice(self.block_size))) +                    tc.logger.info("Executing Command: %s", cmd) +                    ret = tc.run_async(mount_obj.client_system, cmd) +                    cmd_runs.append(ret) +                all_cmd_runs.append(cmd_runs) +            all_mounts_cmd_runs.append(all_cmd_runs) + +        for all_cmd_runs in all_mounts_cmd_runs: +            for cmd_runs in all_cmd_runs: +                for each_cmd_run in cmd_runs: +                    each_cmd_run.wait() + +        rc = True +        for i, all_cmd_runs in enumerate(all_mounts_cmd_runs): +            for j, cmd_runs in enumerate(all_cmd_runs): +                for k, each_cmd_run in enumerate(cmd_runs): +                    ret, _, _ = each_cmd_run.value() +                    if ret != 0: +                        tc.logger.error("DD Writes failed on:  %s/%s/%s:%d" % +                                        (self.mounts[i].client_system, +                                         self.mounts[i].mountpoint, +                                         (self.filename + "_" + str(j)), k)) +                        rc = False +        if not rc: +            tc.logger.error("DD Write failed on atleast one file") +            return False +        else: +            tc.logger.info("DD Write successfully passed on all the files") +            return True + +    def teardown(self): +        for mount_obj in self.mounts: +            cleanup_mount_cmd = "rm -rf %s/*" % mount_obj.mountpoint +            ret, out, err = tc.run(mount_obj.client_system, +                                   cleanup_mount_cmd) +        for mount_obj in self.mounts: +            mount_obj.unmount() +        ret = GlusterBaseClass.teardown(self) +        if not ret: +            return False +        return True +  | 
