Example #1
0
class TestDeviceAliasAttrLocked(unittest.TestCase):
    def __init__(self, testName, sw):
        super().__init__(testName)
        self.switch = sw

    def setUp(self) -> None:
        log.debug(self.switch.version)
        log.debug(self.switch.ipaddr)
        self.d = DeviceAlias(self.switch)
        self.old = self.d.distribute
        currdb = self.d.database
        if currdb is None:
            self.name = get_random_string()
            self.pwwn = get_random_pwwn()
        else:
            while True:
                self.name = get_random_string()
                self.pwwn = get_random_pwwn()
                if self.name not in currdb.keys(
                ) and self.pwwn not in currdb.values():
                    break
        log.debug({self.name: self.pwwn})

    def test_locked_values(self):
        self.assertIn(self.d.locked, [True, False])

    def test_locked_write_error(self):
        with self.assertRaises(AttributeError) as e:
            self.d.locked = True
        self.assertEqual("can't set attribute", str(e.exception))

    def test_acquire_lock(self):
        # Verify that lock is not acquired first
        self.assertFalse(self.d.locked)
        # Verify that distribute is set
        if not self.old:
            self.d.distribute = True
            self.assertTrue(self.d.distribute)
        self.switch.config("device-alias database ; device-alias name " +
                           self.name + " pwwn " + self.pwwn)
        self.assertTrue(self.d.locked)
        self.d.clear_lock()
        self.assertFalse(self.d.locked)
        self.d.distribute = self.old
        self.assertFalse(self.d.locked)

    def tearDown(self) -> None:
        self.d.distribute = self.old
        self.assertEqual(self.d.distribute, self.old)
        try:
            self.d.delete(self.name)
            newdb = self.d.database
            if newdb is not None:
                self.assertNotIn(self.name, newdb.keys())
                self.assertNotIn(self.pwwn, newdb.values())
        except CLIError as c:
            if "Device Alias not present" not in c.message:
                raise CLIError(c.args)
        finally:
            self.assertFalse(self.d.locked)
 def test_create_name_invalidfirstchar(self):
     d = DeviceAlias(self.switch)
     name = list(self.new_invalidfirstchar.keys())[0]
     pwwn = list(self.new_invalidfirstchar.values())[0]
     with self.assertRaises(CLIError) as e:
         d.create(self.new_invalidfirstchar)
     self.assertEqual(
         "The command \" device-alias database ;  device-alias name " +
         str(name) + " pwwn " + str(pwwn) +
         " ; \" gave the error \" Illegal first character. Name must start with a letter \".",
         str(e.exception))
     d.clear_lock()
 def test_create_name_invalid(self):
     d = DeviceAlias(self.switch)
     name = list(self.new_invalidname.keys())[0]
     pwwn = list(self.new_invalidname.values())[0]
     with self.assertRaises(CLIError) as e:
         d.create(self.new_invalidname)
     self.assertEqual(
         "The command \" device-alias database ;  device-alias name " +
         str(name) + " pwwn " + str(pwwn) +
         " ; \" gave the error \" Illegal character present in the name \".",
         str(e.exception))
     d.clear_lock()
class TestDeviceAliasCreate(unittest.TestCase):
    def __init__(self, testName, sw):
        super().__init__(testName) 
        self.switch = sw

    def setUp(self) -> None:
        log.debug(self.switch.version)
        log.debug(self.switch.ipaddr)
        self.d = DeviceAlias(self.switch)
        self.olddb = self.d.database
        if self.olddb is None:
            self.name = get_random_string()
            self.pwwn = get_random_pwwn()
        else:
            while True:
                self.name = get_random_string()
                self.pwwn = get_random_pwwn()
                if (
                    self.name not in self.olddb.keys()
                    and self.pwwn not in self.olddb.values()
                ):
                    break
        log.debug({self.name: self.pwwn})

    def test_create(self):
        self.d.create({self.name: self.pwwn})
        newdb = self.d.database
        self.assertIn(self.name, newdb.keys())
        self.assertEqual(self.pwwn, newdb[self.name])
        self.d.delete(self.name)
        newdb = self.d.database
        if newdb is not None:
            self.assertNotIn(self.name, newdb.keys())
            self.assertNotIn(self.pwwn, newdb.values())

    def test_create_name_invalid(self):
        invalid_name = {
            "da1&": get_random_pwwn()
        }  # da name a-zA-Z1-9 - _ $ ^    64chars max
        name = list(invalid_name.keys())[0]
        pwwn = list(invalid_name.values())[0]
        with self.assertRaises(CLIError) as e:
            self.d.create(invalid_name)
        self.assertEqual(
            'The command " device-alias database ;  device-alias name '
            + str(name)
            + " pwwn "
            + str(pwwn)
            + ' ; " gave the error " Illegal character present in the name ".',
            str(e.exception),
        )
        self.d.clear_lock()

    def test_create_name_invalidfirstchar(self):
        invalidfirstchar = {"1da": "53:66:61:01:0e:00:01:ff"}
        name = list(invalidfirstchar.keys())[0]
        pwwn = list(invalidfirstchar.values())[0]
        with self.assertRaises(CLIError) as e:
            self.d.create(invalidfirstchar)
        self.assertEqual(
            'The command " device-alias database ;  device-alias name '
            + str(name)
            + " pwwn "
            + str(pwwn)
            + ' ; " gave the error " Illegal first character. Name must start with a letter ".',
            str(e.exception),
        )
        self.d.clear_lock()

    def test_create_name_beyondmax(self):
        beyondmax = {
            "da123456789123456789123456789123456789123456789123456789123456789": get_random_pwwn()
        }
        name = list(beyondmax.keys())[0]
        pwwn = list(beyondmax.values())[0]
        with self.assertRaises(CLIError) as e:
            self.d.create(beyondmax)
        self.assertEqual(
            'The command " device-alias database ;  device-alias name '
            + str(name)
            + " pwwn "
            + str(pwwn)
            + ' ; " gave the error " % String exceeded max length of (64) ".',
            str(e.exception),
        )

    def test_create_pwwn_existing(self):
        self.d.create({self.name: self.pwwn})
        newdb = self.d.database
        self.assertIn(self.name, newdb.keys())
        self.assertEqual(self.pwwn, newdb[self.name])

        newname = get_random_string()
        with self.assertRaises(CLIError) as e:
            self.d.create({newname: self.pwwn})
        self.assertIn(
            "Another device-alias already present with the same pwwn", str(e.exception)
        )

        # DB should not be updated with the new name
        self.assertIn(self.name, newdb.keys())
        self.assertEqual(self.pwwn, newdb[self.name])

        self.d.delete(self.name)

    def test_create_name_existing(self):
        self.d.create({self.name: self.pwwn})
        newdb = self.d.database
        self.assertIn(self.name, newdb.keys())
        self.assertEqual(self.pwwn, newdb[self.name])

        newpwwn = get_random_pwwn()
        with self.assertRaises(CLIError) as e:
            self.d.create({self.name: newpwwn})
        self.assertIn("Device Alias already present", str(e.exception))

        # DB should not be updated with the new pwwn
        self.assertIn(self.name, newdb.keys())
        self.assertEqual(self.pwwn, newdb[self.name])

        self.d.delete(self.name)

    def tearDown(self) -> None:
        try:
            self.d.delete(self.name)
        except CLIError as c:
            if "Device Alias not present" not in c.message:
                self.fail("Tear down failed: " + c.message)
        enddb = self.d.database
        if enddb is not None:
            self.assertEqual(enddb, self.olddb)
 def test_clear_lock(self):
     d = DeviceAlias(self.switch)
     d.clear_lock()
     self.assertEqual(False, d.locked)
class TestDeviceAliasRename(unittest.TestCase):

    def __init__(self, testName, sw):
        super().__init__(testName) 
        self.switch = sw

    def setUp(self) -> None:
        log.debug(self.switch.version)
        log.debug(self.switch.ipaddr)
        self.d = DeviceAlias(self.switch)
        self.olddb = self.d.database
        if self.olddb is None:
            self.name = get_random_string()
            self.pwwn = get_random_pwwn()
        else:
            while True:
                self.name = get_random_string()
                self.pwwn = get_random_pwwn()
                if (
                    self.name not in self.olddb.keys()
                    and self.pwwn not in self.olddb.values()
                ):
                    break
        log.debug({self.name: self.pwwn})

    def test_rename(self):
        self.d.create({self.name: self.pwwn})
        newdb = self.d.database
        self.assertIn(self.name, newdb.keys())
        self.assertEqual(self.pwwn, newdb[self.name])
        while True:
            self.newname_to_replace = get_random_string()
            if self.newname_to_replace not in newdb.keys():
                break
        self.d.rename(oldname=self.name, newname=self.newname_to_replace)
        chkdb = self.d.database
        self.assertIn(self.newname_to_replace, chkdb.keys())
        self.assertEqual(self.pwwn, chkdb[self.newname_to_replace])
        self.assertNotIn(self.name, chkdb.keys())
        self.d.delete(self.newname_to_replace)
        chkdb = self.d.database
        if chkdb is not None:
            self.assertNotIn(self.newname_to_replace, chkdb.keys())
            self.assertNotIn(self.pwwn, chkdb.values())
            self.assertNotIn(self.name, chkdb.keys())

    def test_rename_not_present(self):
        self.d.create({self.name: self.pwwn})
        newdb = self.d.database
        self.assertIn(self.name, newdb.keys())
        self.assertEqual(self.pwwn, newdb[self.name])
        while True:
            self.newname_to_replace = get_random_string()
            if self.newname_to_replace not in newdb.keys():
                break
        with self.assertRaises(CLIError) as e:
            self.d.rename(oldname=self.newname_to_replace, newname=self.name)
        self.assertIn("Device Alias not present", str(e.exception))

        self.d.delete(self.name)
        chkdb = self.d.database
        if chkdb is not None:
            self.assertNotIn(self.newname_to_replace, chkdb.keys())
            self.assertNotIn(self.pwwn, chkdb.values())
            self.assertNotIn(self.name, chkdb.keys())

    def test_rename_already_present(self):
        self.d.create({self.name: self.pwwn})
        newdb = self.d.database
        self.assertIn(self.name, newdb.keys())
        self.assertEqual(self.pwwn, newdb[self.name])

        with self.assertRaises(CLIError) as e:
            self.d.rename(oldname=self.name, newname=self.name)
        self.assertIn(
            "Target device-alias name already in use. Please specify a new name.",
            str(e.exception),
        )

        self.d.delete(self.name)
        chkdb = self.d.database
        if chkdb is not None:
            self.assertNotIn(self.pwwn, chkdb.values())
            self.assertNotIn(self.name, chkdb.keys())

    def test_rename_invalid(self):
        self.d.create({self.name: self.pwwn})
        newdb = self.d.database
        self.assertIn(self.name, newdb.keys())
        self.assertEqual(self.pwwn, newdb[self.name])

        invalid_name = "da1&"  # da name a-zA-Z1-9 - _ $ ^    64chars max
        with self.assertRaises(CLIError) as e:
            self.d.rename(oldname=self.name, newname=invalid_name)
        self.assertIn("Illegal character present in the name", str(e.exception))
        self.d.clear_lock()

        self.d.delete(self.name)
        chkdb = self.d.database
        if chkdb is not None:
            self.assertNotIn(self.pwwn, chkdb.values())
            self.assertNotIn(self.name, chkdb.keys())

    def tearDown(self) -> None:
        try:
            self.d.delete(self.name)
        except CLIError as c:
            if "Device Alias not present" not in c.message:
                self.fail("Tear down failed: " + c.message)
        enddb = self.d.database
        if enddb is not None:
            self.assertEqual(enddb, self.olddb)