UNPKG

sku-pg

Version:

Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!

601 lines (521 loc) 18.1 kB
<!DOCTYPE html> <html> <!-- Copyright 2008 The Closure Library Authors. All Rights Reserved. Use of this source code is governed by the Apache License, Version 2.0. See the COPYING file for details. --> <!-- --> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Closure Unit Tests - goog.gears.LogStore</title> <script src="../base.js"></script> <script> goog.require('goog.debug.LogManager'); goog.require('goog.gears.Database'); goog.require('goog.gears.LogStore'); goog.require('goog.log'); goog.require('goog.testing.MockClock'); goog.require('goog.testing.asserts'); goog.require('goog.testing.jsunit'); </script> </head> <body> <script> function isGearsAllowed() { return goog.gears.hasFactory() && goog.gears.getFactory().hasPermission; } var TEST_DB_NAME = 'my_test_db'; var TEST_TABLE_NAME = 'my_test_log_table'; var database_; var logStore_; var mockClock_ = new goog.testing.MockClock(); function setUpPage() { if (isGearsAllowed()) { // Remove table if already there try { database_ = new goog.gears.Database( 'me@mydomain.com', TEST_DB_NAME); database_.execute('DROP TABLE IF EXISTS ' + TEST_TABLE_NAME); } catch (ex) { debug('Could not create the database'); } } setUpPageStatus = 'complete'; } function setUp() { if (isGearsAllowed()) { logStore_ = new goog.gears.LogStore(database_, TEST_TABLE_NAME); logStore_.removeStore(); logStore_.ensureStoreExists(); } mockClock_.install(); mockClock_.tick(1); } function tearDown() { if (logStore_) { logStore_.removeStore(); } mockClock_.reset(); mockClock_.uninstall(); } function testStoreVersion() { if (!isGearsAllowed()) { return; } assertEquals( 'Bad initial store version', 1, logStore_.getStoreVersion()); } function testSchema() { if (!isGearsAllowed()) { return; } assertTrue('Missing ' + TEST_TABLE_NAME, logStore_.hasTable(TEST_TABLE_NAME)); } function testDefaultDbName() { if (!isGearsAllowed()) { return; } var aLogStore = new goog.gears.LogStore(database_); aLogStore.removeStore(); aLogStore.ensureStoreExists(); assertTrue('Missing ' + goog.gears.LogStore.DEFAULT_TABLE_NAME_, aLogStore.hasTable(goog.gears.LogStore.DEFAULT_TABLE_NAME_)); aLogStore.removeStore(); } function assertLogRecord(actualRecord, expectedMinMillis, expectedMaxMillis, expectedLevel, expectedMessage, expectedLoggerName, expectedException) { assertTrue('wrong millis: ' + actualRecord.getMillis(), expectedMinMillis <= actualRecord.getMillis() && actualRecord.getMillis() <= expectedMaxMillis); assertEquals('wrong level', expectedLevel, actualRecord.getLevel()); assertEquals('wrong message', expectedMessage, actualRecord.getMessage()); assertEquals('wrong logger', expectedLoggerName, actualRecord.getLoggerName()); // Exception. if (expectedException) { assertObjectEquals('wrong exception', expectedException, actualRecord.getException()); assertTrue('missing exception text', !!actualRecord.getExceptionText()); } else { assertNull('unexpected exception', actualRecord.getException()); assertNull('unexpected exception text', actualRecord.getExceptionText()); } } function assertSequence(records) { var lastSequenceNumber = -1; var lastMillis = -1; for (var i = records.length - 1; i >= 0; i--) { var thisSequenceNumber = records[i].getSequenceNumber(); var thisMillis = records[i].getMillis(); assertTrue('not descending sequence numbers', thisSequenceNumber > lastSequenceNumber); assertTrue('not descending millis', thisMillis >= lastMillis); lastSequenceNumber = thisSequenceNumber; lastMillis = thisMillis; } } function testSetCapturing() { if (!isGearsAllowed()) { return; } goog.debug.LogManager.getRoot().setLevel(goog.log.Level.ALL); // Create logger object. var loggerName = 'my-logger'; var logger = goog.log.getLogger(loggerName); // Disabled capturing. Select by logger to avoid other records. assertFalse('capturing', logStore_.isCapturing()); goog.log.error(logger, 'not capturing'); var query = new goog.gears.LogStore.Query(); query.loggerLike = loggerName; assertEquals('records found while not capturing', 0, logStore_.select(query).length); // Enable capturing. logStore_.setCapturing(true); assertTrue('not capturing', logStore_.isCapturing()); goog.log.error(logger, 'capturing'); var count = logStore_.select(query).length; assertTrue('no records found while capturing', count > 0); // Disable capturing. logStore_.setCapturing(false); assertFalse('capturing', logStore_.isCapturing()); goog.log.error(logger, 'not capturing'); assertEquals('records found while not capturing', count, logStore_.select(query).length); } function testLogException() { if (!isGearsAllowed()) { return; } goog.debug.LogManager.getRoot().setLevel(goog.log.Level.ALL); logStore_.setCapturing(true); // Create logger object. var loggerName = 'my-logger'; var logger = goog.log.getLogger(loggerName); // Log message. var beforeMillis = goog.now(); var msgs = ['my-message-0', 'my-message-1']; var err = { message: 'my-error-msg', name: 'my-error', lineNumber: 10, fileName: 'my-file', stack: 'my-stack' }; goog.log.info(logger, msgs[0]); goog.log.error(logger, msgs[1], err); var afterMillis = goog.now(); // Select by logger to avoid other records. var query = new goog.gears.LogStore.Query(); query.loggerLike = loggerName; var records = logStore_.select(query); // Validate records. assertEquals('wrong # records', 2, records.length); assertLogRecord(records[0], beforeMillis, afterMillis, goog.log.Level.SEVERE, msgs[1], loggerName, err); assertLogRecord(records[1], beforeMillis, afterMillis, goog.log.Level.INFO, msgs[0], loggerName); assertSequence(records); } function testSelectByLevel() { if (!isGearsAllowed()) { return; } goog.debug.LogManager.getRoot().setLevel(goog.log.Level.ALL); logStore_.setCapturing(true); // Create logger object. var loggerName = 'my-logger'; var logger = goog.log.getLogger(loggerName); logger.setLevel(goog.log.Level.FINE); // Log messages. var msg = 'my-message'; var beforeMillis = goog.now(); goog.log.log(logger, goog.log.Level.FINEST, msg + 'FINEST'); goog.log.log(logger, goog.log.Level.FINER, msg + 'FINER'); goog.log.fine(logger, msg + 'FINE'); logger.config(msg + 'CONFIG'); goog.log.info(logger, msg + 'INFO'); goog.log.warning(logger, msg + 'WARNING'); goog.log.error(logger, msg + 'SEVERE'); var afterMillis = goog.now(); // Select FINE+ records. Select by logger to avoid other records. var query = new goog.gears.LogStore.Query(); query.level = goog.log.Level.ALL; query.loggerLike = loggerName; var records = logStore_.select(query); var expectedLevels = [ goog.log.Level.SEVERE, goog.log.Level.WARNING, goog.log.Level.INFO, goog.log.Level.CONFIG, goog.log.Level.FINE ]; assertEquals('wrong # records', 5, records.length); for (var i = 0; i < records.length; i++) { assertLogRecord(records[i], beforeMillis, afterMillis, expectedLevels[i], msg + expectedLevels[i].name, loggerName); } assertSequence(records); // Select INFO+ records. query.level = goog.log.Level.INFO; var records = logStore_.select(query); expectedLevels = [ goog.log.Level.SEVERE, goog.log.Level.WARNING, goog.log.Level.INFO ]; assertEquals('wrong # records', 3, records.length); for (var i = 0; i < records.length; i++) { assertLogRecord(records[i], beforeMillis, afterMillis, expectedLevels[i], msg + expectedLevels[i].name, loggerName); } assertSequence(records); } /** * This tests selecting by clock time, and also tests log records added by * logStore. */ function testSelectByMillis() { if (!isGearsAllowed()) { return; } goog.debug.LogManager.getRoot().setLevel(goog.log.Level.ALL); logStore_.setCapturing(true); // Create logger object. var loggerName = 'my-logger'; var logger = goog.log.getLogger(loggerName); // Log messages. var msg = 'my-message'; var millis0 = mockClock_.tick(100000); goog.log.info(logger, msg + 0); var millis1 = mockClock_.tick(100000); goog.log.info(logger, msg + 1); var millis2 = mockClock_.tick(100000); goog.log.info(logger, msg + 2); var millis3 = mockClock_.tick(0xfffffffffffffffffffffffff); goog.log.info(logger, msg + 3); var millis4 = mockClock_.tick(100000); // Select before records. Select by logger to avoid other records. var query = new goog.gears.LogStore.Query(); query.maxMillis = millis1; query.loggerLike = loggerName; var records = logStore_.select(query); assertEquals('wrong # records', 2, records.length); assertLogRecord(records[0], millis0, millis1, goog.log.Level.INFO, msg + 1, loggerName); assertLogRecord(records[1], millis0, millis1, goog.log.Level.INFO, msg + 0, loggerName); assertSequence(records); // Select between records. query.minMillis = millis2; query.maxMillis = millis3; records = logStore_.select(query); assertEquals('wrong # records', 2, records.length); assertLogRecord(records[0], millis2, millis3, goog.log.Level.INFO, msg + 3, loggerName); assertLogRecord(records[1], millis2, millis3, goog.log.Level.INFO, msg + 2, loggerName); assertSequence(records); // Select after records. query.minMillis = millis3; query.maxMillis = Infinity; records = logStore_.select(query); assertEquals('wrong # records', 1, records.length); assertLogRecord(records[0], millis3, millis4, goog.log.Level.INFO, msg + 3, loggerName); assertSequence(records); } function testSelectByMessage() { if (!isGearsAllowed()) { return; } goog.debug.LogManager.getRoot().setLevel(goog.log.Level.ALL); logStore_.setCapturing(true); // Create logger object. var loggerName = 'my-logger'; var logger = goog.log.getLogger(loggerName); // Log messages. var msg = 'my-message'; var beforeMillis = goog.now(); goog.log.info(logger, msg + '1'); goog.log.info(logger, msg + '20'); goog.log.info(logger, msg + '21'); goog.log.info(logger, msg + '3'); var afterMillis = goog.now(); // Select 2 records. var query = new goog.gears.LogStore.Query(); query.msgLike = '%2%'; var records = logStore_.select(query); assertEquals('wrong # records', 2, records.length); assertLogRecord(records[0], beforeMillis, afterMillis, goog.log.Level.INFO, msg + '21', loggerName); assertLogRecord(records[1], beforeMillis, afterMillis, goog.log.Level.INFO, msg + '20', loggerName); assertSequence(records); } function testSelectByLogger() { if (!isGearsAllowed()) { return; } goog.debug.LogManager.getRoot().setLevel(goog.log.Level.ALL); logStore_.setCapturing(true); // Create logger object. var loggerName = 'my-logger'; var logger1 = goog.log.getLogger(loggerName + 1); var logger2 = goog.log.getLogger(loggerName + 2); var logger3 = goog.log.getLogger(loggerName + 3); // Log messages. var msg = 'my-message'; var beforeMillis = goog.now(); logger1.info(msg + '1'); mockClock_.tick(); logger2.info(msg + '2'); mockClock_.tick(); logger3.info(msg + '3'); mockClock_.tick(); var afterMillis = goog.now(); // Select 1 records. var query = new goog.gears.LogStore.Query(); query.loggerLike = '%2%'; var records = logStore_.select(query); assertEquals('wrong # records', 1, records.length); assertLogRecord(records[0], beforeMillis, afterMillis, goog.log.Level.INFO, msg + '2', loggerName + 2); assertSequence(records); } function testSelectLimit() { if (!isGearsAllowed()) { return; } goog.debug.LogManager.getRoot().setLevel(goog.log.Level.ALL); logStore_.setCapturing(true); // Create logger object. var loggerName = 'my-logger'; var logger = goog.log.getLogger(loggerName); // Log messages. var msg = 'my-message'; var beforeMillis = goog.now(); goog.log.info(logger, msg + '1'); mockClock_.tick(); goog.log.info(logger, msg + '2'); mockClock_.tick(); goog.log.info(logger, msg + '3'); mockClock_.tick(); goog.log.info(logger, msg + '4'); mockClock_.tick(); goog.log.info(logger, msg + '5'); mockClock_.tick(); var afterMillis = goog.now(); // Select 5 records. var query = new goog.gears.LogStore.Query(); query.loggerLike = loggerName; records = logStore_.select(query); assertEquals('wrong # records', 5, records.length); assertSequence(records); // Select last 3 records. query.limit = 3; records = logStore_.select(query); assertEquals('wrong # records', 3, records.length); assertLogRecord(records[0], beforeMillis, afterMillis, goog.log.Level.INFO, msg + '5', loggerName); assertLogRecord(records[1], beforeMillis, afterMillis, goog.log.Level.INFO, msg + '4', loggerName); assertLogRecord(records[2], beforeMillis, afterMillis, goog.log.Level.INFO, msg + '3', loggerName); assertSequence(records); } function testPruneBeforeCount() { if (!isGearsAllowed()) { return; } logStore_.setCapturing(true); // Set to WARNING to avoid database and other logging. goog.debug.LogManager.getRoot().setLevel(goog.log.Level.WARNING); // Create logger object. var loggerName = 'my-logger'; var logger = goog.log.getLogger(loggerName); // Log messages. var msg = 'my-message'; goog.log.error(logger, msg + '1!'); mockClock_.tick(); goog.log.warning(logger, msg + '2'); mockClock_.tick(); goog.log.error(logger, msg + '3!'); var betweenMillis = mockClock_.tick(); goog.log.warning(logger, msg + '4'); mockClock_.tick(); goog.log.error(logger, msg + '5!'); mockClock_.tick(); goog.log.warning(logger, msg + '6'); mockClock_.tick(); // Select by logger to avoid other records. var query = new goog.gears.LogStore.Query(); query.loggerLike = loggerName; assertEquals('wrong # records', 6, logStore_.select(query).length); logStore_.pruneBeforeCount(3); assertEquals('wrong # records', 3, logStore_.select(query).length); } function testPruneBeforeSequenceNumber() { if (!isGearsAllowed()) { return; } logStore_.setCapturing(true); // Set to WARNING to avoid database and other logging. goog.debug.LogManager.getRoot().setLevel(goog.log.Level.WARNING); // Create logger object. var loggerName = 'my-logger'; var logger = goog.log.getLogger(loggerName); // Log messages. var msg = 'my-message'; goog.log.error(logger, msg + '1!'); mockClock_.tick(); goog.log.warning(logger, msg + '2'); mockClock_.tick(); goog.log.error(logger, msg + '3!'); var betweenMillis = mockClock_.tick(); goog.log.warning(logger, msg + '4'); mockClock_.tick(); goog.log.error(logger, msg + '5!'); mockClock_.tick(); goog.log.warning(logger, msg + '6'); mockClock_.tick(); // Select by logger to avoid other records. var query = new goog.gears.LogStore.Query(); query.loggerLike = loggerName; var records = logStore_.select(query); assertEquals('wrong # records', 6, records.length); logStore_.pruneBeforeSequenceNumber(records[3].getSequenceNumber()); assertEquals('wrong # records', 3, logStore_.select(query).length); } function testAutoPrune() { if (!isGearsAllowed()) { return; } logStore_.setCapturing(true); // Set to WARNING to avoid database and other logging. goog.debug.LogManager.getRoot().setLevel(goog.log.Level.WARNING); // Create logger object. var loggerName = 'my-logger'; var logger = goog.log.getLogger(loggerName); // Log messages. var msg = 'my-message'; mockClock_.tick(100); goog.log.error(logger, msg + '1!'); mockClock_.tick(100); goog.log.warning(logger, msg + '2'); mockClock_.tick(100); goog.log.error(logger, msg + '3!'); mockClock_.tick(100); goog.log.warning(logger, msg + '4'); mockClock_.tick(100); goog.log.error(logger, msg + '5!'); mockClock_.tick(100); goog.log.warning(logger, msg + '6'); mockClock_.tick(100); // Auto-prune specified interval (100). assertFalse('auto prune should not be active', logStore_.isAutoPruneActive()); var query = new goog.gears.LogStore.Query(); query.loggerLike = loggerName; assertEquals('wrong # records', 6, logStore_.select(query).length); logStore_.createAutoPruneDelay(3, 100); logStore_.startAutoPrune(); assertTrue('auto prune should be active', logStore_.isAutoPruneActive()); assertEquals('wrong # records', 3, logStore_.select(query).length); goog.log.warning(logger, msg + '7'); mockClock_.tick(50); assertEquals('wrong # records', 4, logStore_.select(query).length); mockClock_.tick(50); assertEquals('wrong # records', 3, logStore_.select(query).length); // Stop autoprune. logStore_.stopAutoPrune(); assertFalse('auto prune should not be active', logStore_.isAutoPruneActive()); goog.log.warning(logger, msg + '8'); mockClock_.tick(200); assertEquals('wrong # records', 4, logStore_.select(query).length); // Auto-prune default interval (600000). logStore_.createAutoPruneDelay(3); logStore_.startAutoPrune(3); assertTrue('auto prune should be active', logStore_.isAutoPruneActive()); assertEquals('wrong # records', 3, logStore_.select(query).length); goog.log.warning(logger, msg + '7'); goog.log.error(logger, msg + '8!'); goog.log.warning(logger, msg + '9'); mockClock_.tick(50); assertEquals('wrong # records', 6, logStore_.select(query).length); mockClock_.tick(50); assertEquals('wrong # records', 6, logStore_.select(query).length); mockClock_.tick(599900); assertEquals('wrong # records', 3, logStore_.select(query).length); goog.log.warning(logger, msg + '10'); mockClock_.tick(100); assertEquals('wrong # records', 4, logStore_.select(query).length); // Stop autoprune. logStore_.stopAutoPrune(); assertFalse('auto prune should not be active', logStore_.isAutoPruneActive()); } </script> </body> </html>