#! /usr/bin/env python #******************************************************************************* # ALMA - Atacama Large Millimiter Array # (c) National Research Council of Canada, 2008 # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # "@(#) $Id: acspyTestUnitCDBAccess.py,v 1.1.1.1 2012/03/07 17:40:45 acaproni Exp $" # # who when what # -------- -------- ---------------------------------------------- # arne 2008-03-26 created # #------------------------------------------------------------------------------ __revision__ = "$Id: acspyTestUnitCDBAccess.py,v 1.1.1.1 2012/03/07 17:40:45 acaproni Exp $" #--REGULAR IMPORTS------------------------------------------------------------- import unittest import mock import xml.sax import CDB fakeFunc = { 'get_DAO': ' ' } mockCDB = mock.Mock(spec=CDB._objref_DAL) def mockcdb(): return mockCDB import Acspy.Util.ACSCorba Acspy.Util.ACSCorba.cdb = mockcdb #--ACS IMPORTS____------------------------------------------------------------- import Acspy.Common.CDBAccess class CDBHandlerCheck(unittest.TestCase): """Test of the CDBhandler class.""" def setUp(self): pass def tearDown(self): pass def testConstructor(self): """Handler initialized""" h = Acspy.Common.CDBAccess.CDBhandler('target') self.assertEqual('target', h.element_name) self.assertEqual('', h.tempName) self.assertEqual(0, len(h.return_values)) def testPlainElementNoAttr(self): """Handler element with no attributes""" h = Acspy.Common.CDBAccess.CDBhandler('target') xml.sax.parseString("Text", h) self.assertEqual('target', h.element_name) self.assertEqual('', h.tempName) self.assertEqual(1, len(h.return_values)) self.assertEqual({}, h.return_values[0]) def testPlainElementAttr(self): """Handler element with attributes""" h = Acspy.Common.CDBAccess.CDBhandler('target') xml.sax.parseString("Text", h) self.assertEqual('target', h.element_name) self.assertEqual('', h.tempName) self.assertEqual(1, len(h.return_values)) self.assertEqual(2, len(h.return_values[0])) self.assertEqual({'attr1': 'label', 'attr2': '9.0'}, h.return_values[0]) def testNestedElementNoAttr(self): """Handler nested element with no attributes""" h = Acspy.Common.CDBAccess.CDBhandler('parent/target') xml.sax.parseString("Text", h) self.assertEqual('parent/target', h.element_name) self.assertEqual('', h.tempName) self.assertEqual(1, len(h.return_values)) self.assertEqual({}, h.return_values[0]) def testNestedElementAttr(self): """Handler nested element with attributes""" h = Acspy.Common.CDBAccess.CDBhandler('parent/target') xml.sax.parseString("Text", h) self.assertEqual('parent/target', h.element_name) self.assertEqual('', h.tempName) self.assertEqual(1, len(h.return_values)) self.assertEqual(2, len(h.return_values[0])) self.assertEqual({'attr1': 'label', 'attr2': '9.0'}, h.return_values[0]) def testNestedWrongElementNoAttr(self): """Handler nested different element with no attributes""" h = Acspy.Common.CDBAccess.CDBhandler('parent/target') xml.sax.parseString("Text", h) self.assertEqual('parent/target', h.element_name) self.assertEqual('', h.tempName) self.assertEqual(0, len(h.return_values)) def testNestedWrongKeyNoAttr(self): """Handler nested different element with no attributes""" h = Acspy.Common.CDBAccess.CDBhandler('parent/target2') xml.sax.parseString("Text", h) self.assertEqual('parent/target2', h.element_name) self.assertEqual('', h.tempName) self.assertEqual(0, len(h.return_values)) class CDBAccessCheck(unittest.TestCase): """Test of the CDBaccess class.""" def setUp(self): self.a = Acspy.Common.CDBAccess.CDBaccess() def tearDown(self): pass def testConstructor(self): """Access initialized""" self.assertEqual(0, len(self.a.cache)) self.assertEqual(mockCDB.__module__, self.a.m_dal.__module__) def testGetField(self): """Access retrieve CDB String""" global mockCDB mockCDB.get_DAO.return_value = ' ' str = self.a.getField('MACI/Container') self.assertEqual(fakeFunc['get_DAO'], str) self.assertEqual(1, len(self.a.cache)) self.assertEqual(True, 'MACI/Container' in self.a.cache) self.assertEqual(fakeFunc['get_DAO'], self.a.cache['MACI/Container']) mockCDB.get_DAO.return_value = mockCDB def testGetFieldCache(self): """Access retrieve CDB String from cache""" str = self.a.getField('MACI/Container') baseline = mockCDB.method_calls str2 = self.a.getField('MACI/Container') self.assertEqual(str, str2) self.assertEqual(baseline, mockCDB.method_calls) def testGetTopElement(self): """Access retrieve attributes from top level element""" global mockCDB mockCDB.get_DAO.return_value = ' ' attribs = self.a.getElement('MACI/Container', 'Container') self.assertEqual(1, len(attribs)) self.assertEqual(9, len(attribs[0])) self.assertEqual(['xmlns','xmlns:baci','ManagerRetry','xmlns:cdb','Timeout','xmlns:log','xmlns:xsi','UseIFR','ImplLang'], attribs[0].keys()) mockCDB.get_DAO.return_value = mockCDB def testGetNestedElement(self): """Access retrieve attributes from lower level element that has no attributes""" global mockCDB mockCDB.get_DAO.return_value = ' ' attribs = self.a.getElement('MACI/Container', 'Container/Autoload') self.assertEqual(1, len(attribs)) self.assertEqual(0, len(attribs[0])) mockCDB.get_DAO.return_value = mockCDB def testGetNestedElementAttr(self): """Access retrieve attributes from lower level element that has attributes""" global mockCDB mockCDB.get_DAO.return_value = ' ' attribs = self.a.getElement('MACI/Container', 'Container/LoggingConfig') self.assertEqual(1, len(attribs)) self.assertEqual(4, len(attribs[0])) self.assertEqual(['minLogLevel','dispatchPacketSize','centralizedLogger','immediateDispatchLevel'], attribs[0].keys()) mockCDB.get_DAO.return_value = mockCDB def suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(CDBHandlerCheck)) suite.addTest(unittest.makeSuite(CDBAccessCheck)) return suite if __name__ == "__main__": unittest.main(defaultTest='suite') # # ___oOo___