Blame test/harness/tests.py

Packit Service 646995
"""
Packit Service 646995
tests -- the actual TestCase (just one)
Packit Service 646995
"""
Packit Service 646995
Packit Service 646995
import sys
Packit Service 646995
import os
Packit Service 646995
import unittest
Packit Service 646995
Packit Service 646995
from . import util
Packit Service 646995
from .util import Global
Packit Service 646995
from .iscsi import IscsiData
Packit Service 646995
Packit Service 646995
Packit Service 646995
class TestRegression(unittest.TestCase):
Packit Service 646995
    """
Packit Service 646995
    Regression testing
Packit Service 646995
    """
Packit Service 646995
Packit Service 646995
    @classmethod
Packit Service 646995
    def setUpClass(cls):
Packit Service 646995
        util.verify_needed_commands_exist(['parted', 'fio', 'mkfs', 'bonnie++', 'sgdisk', 'iscsiadm'])
Packit Service 646995
        util.vprint('*** Starting %s' % cls.__name__)
Packit Service 646995
        # XXX validate that target exists?
Packit Service 646995
        # an array of first burts, max burst, and max recv values, for testing
Packit Service 646995
        cls.param_values = [[4096, 4096, 4096],
Packit Service 646995
                            [8192, 4096, 4096],
Packit Service 646995
                            [16384, 4096, 4096],
Packit Service 646995
                            [32768, 4096, 4096],
Packit Service 646995
                            [65536, 4096, 4096],
Packit Service 646995
                            [131972, 4096, 4096],
Packit Service 646995
                            [4096, 8192, 4096],
Packit Service 646995
                            [4096, 16384, 4096],
Packit Service 646995
                            [4096, 32768, 4096],
Packit Service 646995
                            [4096, 65536, 4096],
Packit Service 646995
                            [4096, 131072, 4096],
Packit Service 646995
                            [4096, 4096, 8192],
Packit Service 646995
                            [4096, 4096, 16384],
Packit Service 646995
                            [4096, 4096, 32768],
Packit Service 646995
                            [4096, 4096, 65536],
Packit Service 646995
                            [4096, 4096, 131072]]
Packit Service 646995
Packit Service 646995
    def setUp(self):
Packit Service 646995
        if Global.debug or Global.verbosity > 1:
Packit Service 646995
            # this makes debug printing a little more clean
Packit Service 646995
            print('', file=sys.stderr)
Packit Service 646995
Packit Service 646995
    def iscsi_logout(self):
Packit Service 646995
        res = util.run_cmd(['iscsiadm', '-m', 'node',
Packit Service 646995
                            '-T', Global.target,
Packit Service 646995
                            '-p', Global.ipnr,
Packit Service 646995
                            '--logout'])
Packit Service 646995
        if res not in [0, 21]:
Packit Service 646995
            self.fail('logout failed')
Packit Service 646995
        self.assertFalse(os.path.exists(Global.device), '%s: exists after logout!' % Global.device)
Packit Service 646995
Packit Service 646995
    def test_InitialR2T_on_ImmediateData_off(self):
Packit Service 646995
        """Test Initial Request to Transmit on, but Immediate Data off"""
Packit Service 646995
        i = 1
Packit Service 646995
        for v in self.param_values:
Packit Service 646995
            with self.subTest('Testing FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v), i=i):
Packit Service 646995
                if i not in Global.subtest_list:
Packit Service 646995
                    util.vprint('Skipping subtest %d: FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v) % i)
Packit Service 646995
                else:
Packit Service 646995
                    util.vprint('Running subtest %d: FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v) % i)
Packit Service 646995
                    self.iscsi_logout()
Packit Service 646995
                    iscsi_data = IscsiData('No', 'Yes', 'None', 'None', v[0], v[1], v[2])
Packit Service 646995
                    iscsi_data.update_cfg(Global.target, Global.ipnr)
Packit Service 646995
                    self.run_the_rest()
Packit Service 646995
            i += 1
Packit Service 646995
Packit Service 646995
    def test_InitialR2T_off_ImmediateData_on(self):
Packit Service 646995
        """Test Initial Request to Transmit off, Immediate Data on"""
Packit Service 646995
        i = 1
Packit Service 646995
        for v in self.param_values:
Packit Service 646995
            with self.subTest('Testing FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v), i=i):
Packit Service 646995
                if i not in Global.subtest_list:
Packit Service 646995
                    util.vprint('Skipping subtest %d: FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v) % i)
Packit Service 646995
                else:
Packit Service 646995
                    self.iscsi_logout()
Packit Service 646995
                    iscsi_data = IscsiData('Yes', 'No', 'None', 'None', v[0], v[1], v[2])
Packit Service 646995
                    iscsi_data.update_cfg(Global.target, Global.ipnr)
Packit Service 646995
                    self.run_the_rest()
Packit Service 646995
            i += 1
Packit Service 646995
Packit Service 646995
    def test_InitialR2T_on_ImmediateData_on(self):
Packit Service 646995
        """Test Initial Request to Transmit and Immediate Data on"""
Packit Service 646995
        i = 1
Packit Service 646995
        for v in self.param_values:
Packit Service 646995
            with self.subTest('Testing FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v), i=i):
Packit Service 646995
                if i not in Global.subtest_list:
Packit Service 646995
                    util.vprint('Skipping subtest %d: FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v) % i)
Packit Service 646995
                else:
Packit Service 646995
                    util.vprint('Running subtest %d: FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v) % i)
Packit Service 646995
                    self.iscsi_logout()
Packit Service 646995
                    iscsi_data = IscsiData('Yes', 'Yes', 'None', 'None', v[0], v[1], v[2])
Packit Service 646995
                    iscsi_data.update_cfg(Global.target, Global.ipnr)
Packit Service 646995
                    self.run_the_rest()
Packit Service 646995
            i += 1
Packit Service 646995
Packit Service 646995
    def test_InitialR2T_off_ImmediateData_off(self):
Packit Service 646995
        """Test Initial Request to Transmit and Immediate Data off"""
Packit Service 646995
        i = 1
Packit Service 646995
        for v in self.param_values:
Packit Service 646995
            with self.subTest('Testing FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v), i=i):
Packit Service 646995
                if i not in Global.subtest_list:
Packit Service 646995
                    util.vprint('Skipping subtest %d: FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v) % i)
Packit Service 646995
                else:
Packit Service 646995
                    util.vprint('Running subtest %d: FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v) % i)
Packit Service 646995
                    self.iscsi_logout()
Packit Service 646995
                    iscsi_data = IscsiData('No', 'No', 'None', 'None', v[0], v[1], v[2])
Packit Service 646995
                    iscsi_data.update_cfg(Global.target, Global.ipnr)
Packit Service 646995
                    self.run_the_rest()
Packit Service 646995
            i += 1
Packit Service 646995
Packit Service 646995
    def test_HdrDigest_on_DataDigest_off(self):
Packit Service 646995
        """Test With Header Digest"""
Packit Service 646995
        i = 1
Packit Service 646995
        for v in self.param_values:
Packit Service 646995
            with self.subTest('Testing FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v), i=i):
Packit Service 646995
                if i not in Global.subtest_list:
Packit Service 646995
                    util.vprint('Skipping subtest %d: FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v) % i)
Packit Service 646995
                else:
Packit Service 646995
                    util.vprint('Running subtest %d: FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v) % i)
Packit Service 646995
                    self.iscsi_logout()
Packit Service 646995
                    iscsi_data = IscsiData('No', 'Yes', 'CRC32C', 'None', v[0], v[1], v[2])
Packit Service 646995
                    iscsi_data.update_cfg(Global.target, Global.ipnr)
Packit Service 646995
                    self.run_the_rest()
Packit Service 646995
            i += 1
Packit Service 646995
Packit Service 646995
    def test_HdrDigest_on_DataDigest_on(self):
Packit Service 646995
        """Test With Header Digest"""
Packit Service 646995
        i = 1
Packit Service 646995
        for v in self.param_values:
Packit Service 646995
            with self.subTest('Testing FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v), i=i):
Packit Service 646995
                if i not in Global.subtest_list:
Packit Service 646995
                    util.vprint('Skipping subtest %d: FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v) % i)
Packit Service 646995
                else:
Packit Service 646995
                    util.vprint('Running subtest %d: FirstBurst={} MaxBurts={} MaxRecv={}'.format(*v) % i)
Packit Service 646995
                    self.iscsi_logout()
Packit Service 646995
                    iscsi_data = IscsiData('No', 'Yes', 'CRC32C', 'CRC32C', v[0], v[1], v[2])
Packit Service 646995
                    iscsi_data.update_cfg(Global.target, Global.ipnr)
Packit Service 646995
                    self.run_the_rest()
Packit Service 646995
            i += 1
Packit Service 646995
Packit Service 646995
    def run_the_rest(self):
Packit Service 646995
        res = util.run_cmd(['iscsiadm', '-m', 'node',
Packit Service 646995
                            '-T', Global.target,
Packit Service 646995
                            '-p', Global.ipnr,
Packit Service 646995
                            '--login'])
Packit Service 646995
        self.assertEqual(res, 0, 'cannot login to device')
Packit Service 646995
        # wait a few seconds for the device to show up
Packit Service 646995
        if not util.wait_for_path(Global.device):
Packit Service 646995
            self.fail('%s: does not exist after login' % Global.device)
Packit Service 646995
        (res, reason) = util.run_fio()
Packit Service 646995
        self.assertEqual(res, 0, reason)
Packit Service 646995
        (res, reason) = util.run_parted()
Packit Service 646995
        self.assertEqual(res, 0, reason)
Packit Service 646995
        (res, reason) = util.run_mkfs()
Packit Service 646995
        self.assertEqual(res, 0, reason)
Packit Service 646995
        (res, reason) = util.run_bonnie()
Packit Service 646995
        self.assertEqual(res, 0, reason)
Packit Service 646995
Packit Service 646995
    @classmethod
Packit Service 646995
    def tearDownClass(cls):
Packit Service 646995
        # restore iscsi config
Packit Service 646995
        iscsi_data = IscsiData()
Packit Service 646995
        iscsi_data.update_cfg(Global.target, Global.ipnr)
Packit Service 646995
        # log out of iscsi connection
Packit Service 646995
        util.run_cmd(['iscsiadm', '-m', 'node',
Packit Service 646995
                      '-T', Global.target,
Packit Service 646995
                      '-p', Global.ipnr,
Packit Service 646995
                      '--logout'])
Packit Service 646995