blob: 854f27bf9e47c6ecee54cd035aab41a9cd786d1b [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:io';
import 'package:test/test.dart';
import 'package:zircon/zircon.dart';
import 'package:lib.app.dart/logging.dart';
import 'package:lib.app.dart/src/fuchsia_log_record.dart';
const int _lookBackTimeGap = 15 * 1000 * 1000 * 1000; // 15 sec in nanoseconds
const int _zxClockMonotonic = 0;
class LoggerStub {
final List<LogWriterMessage> logMessages = <LogWriterMessage>[];
void writeLogMessage(LogWriterMessage message) {
logMessages.add(message);
}
}
void main() {
test('simple message', _testSimpleMessage);
test('message with exception', _testMessageWithException);
}
void _testSimpleMessage() {
LoggerStub logger = LoggerStub();
setupLogger(
logWriter: logger.writeLogMessage,
);
expect(logger.logMessages.isEmpty, true);
log.infoT('hello', tag: 'tag');
expect(logger.logMessages.length, equals(1));
FuchsiaLogRecord underTest = logger.logMessages[0].logRecord;
int now = Platform.isFuchsia
? System.clockGet(_zxClockMonotonic)
: DateTime.now().microsecondsSinceEpoch * 1000;
expect(underTest.systemTime, lessThanOrEqualTo(now));
expect(underTest.systemTime, greaterThanOrEqualTo(now - _lookBackTimeGap));
expect(underTest.localTag, equals('tag'));
expect(underTest.level, equals(Level.INFO));
expect(underTest.message, equals('hello'));
expect(underTest.sequenceNumber, equals(1));
expect(underTest.error, equals(null));
expect(underTest.stackTrace, equals(null));
log.info('world');
expect(logger.logMessages.length, equals(2));
underTest = logger.logMessages[1].logRecord;
expect(underTest.sequenceNumber, equals(2));
}
void _testMessageWithException() {
LoggerStub logger = LoggerStub();
setupLogger(
logWriter: logger.writeLogMessage,
);
expect(logger.logMessages.isEmpty, true);
Exception exception = Exception('cause');
log.infoT('hello',
tag: 'tag', error: exception, stackTrace: StackTrace.current);
expect(logger.logMessages.length, equals(1));
FuchsiaLogRecord underTest = logger.logMessages[0].logRecord;
int now = Platform.isFuchsia
? System.clockGet(_zxClockMonotonic)
: DateTime.now().microsecondsSinceEpoch * 1000;
expect(underTest.systemTime, lessThanOrEqualTo(now));
expect(underTest.systemTime, greaterThanOrEqualTo(now - _lookBackTimeGap));
expect(underTest.localTag, equals('tag'));
expect(underTest.level, equals(Level.INFO));
expect(underTest.message, equals('hello'));
expect(underTest.error, equals(exception));
expect(
underTest.stackTrace.toString(), contains('_testMessageWithException'));
}