Blame nvmet/test_nvmet.py

Packit 01965a
Packit 01965a
import random
Packit 01965a
import string
Packit 01965a
import unittest
Packit 01965a
import nvmet.nvme as nvme
Packit 01965a
Packit 01965a
Packit 01965a
class TestNvmet(unittest.TestCase):
Packit 01965a
    def test_subsystem(self):
Packit 01965a
        root = nvme.Root()
Packit 01965a
        root.clear_existing()
Packit 01965a
        for s in root.subsystems:
Packit 01965a
            self.assertTrue(False, 'Found Subsystem after clear')
Packit 01965a
Packit 01965a
        # create mode
Packit 01965a
        s1 = nvme.Subsystem(nqn='testnqn1', mode='create')
Packit 01965a
        self.assertIsNotNone(s1)
Packit 01965a
        self.assertEqual(len(list(root.subsystems)), 1)
Packit 01965a
Packit 01965a
        # any mode, should create
Packit 01965a
        s2 = nvme.Subsystem(nqn='testnqn2', mode='any')
Packit 01965a
        self.assertIsNotNone(s2)
Packit 01965a
        self.assertEqual(len(list(root.subsystems)), 2)
Packit 01965a
Packit 01965a
        # random name
Packit 01965a
        s3 = nvme.Subsystem(mode='create')
Packit 01965a
        self.assertIsNotNone(s3)
Packit 01965a
        self.assertEqual(len(list(root.subsystems)), 3)
Packit 01965a
Packit 01965a
        # duplicate
Packit 01965a
        self.assertRaises(nvme.CFSError, nvme.Subsystem,
Packit 01965a
                          nqn='testnqn1', mode='create')
Packit 01965a
        self.assertEqual(len(list(root.subsystems)), 3)
Packit 01965a
Packit 01965a
        # lookup using any, should not create
Packit 01965a
        s = nvme.Subsystem(nqn='testnqn1', mode='any')
Packit 01965a
        self.assertEqual(s1, s)
Packit 01965a
        self.assertEqual(len(list(root.subsystems)), 3)
Packit 01965a
Packit 01965a
        # lookup only
Packit 01965a
        s = nvme.Subsystem(nqn='testnqn2', mode='lookup')
Packit 01965a
        self.assertEqual(s2, s)
Packit 01965a
        self.assertEqual(len(list(root.subsystems)), 3)
Packit 01965a
Packit 01965a
        # lookup without nqn
Packit 01965a
        self.assertRaises(nvme.CFSError, nvme.Subsystem, mode='lookup')
Packit 01965a
Packit 01965a
        # and delete them all
Packit 01965a
        for s in root.subsystems:
Packit 01965a
            s.delete()
Packit 01965a
        self.assertEqual(len(list(root.subsystems)), 0)
Packit 01965a
Packit 01965a
    def test_namespace(self):
Packit 01965a
        root = nvme.Root()
Packit 01965a
        root.clear_existing()
Packit 01965a
Packit 01965a
        s = nvme.Subsystem(nqn='testnqn', mode='create')
Packit 01965a
        for n in s.namespaces:
Packit 01965a
            self.assertTrue(False, 'Found Namespace in new Subsystem')
Packit 01965a
Packit 01965a
        # create mode
Packit 01965a
        n1 = nvme.Namespace(s, nsid=3, mode='create')
Packit 01965a
        self.assertIsNotNone(n1)
Packit 01965a
        self.assertEqual(len(list(s.namespaces)), 1)
Packit 01965a
Packit 01965a
        # any mode, should create
Packit 01965a
        n2 = nvme.Namespace(s, nsid=2, mode='any')
Packit 01965a
        self.assertIsNotNone(n2)
Packit 01965a
        self.assertEqual(len(list(s.namespaces)), 2)
Packit 01965a
Packit 01965a
        # create without nsid, should pick lowest available
Packit 01965a
        n3 = nvme.Namespace(s, mode='create')
Packit 01965a
        self.assertIsNotNone(n3)
Packit 01965a
        self.assertEqual(n3.nsid, 1)
Packit 01965a
        self.assertEqual(len(list(s.namespaces)), 3)
Packit 01965a
Packit 01965a
        n4 = nvme.Namespace(s, mode='create')
Packit 01965a
        self.assertIsNotNone(n4)
Packit 01965a
        self.assertEqual(n4.nsid, 4)
Packit 01965a
        self.assertEqual(len(list(s.namespaces)), 4)
Packit 01965a
Packit 01965a
        # duplicate
Packit 01965a
        self.assertRaises(nvme.CFSError, nvme.Namespace, 1, mode='create')
Packit 01965a
        self.assertEqual(len(list(s.namespaces)), 4)
Packit 01965a
Packit 01965a
        # lookup using any, should not create
Packit 01965a
        n = nvme.Namespace(s, nsid=3, mode='any')
Packit 01965a
        self.assertEqual(n1, n)
Packit 01965a
        self.assertEqual(len(list(s.namespaces)), 4)
Packit 01965a
Packit 01965a
        # lookup only
Packit 01965a
        n = nvme.Namespace(s, nsid=2, mode='lookup')
Packit 01965a
        self.assertEqual(n2, n)
Packit 01965a
        self.assertEqual(len(list(s.namespaces)), 4)
Packit 01965a
Packit 01965a
        # lookup without nsid
Packit 01965a
        self.assertRaises(nvme.CFSError, nvme.Namespace, None, mode='lookup')
Packit 01965a
Packit 01965a
        # and delete them all
Packit 01965a
        for n in s.namespaces:
Packit 01965a
            n.delete()
Packit 01965a
        self.assertEqual(len(list(s.namespaces)), 0)
Packit 01965a
Packit 01965a
    def test_namespace_attrs(self):
Packit 01965a
        root = nvme.Root()
Packit 01965a
        root.clear_existing()
Packit 01965a
Packit 01965a
        s = nvme.Subsystem(nqn='testnqn', mode='create')
Packit 01965a
        n = nvme.Namespace(s, mode='create')
Packit 01965a
Packit 01965a
        self.assertFalse(n.get_enable())
Packit 01965a
        self.assertTrue('device' in n.attr_groups)
Packit 01965a
        self.assertTrue('path' in n.list_attrs('device'))
Packit 01965a
Packit 01965a
        # no device set yet, should fail
Packit 01965a
        self.assertRaises(nvme.CFSError, n.set_enable, 1)
Packit 01965a
Packit 01965a
        # now set a path and enable
Packit 01965a
        n.set_attr('device', 'path', '/dev/ram0')
Packit 01965a
        n.set_enable(1)
Packit 01965a
        self.assertTrue(n.get_enable())
Packit 01965a
Packit 01965a
        # test double enable
Packit 01965a
        n.set_enable(1)
Packit 01965a
Packit 01965a
        # test that we can't write to attrs while enabled
Packit 01965a
        self.assertRaises(nvme.CFSError, n.set_attr, 'device', 'path',
Packit 01965a
                          '/dev/ram1')
Packit 01965a
        self.assertRaises(nvme.CFSError, n.set_attr, 'device', 'nguid',
Packit 01965a
                          '15f7767b-50e7-4441-949c-75b99153dea7')
Packit 01965a
Packit 01965a
        # disable: once and twice
Packit 01965a
        n.set_enable(0)
Packit 01965a
        n.set_enable(0)
Packit 01965a
Packit 01965a
        # enable again, and remove while enabled
Packit 01965a
        n.set_enable(1)
Packit 01965a
        n.delete()
Packit 01965a
Packit 01965a
    def test_recursive_delete(self):
Packit 01965a
        root = nvme.Root()
Packit 01965a
        root.clear_existing()
Packit 01965a
Packit 01965a
        s = nvme.Subsystem(nqn='testnqn', mode='create')
Packit 01965a
        n1 = nvme.Namespace(s, mode='create')
Packit 01965a
        n2 = nvme.Namespace(s, mode='create')
Packit 01965a
Packit 01965a
        s.delete()
Packit 01965a
        self.assertEqual(len(list(root.subsystems)), 0)
Packit 01965a
Packit 01965a
    def test_port(self):
Packit 01965a
        root = nvme.Root()
Packit 01965a
        root.clear_existing()
Packit 01965a
        for p in root.ports:
Packit 01965a
            self.assertTrue(False, 'Found Port after clear')
Packit 01965a
Packit 01965a
        # create mode
Packit 01965a
        p1 = nvme.Port(portid=0, mode='create')
Packit 01965a
        self.assertIsNotNone(p1)
Packit 01965a
        self.assertEqual(len(list(root.ports)), 1)
Packit 01965a
Packit 01965a
        # any mode, should create
Packit 01965a
        p2 = nvme.Port(portid=1, mode='any')
Packit 01965a
        self.assertIsNotNone(p2)
Packit 01965a
        self.assertEqual(len(list(root.ports)), 2)
Packit 01965a
Packit 01965a
        # duplicate
Packit 01965a
        self.assertRaises(nvme.CFSError, nvme.Port,
Packit 01965a
                          portid=0, mode='create')
Packit 01965a
        self.assertEqual(len(list(root.ports)), 2)
Packit 01965a
Packit 01965a
        # lookup using any, should not create
Packit 01965a
        p = nvme.Port(portid=0, mode='any')
Packit 01965a
        self.assertEqual(p1, p)
Packit 01965a
        self.assertEqual(len(list(root.ports)), 2)
Packit 01965a
Packit 01965a
        # lookup only
Packit 01965a
        p = nvme.Port(portid=1, mode='lookup')
Packit 01965a
        self.assertEqual(p2, p)
Packit 01965a
        self.assertEqual(len(list(root.ports)), 2)
Packit 01965a
Packit 01965a
        # and delete them all
Packit 01965a
        for p in root.ports:
Packit 01965a
            p.delete()
Packit 01965a
        self.assertEqual(len(list(root.ports)), 0)
Packit 01965a
Packit 01965a
    def test_loop_port(self):
Packit 01965a
        root = nvme.Root()
Packit 01965a
        root.clear_existing()
Packit 01965a
Packit 01965a
        s = nvme.Subsystem(nqn='testnqn', mode='create')
Packit 01965a
        p = nvme.Port(portid=0, mode='create')
Packit 01965a
Packit 01965a
        # subsystem doesn't exists, should fail
Packit 01965a
        self.assertRaises(nvme.CFSError, p.add_subsystem, 'invalidnqn')
Packit 01965a
Packit 01965a
        self.assertTrue('addr' in p.attr_groups)
Packit 01965a
Packit 01965a
        # no trtype set yet, should fail
Packit 01965a
        self.assertRaises(nvme.CFSError, p.add_subsystem, 'testnqn')
Packit 01965a
Packit 01965a
        # now set trtype to loop and other attrs and enable
Packit 01965a
        p.set_attr('addr', 'trtype', 'loop')
Packit 01965a
        p.set_attr('addr', 'adrfam', 'ipv4')
Packit 01965a
        p.set_attr('addr', 'traddr', '192.168.0.1')
Packit 01965a
        p.set_attr('addr', 'treq', 'not required')
Packit 01965a
        p.set_attr('addr', 'trsvcid', '1023')
Packit 01965a
        p.add_subsystem('testnqn')
Packit 01965a
Packit 01965a
        # test double add
Packit 01965a
        self.assertRaises(nvme.CFSError, p.add_subsystem, 'testnqn')
Packit 01965a
Packit 01965a
        # test that we can't write to attrs while enabled
Packit 01965a
        self.assertRaises(nvme.CFSError, p.set_attr, 'addr', 'trtype',
Packit 01965a
                          'rdma')
Packit 01965a
        self.assertRaises(nvme.CFSError, p.set_attr, 'addr', 'adrfam',
Packit 01965a
                          'ipv6')
Packit 01965a
        self.assertRaises(nvme.CFSError, p.set_attr, 'addr', 'traddr',
Packit 01965a
                          '10.0.0.1')
Packit 01965a
        self.assertRaises(nvme.CFSError, p.set_attr, 'addr', 'treq',
Packit 01965a
                          'required')
Packit 01965a
        self.assertRaises(nvme.CFSError, p.set_attr, 'addr', 'trsvcid',
Packit 01965a
                          '21')
Packit 01965a
Packit 01965a
        # remove: once and twice
Packit 01965a
        p.remove_subsystem('testnqn')
Packit 01965a
        self.assertRaises(nvme.CFSError, p.remove_subsystem, 'testnqn')
Packit 01965a
Packit 01965a
        # check that the attrs haven't been tampered with
Packit 01965a
        self.assertEqual(p.get_attr('addr', 'trtype'), 'loop')
Packit 01965a
        self.assertEqual(p.get_attr('addr', 'adrfam'), 'ipv4')
Packit 01965a
        self.assertEqual(p.get_attr('addr', 'traddr'), '192.168.0.1')
Packit 01965a
        self.assertEqual(p.get_attr('addr', 'treq'), 'not required')
Packit 01965a
        self.assertEqual(p.get_attr('addr', 'trsvcid'), '1023')
Packit 01965a
Packit 01965a
        # add again, and try to remove while enabled
Packit 01965a
        p.add_subsystem('testnqn')
Packit 01965a
        p.delete()
Packit 01965a
Packit 01965a
    def test_host(self):
Packit 01965a
        root = nvme.Root()
Packit 01965a
        root.clear_existing()
Packit 01965a
        for p in root.hosts:
Packit 01965a
            self.assertTrue(False, 'Found Host after clear')
Packit 01965a
Packit 01965a
        # create mode
Packit 01965a
        h1 = nvme.Host(nqn='foo', mode='create')
Packit 01965a
        self.assertIsNotNone(h1)
Packit 01965a
        self.assertEqual(len(list(root.hosts)), 1)
Packit 01965a
Packit 01965a
        # any mode, should create
Packit 01965a
        h2 = nvme.Host(nqn='bar', mode='any')
Packit 01965a
        self.assertIsNotNone(h2)
Packit 01965a
        self.assertEqual(len(list(root.hosts)), 2)
Packit 01965a
Packit 01965a
        # duplicate
Packit 01965a
        self.assertRaises(nvme.CFSError, nvme.Host,
Packit 01965a
                          'foo', mode='create')
Packit 01965a
        self.assertEqual(len(list(root.hosts)), 2)
Packit 01965a
Packit 01965a
        # lookup using any, should not create
Packit 01965a
        h = nvme.Host('foo', mode='any')
Packit 01965a
        self.assertEqual(h1, h)
Packit 01965a
        self.assertEqual(len(list(root.hosts)), 2)
Packit 01965a
Packit 01965a
        # lookup only
Packit 01965a
        h = nvme.Host('bar', mode='lookup')
Packit 01965a
        self.assertEqual(h2, h)
Packit 01965a
        self.assertEqual(len(list(root.hosts)), 2)
Packit 01965a
Packit 01965a
        # and delete them all
Packit 01965a
        for h in root.hosts:
Packit 01965a
            h.delete()
Packit 01965a
        self.assertEqual(len(list(root.hosts)), 0)
Packit 01965a
Packit 01965a
    def test_referral(self):
Packit 01965a
        root = nvme.Root()
Packit 01965a
        root.clear_existing()
Packit 01965a
Packit 01965a
        # create port
Packit 01965a
        p = nvme.Port(portid=1, mode='create')
Packit 01965a
        self.assertEqual(len(list(p.referrals)), 0)
Packit 01965a
Packit 01965a
        # create mode
Packit 01965a
        r1 = nvme.Referral(p, name="1", mode='create')
Packit 01965a
        self.assertIsNotNone(r1)
Packit 01965a
        self.assertEqual(len(list(p.referrals)), 1)
Packit 01965a
Packit 01965a
        # any mode, should create
Packit 01965a
        r2 = nvme.Referral(p, name="2", mode='any')
Packit 01965a
        self.assertIsNotNone(r2)
Packit 01965a
        self.assertEqual(len(list(p.referrals)), 2)
Packit 01965a
Packit 01965a
        # duplicate
Packit 01965a
        self.assertRaises(nvme.CFSError, nvme.Referral,
Packit 01965a
                          p, name="2", mode='create')
Packit 01965a
        self.assertEqual(len(list(p.referrals)), 2)
Packit 01965a
Packit 01965a
        # lookup using any, should not create
Packit 01965a
        r = nvme.Referral(p, name="1", mode='any')
Packit 01965a
        self.assertEqual(r1, r)
Packit 01965a
        self.assertEqual(len(list(p.referrals)), 2)
Packit 01965a
Packit 01965a
        # lookup only
Packit 01965a
        r = nvme.Referral(p, name="2", mode='lookup')
Packit 01965a
        self.assertEqual(r2, r)
Packit 01965a
        self.assertEqual(len(list(p.referrals)), 2)
Packit 01965a
Packit 01965a
        # non-existant lookup
Packit 01965a
        self.assertRaises(nvme.CFSError, nvme.Referral, p, name="foo",
Packit 01965a
                          mode='lookup')
Packit 01965a
Packit 01965a
        # basic state
Packit 01965a
        self.assertTrue('addr' in r.attr_groups)
Packit 01965a
        self.assertFalse(r.get_enable())
Packit 01965a
Packit 01965a
        # now set trtype to loop and other attrs and enable
Packit 01965a
        r.set_attr('addr', 'trtype', 'loop')
Packit 01965a
        r.set_attr('addr', 'adrfam', 'ipv4')
Packit 01965a
        r.set_attr('addr', 'traddr', '192.168.0.1')
Packit 01965a
        r.set_attr('addr', 'treq', 'not required')
Packit 01965a
        r.set_attr('addr', 'trsvcid', '1023')
Packit 01965a
        r.set_enable(1)
Packit 01965a
Packit 01965a
        # test double enable
Packit 01965a
        r.set_enable(1)
Packit 01965a
Packit 01965a
        # test that we can't write to attrs while enabled
Packit 01965a
        self.assertRaises(nvme.CFSError, r.set_attr, 'addr', 'trtype',
Packit 01965a
                          'rdma')
Packit 01965a
        self.assertRaises(nvme.CFSError, r.set_attr, 'addr', 'adrfam',
Packit 01965a
                          'ipv6')
Packit 01965a
        self.assertRaises(nvme.CFSError, r.set_attr, 'addr', 'traddr',
Packit 01965a
                          '10.0.0.1')
Packit 01965a
        self.assertRaises(nvme.CFSError, r.set_attr, 'addr', 'treq',
Packit 01965a
                          'required')
Packit 01965a
        self.assertRaises(nvme.CFSError, r.set_attr, 'addr', 'trsvcid',
Packit 01965a
                          '21')
Packit 01965a
Packit 01965a
        # disable: once and twice
Packit 01965a
        r.set_enable(0)
Packit 01965a
        r.set_enable(0)
Packit 01965a
Packit 01965a
        # check that the attrs haven't been tampered with
Packit 01965a
        self.assertEqual(r.get_attr('addr', 'trtype'), 'loop')
Packit 01965a
        self.assertEqual(r.get_attr('addr', 'adrfam'), 'ipv4')
Packit 01965a
        self.assertEqual(r.get_attr('addr', 'traddr'), '192.168.0.1')
Packit 01965a
        self.assertEqual(r.get_attr('addr', 'treq'), 'not required')
Packit 01965a
        self.assertEqual(r.get_attr('addr', 'trsvcid'), '1023')
Packit 01965a
Packit 01965a
        # enable again, and try to remove while enabled
Packit 01965a
        r.set_enable(1)
Packit 01965a
        r.delete()
Packit 01965a
Packit 01965a
        # remove the other one while disabled:
Packit 01965a
        r1.delete()
Packit 01965a
        self.assertEqual(len(list(p.referrals)), 0)
Packit 01965a
Packit 01965a
    def test_allowed_hosts(self):
Packit 01965a
        root = nvme.Root()
Packit 01965a
Packit 01965a
        h = nvme.Host(nqn='hostnqn', mode='create')
Packit 01965a
Packit 01965a
        s = nvme.Subsystem(nqn='testnqn', mode='create')
Packit 01965a
Packit 01965a
        # add allowed_host
Packit 01965a
        s.add_allowed_host(nqn='hostnqn')
Packit 01965a
Packit 01965a
        # duplicate
Packit 01965a
        self.assertRaises(nvme.CFSError, s.add_allowed_host, 'hostnqn')
Packit 01965a
Packit 01965a
        # invalid
Packit 01965a
        self.assertRaises(nvme.CFSError, s.add_allowed_host, 'invalid')
Packit 01965a
Packit 01965a
        # remove again
Packit 01965a
        s.remove_allowed_host('hostnqn')
Packit 01965a
Packit 01965a
        # duplicate removal
Packit 01965a
        self.assertRaises(nvme.CFSError, s.remove_allowed_host, 'hostnqn')
Packit 01965a
Packit 01965a
        # invalid removal
Packit 01965a
        self.assertRaises(nvme.CFSError, s.remove_allowed_host, 'foobar')
Packit 01965a
Packit 01965a
    def test_invalid_input(self):
Packit 01965a
        root = nvme.Root()
Packit 01965a
        root.clear_existing()
Packit 01965a
Packit 01965a
        self.assertRaises(nvme.CFSError, nvme.Subsystem,
Packit 01965a
                          nqn='', mode='create')
Packit 01965a
        self.assertRaises(nvme.CFSError, nvme.Subsystem,
Packit 01965a
                          nqn='/', mode='create')
Packit 01965a
Packit 01965a
        for l in [ 257, 512, 1024, 2048 ]:
Packit 01965a
            toolong = ''.join(random.choice(string.lowercase)
Packit 01965a
                              for i in range(l))
Packit 01965a
            self.assertRaises(nvme.CFSError, nvme.Subsystem,
Packit 01965a
                              nqn=toolong, mode='create')
Packit 01965a
Packit 01965a
        discover_nqn = "nqn.2014-08.org.nvmexpress.discovery"
Packit 01965a
        self.assertRaises(nvme.CFSError, nvme.Subsystem,
Packit 01965a
                          nqn=discover_nqn, mode='create')
Packit 01965a
Packit 01965a
        self.assertRaises(nvme.CFSError, nvme.Port,
Packit 01965a
                          portid=1 << 17, mode='create')
Packit 01965a
Packit 01965a
    def test_save_restore(self):
Packit 01965a
        root = nvme.Root()
Packit 01965a
        root.clear_existing()
Packit 01965a
Packit 01965a
        h = nvme.Host(nqn='hostnqn', mode='create')
Packit 01965a
Packit 01965a
        s = nvme.Subsystem(nqn='testnqn', mode='create')
Packit 01965a
        s.add_allowed_host(nqn='hostnqn')
Packit 01965a
Packit 01965a
        s2 = nvme.Subsystem(nqn='testnqn2', mode='create')
Packit 01965a
        s2.set_attr('attr', 'allow_any_host', 1)
Packit 01965a
Packit 01965a
        n = nvme.Namespace(s, nsid=42, mode='create')
Packit 01965a
        n.set_attr('device', 'path', '/dev/ram0')
Packit 01965a
        n.set_enable(1)
Packit 01965a
Packit 01965a
        nguid = n.get_attr('device', 'nguid')
Packit 01965a
Packit 01965a
        p = nvme.Port(portid=66, mode='create')
Packit 01965a
        p.set_attr('addr', 'trtype', 'loop')
Packit 01965a
        p.set_attr('addr', 'adrfam', 'ipv4')
Packit 01965a
        p.set_attr('addr', 'traddr', '192.168.0.1')
Packit 01965a
        p.set_attr('addr', 'treq', 'not required')
Packit 01965a
        p.set_attr('addr', 'trsvcid', '1023')
Packit 01965a
        p.add_subsystem('testnqn')
Packit 01965a
Packit 01965a
        # save, clear, and restore
Packit 01965a
        root.save_to_file('test.json')
Packit 01965a
        root.clear_existing()
Packit 01965a
        root.restore_from_file('test.json')
Packit 01965a
Packit 01965a
        # additional restores should fai
Packit 01965a
        self.assertRaises(nvme.CFSError, root.restore_from_file,
Packit 01965a
                          'test.json', False)
Packit 01965a
Packit 01965a
        # ... unless forced!
Packit 01965a
        root.restore_from_file('test.json', True)
Packit 01965a
Packit 01965a
        # rebuild our view of the world
Packit 01965a
        h = nvme.Host(nqn='hostnqn', mode='lookup')
Packit 01965a
        s = nvme.Subsystem(nqn='testnqn', mode='lookup')
Packit 01965a
        s2 = nvme.Subsystem(nqn='testnqn2', mode='lookup')
Packit 01965a
        n = nvme.Namespace(s, nsid=42, mode='lookup')
Packit 01965a
        p = nvme.Port(portid=66, mode='lookup')
Packit 01965a
Packit 01965a
        self.assertEqual(s.get_attr('attr', 'allow_any_host'), "0")
Packit 01965a
        self.assertEqual(s2.get_attr('attr', 'allow_any_host'), "1")
Packit 01965a
        self.assertIn('hostnqn', s.allowed_hosts)
Packit 01965a
Packit 01965a
        # and check everything is still the same
Packit 01965a
        self.assertTrue(n.get_enable())
Packit 01965a
        self.assertEqual(n.get_attr('device', 'path'), '/dev/ram0')
Packit 01965a
        self.assertEqual(n.get_attr('device', 'nguid'), nguid)
Packit 01965a
Packit 01965a
        self.assertEqual(p.get_attr('addr', 'trtype'), 'loop')
Packit 01965a
        self.assertEqual(p.get_attr('addr', 'adrfam'), 'ipv4')
Packit 01965a
        self.assertEqual(p.get_attr('addr', 'traddr'), '192.168.0.1')
Packit 01965a
        self.assertEqual(p.get_attr('addr', 'treq'), 'not required')
Packit 01965a
        self.assertEqual(p.get_attr('addr', 'trsvcid'), '1023')
Packit 01965a
        self.assertIn('testnqn', p.subsystems)
Packit 01965a
        self.assertNotIn('testtnqn2', p.subsystems)