class TestNVMFTargetTemplate(NVMFTest):

    """ Represents target template testcase """

    def __init__(self):
        NVMFTest.__init__(self)
        self.target_subsys = None
        self.setup_log_dir(self.__class__.__name__)

    def setUp(self):
        """ Pre section of testcase """
        self.loopdev = Loopback(self.mount_path, self.data_size,
                                self.block_size, self.nr_dev)
        self.loopdev.init()
        self.build_target_config(self.loopdev.dev_list)
        self.target_subsys = NVMFTarget(self.target_type)
        ret = self.target_subsys.config(self.target_config_file)
        assert_equal(ret, True, "ERROR : target config failed")

    def tearDown(self):
        """ Post section of testcase """
        self.target_subsys.delete()
        self.loopdev.delete()

    def test_target(self):
        """ Testcase main """
        print("Now Running " + self.__class__.__name__)
        assert_equal(0, 0, "")
예제 #2
0
class TestNVMFCreateGenBlk(NVMFTest):
    """ Represents Host Creation testcase """
    def __init__(self):
        NVMFTest.__init__(self)
        self.host_subsys = None
        self.target_subsys = None
        self.setup_log_dir(self.__class__.__name__)

    def setUp(self):
        """ Pre section of testcase """
        self.gendev = GenBlk(len(self.blk_dev_pool))
        self.gendev.init(self.blk_dev_pool)

        self.build_target_config(self.gendev.dev_list)

        self.target_subsys = NVMFTarget(self.target_type)
        ret = self.target_subsys.config(self.target_config_file)
        assert_equal(ret, True, "ERROR : target config failed")

        self.host_subsys = NVMFHost(self.target_type)

    def tearDown(self):
        """ Post section of testcase """
        self.host_subsys.delete()
        self.target_subsys.delete()

    def test_create_gen_blk(self):
        """ Testcase main """
        print("Now Running " + self.__class__.__name__)
        ret = self.host_subsys.config(self.target_config_file)
        assert_equal(ret, True, "ERROR : host config failed")
class TestNVMFCreatePCIeTarget(NVMFTest):

    """ Represents Host Creation testcase """

    def __init__(self):
        NVMFTest.__init__(self)
        self.host_subsys = None
        self.target_subsys = None
        self.setup_log_dir(self.__class__.__name__)

    def setUp(self):
        """ Pre section of testcase """
        self.nvme_pci = NVMePCIeBlk()
        self.nvme_pci.init()
        self.build_target_config(self.nvme_pci.dev_list)
        self.target_subsys = NVMFTarget(self.target_type)
        ret = self.target_subsys.config(self.target_config_file)
        assert_equal(ret, True, "ERROR : target config failed")
        self.host_subsys = NVMFHost(self.target_type)

    def tearDown(self):
        """ Post section of testcase """
        self.host_subsys.delete()
        self.target_subsys.delete()
        self.nvme_pci.delete()

    def test_create_pci_target(self):
        """ Testcase main """
        print("Now Running " + self.__class__.__name__)
        ret = self.host_subsys.config(self.target_config_file)
        assert_equal(ret, True, "ERROR : host config failed")
        raw_input("Press enter to continue ...")
예제 #4
0
class NVMFTest(object):
    """ Common attributes for all testcases """
    def __init__(self):
        # TODO : make this dictionary
        self.config_file = 'config/nvmftests.json'
        self.data_size = 0
        self.block_size = 0
        self.nr_dev = 0
        self.mount_path = Const.XXX
        self.test_log_dir = Const.XXX
        self.nr_dev = 0
        self.nr_target_subsys = 0
        self.nr_ns_per_subsys = 0
        self.target_config_file = Const.XXX
        self.target_type = Const.XXX
        self.loopdev = None
        self.host_subsys = None
        self.target_subsys = None
        self.log_dir = './logs/' + self.__class__.__name__ + '/'
        self.err_str = "ERROR : " + self.__class__.__name__ + " : "
        self.fio_read = {}
        self.fio_fs_write = {}
        self.dd_read = {}
        self.dd_write = {}
        self.blk_dev_pool = []

        self.load_config()

    def build_target_config(self, dev_list):
        """ Generates target config file in JSON format from test config file.
            - Args :
                - None.
            - Returns :
                - None.
        """
        with open(self.config_file) as cfg_file:
            cfg = json.load(cfg_file)
            # target subsystem and namespsce config
            self.nr_dev = int(cfg['nr_dev'])
            self.nr_target_subsys = int(cfg['nr_target_subsys'])
            self.nr_ns_per_subsys = int(cfg['nr_ns_per_subsys'])
            self.target_config_file = cfg['target_config_file']
            target_cfg = TargetConfig(self.target_config_file,
                                      self.nr_target_subsys,
                                      self.nr_ns_per_subsys, dev_list)
            target_cfg.build_target_subsys()

    def load_config(self):
        """ Load basic test configuration.
            - Args :
                - None.
            - Returns :
                - True on success, False on failure.
        """
        with open(self.config_file) as nvmftest_config:
            cfg = json.load(nvmftest_config)
            self.mount_path = cfg['mount_path']
            self.data_size = self.human_to_bytes(cfg['data_size'])
            self.block_size = self.human_to_bytes(cfg['block_size'])
            self.nr_dev = int(cfg['nr_dev'])
            # fio device read
            self.fio_read = cfg['fio_read']
            self.fio_read['filename'] = Const.XXX
            self.fio_read['THREAD'] = __fio_worker__
            self.fio_read['RC'] = 0
            # fio file system write
            self.fio_fs_write = cfg['fio_fs_write']
            self.fio_fs_write['directory'] = Const.XXX
            self.fio_fs_write['THREAD'] = __fio_worker__
            self.fio_fs_write['RC'] = 0
            # dd write
            self.dd_read = cfg['dd_read']
            self.dd_read['THREAD'] = __dd_worker__
            self.dd_read['IF'] = None
            self.dd_read['COUNT'] = str(self.data_size / self.block_size)
            self.dd_read['RC'] = 0
            # dd read
            self.dd_write = cfg['dd_write']
            self.dd_write['THREAD'] = __dd_worker__
            self.dd_write['OF'] = None
            self.dd_write['COUNT'] = str(self.data_size / self.block_size)
            self.dd_write['RC'] = 0

            self.target_type = cfg['target_type']
            # block_dev_pool
            self.blk_dev_pool = cfg['block_dev_pool']
            return True
        return False

    def human_to_bytes(self, num_str):
        """ Converts human readble format to bytes.
            Args :
              - num_str : human readble string.
            Returns :
              - On success decimal equivalant of num_str, 0 on failure.
        """
        decimal_bytes = 0
        num_suffix = str(num_str[-2:]).upper()
        if num_suffix == Const.KB:
            decimal_bytes = int(num_str.split("K")[0]) * Const.ONE_KB
        elif num_suffix == Const.MB:
            decimal_bytes = int(num_str.split("M")[0]) * Const.ONE_MB
        elif num_suffix == Const.GB:
            decimal_bytes = int(num_str.split("G")[0]) * Const.ONE_GB
        else:
            print(self.err_str + "invalid suffix " + num_str)

        return decimal_bytes

    def setup_log_dir(self, test_name):
        """ Set up the log directory for a testcase.
            Args :
              - test_name : name of the testcase.
            Returns :
              - None.
        """
        self.test_log_dir = self.log_dir + "/" + test_name
        if not os.path.exists(self.test_log_dir):
            os.makedirs(self.test_log_dir)
        sys.stdout = NVMFLogger(self.test_log_dir + "/" + "stdout.log")
        sys.stderr = NVMFLogger(self.test_log_dir + "/" + "stderr.log")

    def common_setup(self):
        """ Common test case setup function.
            Args :
              - None.
            Returns :
              - None.
        """
        self.target_subsys = NVMFTarget(self.target_type)
        ret = self.target_subsys.config(self.target_config_file)
        assert_equal(ret, True, "ERROR : target config failed")
        self.host_subsys = NVMFHost(self.target_type)
        ret = self.host_subsys.config(self.target_config_file)
        assert_equal(ret, True, "ERROR : host config failed")

    def common_tear_down(self):
        """ Common test case tear down function.
            Args :
              - None.
            Returns :
              - None.
        """
        self.host_subsys.delete()
        self.target_subsys.delete()