class TestMECODupeChecker(unittest.TestCase): """ Unit tests for duplicate checking. """ def setUp(self): self.dupeChecker = MECODupeChecker() self.p = MECOXMLParser(True) # run in testing mode self.dbConnect = MSGDBConnector(True) self.dbUtil = MSGDBUtil() self.conn = self.dbConnect.connectDB() self.cur = self.conn.cursor() def testInit(self): self.assertEqual(self.dupeChecker.__class__.__name__, "MECODupeChecker", "Dupe checker has been created.") def testFindIndividualDupe(self): """ Find a duplicate record when only one exists. """ self.dbUtil.eraseTestMeco() self.p.filename = "../../test-data/meco_v3-energy-test-data.xml" fileObject = open(self.p.filename, "rb") self.p.parseXML(fileObject, True) self.assertTrue( self.dupeChecker.readingBranchDupeExists(self.conn, '100000', '2013-04-08 00:30:00', '1', True), "Record should already exist") def testLoadOnTop(self): """ If the same data set is loaded in succession, all values will be duplicated. Verify that this is true. This is no longer possible as duplicates are dropped before insertion. """ pass def testLoadSingleMissingEntry(self): """ A reading will be inserted into the database where the reading does not currently exist as determined by the MeterName-IntervalEndTime-Channel tuple. """ pass def tearDown(self): self.dbConnect.closeDB(self.conn)
class TestMECOXMLParser(unittest.TestCase): """ Unit tests for MECO XML Parser. """ def setUp(self): self.p = MECOXMLParser(True) # run in testing mode self.dbConnect = MSGDBConnector(True) self.dbUtil = MSGDBUtil() self.conn = self.dbConnect.connectDB() self.cur = self.conn.cursor() def testMECOXMLParserCanBeInited(self): self.assertIsNotNone(self.p) def testEveryElementIsVisited(self): self.dbUtil.eraseTestMeco() self.p.filename = "../../test-data/meco_v3-energy-test-data.xml" fileObject = open(self.p.filename, "rb") expectedCount = 125 self.p.parseXML(fileObject, True) print "element count = %s" % self.p.processForInsertElementCount self.assertEqual(self.p.processForInsertElementCount, expectedCount) def testAllTableNamesArePresent(self): self.dbUtil.eraseTestMeco() self.p.filename = "../../test-data/meco_v3-energy-test-data.xml" fileObject = open(self.p.filename, "rb") self.p.parseXML(fileObject, True) fail = False for key in self.p.tableNameCount.keys(): print key + ": ", print self.p.tableNameCount[key] if self.p.tableNameCount[key] < 1: if key != 'ChannelStatus' and key != 'IntervalStatus' and key \ != 'EventData' and key != 'Event': print "table = %s" % key fail = True self.assertFalse(fail, "At least one table of each type should have been " "encountered.") def tearDown(self): self.dbConnect.closeDB(self.conn)
class TestMECOXMLParser(unittest.TestCase): """ Unit tests for MECO XML Parser. """ def setUp(self): self.p = MECOXMLParser(True) # run in testing mode self.dbConnect = MSGDBConnector(True) self.dbUtil = MSGDBUtil() self.conn = self.dbConnect.connectDB() self.cur = self.conn.cursor() def testMECOXMLParserCanBeInited(self): self.assertIsNotNone(self.p) def testEveryElementIsVisited(self): self.dbUtil.eraseTestMeco() self.p.filename = "../../test-data/meco_v3-energy-test-data.xml" fileObject = open(self.p.filename, "rb") expectedCount = 125 self.p.parseXML(fileObject, True) print "element count = %s" % self.p.processForInsertElementCount self.assertEqual(self.p.processForInsertElementCount, expectedCount) def testAllTableNamesArePresent(self): self.dbUtil.eraseTestMeco() self.p.filename = "../../test-data/meco_v3-energy-test-data.xml" fileObject = open(self.p.filename, "rb") self.p.parseXML(fileObject, True) fail = False for key in self.p.tableNameCount.keys(): print key + ": ", print self.p.tableNameCount[key] if self.p.tableNameCount[key] < 1: if key != 'ChannelStatus' and key != 'IntervalStatus' and key \ != 'EventData' and key != 'Event': print "table = %s" % key fail = True self.assertFalse( fail, "At least one table of each type should have been " "encountered.") def tearDown(self): self.dbConnect.closeDB(self.conn)
class MSGDBUtilTester(unittest.TestCase): """ Unit tests for MECO DB Utils. """ def setUp(self): self.i = MECODBInserter() # Connect to the testing database. self.connector = MSGDBConnector(testing = True) self.conn = self.connector.connectDB() self.lastSeqVal = None # Does this work having the dictCur be in another class? self.dictCur = self.connector.dictCur self.cursor = self.conn.cursor() self.deleter = MECODBDeleter() self.tableName = 'MeterData' self.columnName = 'meter_data_id' self.configer = MSGConfiger() self.logger = MSGLogger(__name__, 'debug') self.dbUtil = MSGDBUtil() def testMECODBUtilCanBeInited(self): self.assertIsNotNone(self.dbUtil) def testLastSequenceNumberIsCorrect(self): """ Test if last sequence ID value is generated correctly. Do this by inserting and deleting a DB record. """ # Insert some values. sampleDict = {'MeterName': '100001', 'UtilDeviceID': '100001', 'MacID': '00:00:00:00:00:00:00:00'} self.i.insertData(self.conn, self.tableName, sampleDict) self.lastSeqVal = self.dbUtil.getLastSequenceID(self.conn, self.tableName, self.columnName) print "lastSeqVal = %s" % self.lastSeqVal sql = """SELECT * FROM "%s" WHERE %s = %s""" % ( self.tableName, self.columnName, self.lastSeqVal) dictCur = self.connector.dictCur self.dbUtil.executeSQL(dictCur, sql) row = dictCur.fetchone() meterDataID = row[self.columnName] self.assertEqual(self.lastSeqVal, meterDataID) def testGetDBName(self): dbName = self.dbUtil.getDBName(self.cursor)[0] self.logger.log("DB name is %s" % dbName, 'info') self.assertEqual(dbName, "test_meco", "Testing DB name should be set correctly.") def testEraseTestingDatabase(self): """ Test that calls to eraseTestMeco() work correctly. """ dbName = self.dbUtil.getDBName(self.cursor)[0] self.logger.log("DB name is %s" % dbName, 'info') self.assertEqual(dbName, "test_meco", "Testing DB name should be set correctly.") self.dbUtil.eraseTestMeco() # Check all of the tables for the presence of records. for table in self.configer.insertTables: sql = """select count(*) from "%s";""" % table self.dbUtil.executeSQL(self.dictCur, sql) row = self.dictCur.fetchone() self.assertEqual(row[0], 0, "No records should be present in the %s table." % table) def testColumns(self): """ Test the ability to retrieve the column names from a database. """ print self.dbUtil.columns(self.cursor, 'Event') def tearDown(self): """ Delete the record that was inserted. """ if self.lastSeqVal != None: self.deleter.deleteRecord(self.conn, self.tableName, self.columnName, self.lastSeqVal) self.connector.closeDB(self.conn)
class MSGDBUtilTester(unittest.TestCase): """ Unit tests for MECO DB Utils. """ def setUp(self): self.i = MECODBInserter() # Connect to the testing database. self.connector = MSGDBConnector(testing=True) self.conn = self.connector.connectDB() self.lastSeqVal = None # Does this work having the dictCur be in another class? self.dictCur = self.connector.dictCur self.cursor = self.conn.cursor() self.deleter = MECODBDeleter() self.tableName = 'MeterData' self.columnName = 'meter_data_id' self.configer = MSGConfiger() self.logger = SEKLogger(__name__, 'debug') self.dbUtil = MSGDBUtil() def testMECODBUtilCanBeInited(self): self.assertIsNotNone(self.dbUtil) def testLastSequenceNumberIsCorrect(self): """ Test if last sequence ID value is generated correctly. Do this by inserting and deleting a DB record. """ # Insert some values. sampleDict = { 'MeterName': '100001', 'UtilDeviceID': '100001', 'MacID': '00:00:00:00:00:00:00:00' } self.i.insertData(self.conn, self.tableName, sampleDict) self.lastSeqVal = self.dbUtil.getLastSequenceID( self.conn, self.tableName, self.columnName) print "lastSeqVal = %s" % self.lastSeqVal sql = """SELECT * FROM "%s" WHERE %s = %s""" % ( self.tableName, self.columnName, self.lastSeqVal) dictCur = self.connector.dictCur self.dbUtil.executeSQL(dictCur, sql) row = dictCur.fetchone() meterDataID = row[self.columnName] self.assertEqual(self.lastSeqVal, meterDataID) def testGetDBName(self): dbName = self.dbUtil.getDBName(self.cursor)[0] self.logger.log("DB name is %s" % dbName, 'info') self.assertEqual(dbName, "test_meco", "Testing DB name should be set correctly.") def testEraseTestingDatabase(self): """ Test that calls to eraseTestMeco() work correctly. """ dbName = self.dbUtil.getDBName(self.cursor)[0] self.logger.log("DB name is %s" % dbName, 'info') self.assertEqual(dbName, "test_meco", "Testing DB name should be set correctly.") self.dbUtil.eraseTestMeco() # Check all of the tables for the presence of records. for table in self.configer.insertTables: sql = """select count(*) from "%s";""" % table self.dbUtil.executeSQL(self.dictCur, sql) row = self.dictCur.fetchone() self.assertEqual( row[0], 0, "No records should be present in the %s table." % table) def testColumns(self): """ Test the ability to retrieve the column names from a database. """ print self.dbUtil.columns(self.cursor, 'Event') def tearDown(self): """ Delete the record that was inserted. """ if self.lastSeqVal != None: self.deleter.deleteRecord(self.conn, self.tableName, self.columnName, self.lastSeqVal) self.connector.closeDB(self.conn)