OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 import 'dart:async'; |
| 6 |
| 7 import 'package:unittest/unittest.dart'; |
| 8 |
| 9 import 'package:appengine/api/errors.dart'; |
| 10 import 'package:appengine/src/api_impl/logging_impl.dart'; |
| 11 import 'package:appengine/src/protobuf_api/internal/' |
| 12 'api_base.pb.dart' as pb_base; |
| 13 import 'package:appengine/src/protobuf_api/internal/log_service.pb.dart' as pb; |
| 14 |
| 15 import 'utils/mock_rpc.dart'; |
| 16 |
| 17 main() { |
| 18 const INVALID_PROTOBUF = const [1, 2, 3, 4, 5]; |
| 19 |
| 20 group('logging', () { |
| 21 test('log_and_flush', () { |
| 22 var mock = new MockRPCService('logservice'); |
| 23 var logging = new LoggingRpcImpl(mock, ''); |
| 24 |
| 25 var utc42 = new DateTime.fromMillisecondsSinceEpoch(42, isUtc: true); |
| 26 |
| 27 // Make sure we can log without getting RPC requests. |
| 28 logging.debug('debug-custom-ts', timestamp: utc42); |
| 29 logging.debug('debug'); |
| 30 logging.info('info'); |
| 31 logging.warning('warning'); |
| 32 logging.error('error'); |
| 33 logging.critical('critical'); |
| 34 |
| 35 // Now we register a Flush handler and call flush, and validate that |
| 36 // the generated protocol buffers are correct. |
| 37 mock.register('Flush', pb.FlushRequest, expectAsync((request) { |
| 38 var group = new pb.UserAppLogGroup.fromBuffer(request.logs); |
| 39 var logs = group.logLine; |
| 40 expect(logs.length, equals(6)); |
| 41 |
| 42 expect(logs[0].message, equals('debug-custom-ts')); |
| 43 expect(logs[0].level.toInt(), equals(0)); |
| 44 expect(logs[0].timestampUsec.toInt(), equals(42000)); |
| 45 |
| 46 expect(logs[1].message, equals('debug')); |
| 47 expect(logs[1].level.toInt(), equals(0)); |
| 48 |
| 49 expect(logs[2].message, equals('info')); |
| 50 expect(logs[2].level.toInt(), equals(1)); |
| 51 |
| 52 expect(logs[3].message, equals('warning')); |
| 53 expect(logs[3].level.toInt(), equals(2)); |
| 54 |
| 55 expect(logs[4].message, equals('error')); |
| 56 expect(logs[4].level.toInt(), equals(3)); |
| 57 |
| 58 expect(logs[5].message, equals('critical')); |
| 59 expect(logs[5].level.toInt(), equals(4)); |
| 60 |
| 61 return new Future.value(new pb_base.VoidProto().writeToBuffer()); |
| 62 })); |
| 63 expect(logging.flush(), completes); |
| 64 }); |
| 65 test('no_error', () { |
| 66 var mock = new MockRPCService('logservice'); |
| 67 var logging = new LoggingRpcImpl(mock, ''); |
| 68 |
| 69 // Protocol errors are silently ignored. |
| 70 logging.debug('debug'); |
| 71 mock.register('Flush', pb.FlushRequest, expectAsync((request) { |
| 72 return new Future.value(INVALID_PROTOBUF); |
| 73 })); |
| 74 expect(logging.flush(), completes); |
| 75 |
| 76 // Network errors are silently ignored. |
| 77 logging.debug('debug'); |
| 78 mock.register('Flush', pb.FlushRequest, expectAsync((request) { |
| 79 return new Future.error(new NetworkError('')); |
| 80 })); |
| 81 expect(logging.flush(), completes); |
| 82 }); |
| 83 }); |
| 84 } |
OLD | NEW |