Blame tests/nvme_create_max_ns_test.py

Packit dd4ba5
# Copyright (c) 2015-2016 Western Digital Corporation or its affiliates.
Packit dd4ba5
#
Packit dd4ba5
# This program is free software; you can redistribute it and/or
Packit dd4ba5
# modify it under the terms of the GNU General Public License
Packit dd4ba5
# as published by the Free Software Foundation; either version 2
Packit dd4ba5
# of the License, or (at your option) any later version.
Packit dd4ba5
#
Packit dd4ba5
# This program is distributed in the hope that it will be useful,
Packit dd4ba5
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit dd4ba5
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit dd4ba5
# GNU General Public License for more details.
Packit dd4ba5
#
Packit dd4ba5
# You should have received a copy of the GNU General Public License
Packit dd4ba5
# along with this program; if not, write to the Free Software
Packit dd4ba5
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
Packit dd4ba5
# MA  02110-1301, USA.
Packit dd4ba5
#
Packit dd4ba5
#   Author: Chaitanya Kulkarni <chaitanya.kulkarni@hgst.com>
Packit dd4ba5
#
Packit dd4ba5
"""
Packit dd4ba5
NVMe Namespace Management Testcase:-
Packit dd4ba5
Packit dd4ba5
    1. Create Maximum number of Namespaces and validate.
Packit dd4ba5
    2. Attach all Namespaces to controller.
Packit dd4ba5
    3. Run IOs on Namespace under test.
Packit dd4ba5
    4. Detach Maximum number of Namespaces from controller.
Packit dd4ba5
    5. Delete all Namespaces.
Packit dd4ba5
"""
Packit dd4ba5
Packit dd4ba5
import time
Packit dd4ba5
from nose.tools import assert_equal
Packit dd4ba5
from nvme_test import TestNVMe
Packit dd4ba5
Packit dd4ba5
Packit dd4ba5
class TestNVMeCreateMaxNS(TestNVMe):
Packit dd4ba5
Packit dd4ba5
    """
Packit dd4ba5
    Represents Attach, Detach namespace testcase.
Packit dd4ba5
Packit dd4ba5
        - Attributes:
Packit dd4ba5
              - dps : data protection information.
Packit dd4ba5
              - flbas : LBA format information.
Packit dd4ba5
              - nsze : namespace size.
Packit dd4ba5
              - ncap : namespace capacity.
Packit dd4ba5
              - ctrl_id : controller id.
Packit dd4ba5
    """
Packit dd4ba5
Packit dd4ba5
    def __init__(self):
Packit dd4ba5
        """ Pre Section for TestNVMeAttachDetachNSCmd """
Packit dd4ba5
        TestNVMe.__init__(self)
Packit dd4ba5
        self.dps = 0
Packit dd4ba5
        self.flbas = 0
Packit dd4ba5
        self.nsze = int(self.get_ncap() / self.get_format() / self.get_max_ns())
Packit dd4ba5
        self.ncap = self.nsze
Packit dd4ba5
        self.setup_log_dir(self.__class__.__name__)
Packit dd4ba5
        self.max_ns = self.get_max_ns()
Packit dd4ba5
        self.ctrl_id = self.get_ctrl_id()
Packit dd4ba5
        self.delete_all_ns()
Packit dd4ba5
        time.sleep(1)
Packit dd4ba5
Packit dd4ba5
    def __del__(self):
Packit dd4ba5
        """
Packit dd4ba5
        Post Section for TestNVMeAttachDetachNSCmd
Packit dd4ba5
Packit dd4ba5
            - Create primary namespace.
Packit dd4ba5
            - Atttach it to controller.
Packit dd4ba5
            - Call super class's destructor.
Packit dd4ba5
        """
Packit dd4ba5
        assert_equal(self.create_and_validate_ns(self.default_nsid,
Packit dd4ba5
                                                 self.nsze,
Packit dd4ba5
                                                 self.ncap,
Packit dd4ba5
                                                 self.flbas,
Packit dd4ba5
                                                 self.dps), 0)
Packit dd4ba5
        self.attach_ns(self.ctrl_id, self.default_nsid)
Packit dd4ba5
        TestNVMe.__del__(self)
Packit dd4ba5
Packit dd4ba5
    def test_attach_detach_ns(self):
Packit dd4ba5
        """ Testcase main """
Packit dd4ba5
        for nsid in range(1, self.max_ns):
Packit dd4ba5
            print("##### Creating " + str(nsid))
Packit dd4ba5
            err = self.create_and_validate_ns(nsid,
Packit dd4ba5
                                              self.nsze,
Packit dd4ba5
                                              self.ncap,
Packit dd4ba5
                                              self.flbas,
Packit dd4ba5
                                              self.dps)
Packit dd4ba5
            assert_equal(err, 0)
Packit dd4ba5
            print("##### Attaching " + str(nsid))
Packit dd4ba5
            assert_equal(self.attach_ns(self.ctrl_id, nsid), 0)
Packit dd4ba5
            print("##### Running IOs in " + str(nsid))
Packit dd4ba5
            self.run_ns_io(nsid, 0)
Packit dd4ba5
Packit dd4ba5
        for nsid in range(1, self.max_ns):
Packit dd4ba5
            print("##### Detaching " + str(nsid))
Packit dd4ba5
            assert_equal(self.detach_ns(self.ctrl_id, nsid), 0)
Packit dd4ba5
            print("#### Deleting " + str(nsid))
Packit dd4ba5
            assert_equal(self.delete_and_validate_ns(nsid), 0)
Packit dd4ba5
        self.nvme_reset_ctrl()