Blame tests/nvme_writezeros_test.py

Packit Service b7b338
# Copyright (c) 2015-2016 Western Digital Corporation or its affiliates.
Packit Service b7b338
#
Packit Service b7b338
# This program is free software; you can redistribute it and/or
Packit Service b7b338
# modify it under the terms of the GNU General Public License
Packit Service b7b338
# as published by the Free Software Foundation; either version 2
Packit Service b7b338
# of the License, or (at your option) any later version.
Packit Service b7b338
#
Packit Service b7b338
# This program is distributed in the hope that it will be useful,
Packit Service b7b338
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service b7b338
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service b7b338
# GNU General Public License for more details.
Packit Service b7b338
#
Packit Service b7b338
# You should have received a copy of the GNU General Public License
Packit Service b7b338
# along with this program; if not, write to the Free Software
Packit Service b7b338
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
Packit Service b7b338
# MA  02110-1301, USA.
Packit Service b7b338
#
Packit Service b7b338
#   Author: Chaitanya Kulkarni <chaitanya.kulkarni@hgst.com>
Packit Service b7b338
#
Packit Service b7b338
"""
Packit Service b7b338
NVMe Write Zeros:-
Packit Service b7b338
Packit Service b7b338
    1. Issue a write command to block of data.
Packit Service b7b338
    2. Read from same block to verify data pattern.
Packit Service b7b338
    3. Issue write zeros to the block of data.
Packit Service b7b338
    4. Read from same block, should be all zeroes.
Packit Service b7b338
Packit Service b7b338
"""
Packit Service b7b338
Packit Service b7b338
import filecmp
Packit Service b7b338
from nose.tools import assert_equal
Packit Service b7b338
from nvme_test_io import TestNVMeIO
Packit Service b7b338
Packit Service b7b338
Packit Service b7b338
class TestNVMeWriteZeros(TestNVMeIO):
Packit Service b7b338
Packit Service b7b338
    """
Packit Service b7b338
    Represents NVMe Write Zero Testcase.
Packit Service b7b338
Packit Service b7b338
        - Attributes:
Packit Service b7b338
              - zero_file : file with all '\0' to compare the zero data.
Packit Service b7b338
              - data_size : data size to perform IO.
Packit Service b7b338
              - start_block : starting block of to perform IO.
Packit Service b7b338
              - block_count: Number of blocks to use in IO.
Packit Service b7b338
              - test_log_dir : directory for logs, temp files.
Packit Service b7b338
    """
Packit Service b7b338
    def __init__(self):
Packit Service b7b338
        """ Pre Section for TestNVMeWriteZeros """
Packit Service b7b338
        TestNVMeIO.__init__(self)
Packit Service b7b338
        self.start_block = 1023
Packit Service b7b338
        self.block_count = 0
Packit Service b7b338
        self.setup_log_dir(self.__class__.__name__)
Packit Service b7b338
        self.write_file = self.test_log_dir + "/" + self.write_file
Packit Service b7b338
        self.read_file = self.test_log_dir + "/" + self.read_file
Packit Service b7b338
        self.zero_file = self.test_log_dir + "/" + "zero_file.txt"
Packit Service b7b338
        self.create_data_file(self.write_file, self.data_size, "15")
Packit Service b7b338
        self.create_data_file(self.zero_file, self.data_size, '\0')
Packit Service b7b338
        open(self.read_file, 'a').close()
Packit Service b7b338
Packit Service b7b338
    def __del__(self):
Packit Service b7b338
        """ Post Section for TestNVMeWriteZeros """
Packit Service b7b338
        TestNVMeIO.__del__(self)
Packit Service b7b338
Packit Service b7b338
    def write_zeroes(self):
Packit Service b7b338
        """ Wrapper for nvme write-zeroe
Packit Service b7b338
            - Args:
Packit Service b7b338
                - None
Packit Service b7b338
            - Returns:
Packit Service b7b338
                - return code for nvme write command.
Packit Service b7b338
        """
Packit Service b7b338
        write_zeroes_cmd = "nvme write-zeroes " + self.ns1 + \
Packit Service b7b338
                           " --start-block=" + str(self.start_block) + \
Packit Service b7b338
                           " --block-count=" + str(self.block_count)
Packit Service b7b338
        return self.exec_cmd(write_zeroes_cmd)
Packit Service b7b338
Packit Service b7b338
    def validate_write_read(self):
Packit Service b7b338
        """ Validate the file which had been read from the device
Packit Service b7b338
            - Args:
Packit Service b7b338
                - None
Packit Service b7b338
            - Returns:
Packit Service b7b338
                - 0 on success, 1 on failure
Packit Service b7b338
        """
Packit Service b7b338
        return 0 if filecmp.cmp(self.write_file, self.read_file) is True else 1
Packit Service b7b338
Packit Service b7b338
    def validate_zeroes(self):
Packit Service b7b338
        """
Packit Service b7b338
        Validate the data which is zeroed out via write-zeroes
Packit Service b7b338
            - Args:
Packit Service b7b338
                - None
Packit Service b7b338
            - Returns:
Packit Service b7b338
                - 0 on success, 1 on failure
Packit Service b7b338
         """
Packit Service b7b338
        return 0 if filecmp.cmp(self.zero_file, self.read_file) is True else 1
Packit Service b7b338
Packit Service b7b338
    def test_write_zeros(self):
Packit Service b7b338
        """ Testcae main """
Packit Service b7b338
        assert_equal(self.nvme_write(), 0)
Packit Service b7b338
        assert_equal(self.nvme_read(), 0)
Packit Service b7b338
        assert_equal(self.validate_write_read(), 0)
Packit Service b7b338
        assert_equal(self.write_zeroes(), 0)
Packit Service b7b338
        assert_equal(self.nvme_read(), 0)
Packit Service b7b338
        assert_equal(self.validate_zeroes(), 0)