Revision 8bb2df7d test/py/ganeti.cmdlib_unittest.py

b/test/py/ganeti.cmdlib_unittest.py
1533 1533
          cmdlib._CheckOpportunisticLocking(op)
1534 1534

  
1535 1535

  
1536
class _OpTestVerifyErrors(opcodes.OpCode):
1537
  OP_PARAMS = [
1538
    opcodes._PDebugSimulateErrors,
1539
    opcodes._PErrorCodes,
1540
    opcodes._PIgnoreErrors,
1541
    ]
1542

  
1543

  
1544
class _LuTestVerifyErrors(cmdlib._VerifyErrors):
1545
  def __init__(self, **kwargs):
1546
    cmdlib._VerifyErrors.__init__(self)
1547
    self.op = _OpTestVerifyErrors(**kwargs)
1548
    self.op.Validate(True)
1549
    self.msglist = []
1550
    self._feedback_fn = self.msglist.append
1551
    self.bad = False
1552

  
1553
  def DispatchCallError(self, which, *args, **kwargs):
1554
    if which:
1555
      self._Error(*args, **kwargs)
1556
    else:
1557
      self._ErrorIf(True, *args, **kwargs)
1558

  
1559
  def CallErrorIf(self, c, *args, **kwargs):
1560
    self._ErrorIf(c, *args, **kwargs)
1561

  
1562

  
1563
class TestVerifyErrors(unittest.TestCase):
1564
  # Fake cluster-verify error code structures; we use two arbitary real error
1565
  # codes to pass validation of ignore_errors
1566
  (_, _ERR1ID, _) = constants.CV_ECLUSTERCFG
1567
  _NODESTR = "node"
1568
  _NODENAME = "mynode"
1569
  _ERR1CODE = (_NODESTR, _ERR1ID, "Error one")
1570
  (_, _ERR2ID, _) = constants.CV_ECLUSTERCERT
1571
  _INSTSTR = "instance"
1572
  _INSTNAME = "myinstance"
1573
  _ERR2CODE = (_INSTSTR, _ERR2ID, "Error two")
1574
  # Arguments used to call _Error() or _ErrorIf()
1575
  _ERR1ARGS = (_ERR1CODE, _NODENAME, "Error1 is %s", "an error")
1576
  _ERR2ARGS = (_ERR2CODE, _INSTNAME, "Error2 has no argument")
1577
  # Expected error messages
1578
  _ERR1MSG = _ERR1ARGS[2] % _ERR1ARGS[3]
1579
  _ERR2MSG = _ERR2ARGS[2]
1580

  
1581
  def testNoError(self):
1582
    lu = _LuTestVerifyErrors()
1583
    lu.CallErrorIf(False, self._ERR1CODE, *self._ERR1ARGS)
1584
    self.assertFalse(lu.bad)
1585
    self.assertFalse(lu.msglist)
1586

  
1587
  def _InitTest(self, **kwargs):
1588
    self.lu1 = _LuTestVerifyErrors(**kwargs)
1589
    self.lu2 = _LuTestVerifyErrors(**kwargs)
1590

  
1591
  def _CallError(self, *args, **kwargs):
1592
    # Check that _Error() and _ErrorIf() produce the same results
1593
    self.lu1.DispatchCallError(True, *args, **kwargs)
1594
    self.lu2.DispatchCallError(False, *args, **kwargs)
1595
    self.assertEqual(self.lu1.bad, self.lu2.bad)
1596
    self.assertEqual(self.lu1.msglist, self.lu2.msglist)
1597
    # Test-specific checks are made on one LU
1598
    return self.lu1
1599

  
1600
  def _checkMsgCommon(self, logstr, errmsg, itype, item, warning):
1601
    self.assertTrue(errmsg in logstr)
1602
    if warning:
1603
      self.assertTrue("WARNING" in logstr)
1604
    else:
1605
      self.assertTrue("ERROR" in logstr)
1606
    self.assertTrue(itype in logstr)
1607
    self.assertTrue(item in logstr)
1608

  
1609
  def _checkMsg1(self, logstr, warning=False):
1610
    self._checkMsgCommon(logstr, self._ERR1MSG, self._NODESTR,
1611
                         self._NODENAME, warning)
1612

  
1613
  def _checkMsg2(self, logstr, warning=False):
1614
    self._checkMsgCommon(logstr, self._ERR2MSG, self._INSTSTR,
1615
                         self._INSTNAME, warning)
1616

  
1617
  def testPlain(self):
1618
    self._InitTest()
1619
    lu = self._CallError(*self._ERR1ARGS)
1620
    self.assertTrue(lu.bad)
1621
    self.assertEqual(len(lu.msglist), 1)
1622
    self._checkMsg1(lu.msglist[0])
1623

  
1624
  def testMultiple(self):
1625
    self._InitTest()
1626
    self._CallError(*self._ERR1ARGS)
1627
    lu = self._CallError(*self._ERR2ARGS)
1628
    self.assertTrue(lu.bad)
1629
    self.assertEqual(len(lu.msglist), 2)
1630
    self._checkMsg1(lu.msglist[0])
1631
    self._checkMsg2(lu.msglist[1])
1632

  
1633
  def testIgnore(self):
1634
    self._InitTest(ignore_errors=[self._ERR1ID])
1635
    lu = self._CallError(*self._ERR1ARGS)
1636
    self.assertFalse(lu.bad)
1637
    self.assertEqual(len(lu.msglist), 1)
1638
    self._checkMsg1(lu.msglist[0], warning=True)
1639

  
1640
  def testWarning(self):
1641
    self._InitTest()
1642
    lu = self._CallError(*self._ERR1ARGS,
1643
                         code=_LuTestVerifyErrors.ETYPE_WARNING)
1644
    self.assertFalse(lu.bad)
1645
    self.assertEqual(len(lu.msglist), 1)
1646
    self._checkMsg1(lu.msglist[0], warning=True)
1647

  
1648
  def testWarning2(self):
1649
    self._InitTest()
1650
    self._CallError(*self._ERR1ARGS)
1651
    lu = self._CallError(*self._ERR2ARGS,
1652
                         code=_LuTestVerifyErrors.ETYPE_WARNING)
1653
    self.assertTrue(lu.bad)
1654
    self.assertEqual(len(lu.msglist), 2)
1655
    self._checkMsg1(lu.msglist[0])
1656
    self._checkMsg2(lu.msglist[1], warning=True)
1657

  
1658
  def testDebugSimulate(self):
1659
    lu = _LuTestVerifyErrors(debug_simulate_errors=True)
1660
    lu.CallErrorIf(False, *self._ERR1ARGS)
1661
    self.assertTrue(lu.bad)
1662
    self.assertEqual(len(lu.msglist), 1)
1663
    self._checkMsg1(lu.msglist[0])
1664

  
1665
  def testErrCodes(self):
1666
    self._InitTest(error_codes=True)
1667
    lu = self._CallError(*self._ERR1ARGS)
1668
    self.assertTrue(lu.bad)
1669
    self.assertEqual(len(lu.msglist), 1)
1670
    self._checkMsg1(lu.msglist[0])
1671
    self.assertTrue(self._ERR1ID in lu.msglist[0])
1672

  
1673

  
1536 1674
if __name__ == "__main__":
1537 1675
  testutils.GanetiTestProgram()

Also available in: Unified diff